本文整理汇总了Golang中github.com/openshift/source-to-image/pkg/api.Config类的典型用法代码示例。如果您正苦于以下问题:Golang Config类的具体用法?Golang Config怎么用?Golang Config使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Config类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Restore
// Restore loads the arguments from disk and prefills the Request
func Restore(config *api.Config, cmd *cobra.Command) {
data, err := ioutil.ReadFile(DefaultConfigPath)
if err != nil {
data, err = ioutil.ReadFile(".stifile")
if err != nil {
glog.V(1).Infof("Unable to restore %s: %v", DefaultConfigPath, err)
return
}
glog.Infof("DEPRECATED: Use %s instead of .stifile", DefaultConfigPath)
}
c := Config{}
if err := json.Unmarshal(data, &c); err != nil {
glog.V(1).Infof("Unable to parse %s: %v", DefaultConfigPath, err)
return
}
config.BuilderImage = c.BuilderImage
config.Source = c.Source
config.Tag = c.Tag
for name, value := range c.Flags {
// Do not change flags that user sets. Allow overriding of stored flags.
if cmd.Flag(name).Changed {
continue
}
cmd.Flags().Set(name, value)
}
}
开发者ID:php-coder,项目名称:source-to-image,代码行数:27,代码来源:config.go
示例2: newCmdRebuild
func newCmdRebuild(cfg *api.Config) *cobra.Command {
buildCmd := &cobra.Command{
Use: "rebuild <image> [<new-tag>]",
Short: "Rebuild an existing image",
Long: "Rebuild an existing application image that was build by S2I previously.",
Run: func(cmd *cobra.Command, args []string) {
// If user specifies the arguments, then we override the stored ones
if len(args) >= 0 {
cfg.Tag = args[0]
} else {
cmd.Help()
os.Exit(1)
}
if r, err := os.Open(cfg.DockerCfgPath); err == nil {
cfg.PullAuthentication = docker.GetImageRegistryAuth(r, cfg.Tag)
}
err := build.GenerateConfigFromLabels(cfg.Tag, cfg)
checkErr(err)
if len(args) >= 2 {
cfg.Tag = args[1]
}
// Attempt to read the .dockercfg and extract the authentication for
// docker pull
if r, err := os.Open(cfg.DockerCfgPath); err == nil {
cfg.PullAuthentication = docker.GetImageRegistryAuth(r, cfg.BuilderImage)
}
if glog.V(2) {
fmt.Printf("\n%s\n", describe.DescribeConfig(cfg))
}
builder, err := strategies.GetStrategy(cfg)
checkErr(err)
result, err := builder.Build(cfg)
checkErr(err)
for _, message := range result.Messages {
glog.V(1).Infof(message)
}
},
}
buildCmd.Flags().BoolVarP(&(cfg.Quiet), "quiet", "q", false, "Operate quietly. Suppress all non-error output.")
buildCmd.Flags().BoolVar(&(cfg.Incremental), "incremental", true, "Perform an incremental build")
buildCmd.Flags().BoolVar(&(cfg.RemovePreviousImage), "rm", false, "Remove the previous image during incremental builds")
buildCmd.Flags().StringVar(&(cfg.CallbackURL), "callback-url", "", "Specify a URL to invoke via HTTP POST upon build completion")
buildCmd.Flags().BoolVar(&(cfg.ForcePull), "force-pull", true, "Always pull the builder image even if it is present locally")
buildCmd.Flags().BoolVar(&(cfg.PreserveWorkingDir), "save-temp-dir", false, "Save the temporary directory used by STI instead of deleting it")
buildCmd.Flags().StringVarP(&(cfg.DockerCfgPath), "dockercfg-path", "", filepath.Join(os.Getenv("HOME"), ".dockercfg"), "Specify the path to the Docker configuration file")
return buildCmd
}
开发者ID:rimolive,项目名称:source-to-image,代码行数:56,代码来源:main.go
示例3: newCmdRebuild
func newCmdRebuild(cfg *api.Config) *cobra.Command {
buildCmd := &cobra.Command{
Use: "rebuild <image> [<new-tag>]",
Short: "Rebuild an existing image",
Long: "Rebuild an existing application image that was built by S2I previously.",
Run: func(cmd *cobra.Command, args []string) {
// If user specifies the arguments, then we override the stored ones
if len(args) >= 1 {
cfg.Tag = args[0]
} else {
cmd.Help()
os.Exit(1)
}
if r, err := os.Open(cfg.DockerCfgPath); err == nil {
cfg.PullAuthentication = docker.LoadAndGetImageRegistryAuth(r, cfg.Tag)
}
err := build.GenerateConfigFromLabels(cfg.Tag, cfg)
checkErr(err)
if len(args) >= 2 {
cfg.Tag = args[1]
}
// Attempt to read the .dockercfg and extract the authentication for
// docker pull
if r, err := os.Open(cfg.DockerCfgPath); err == nil {
cfg.PullAuthentication = docker.LoadAndGetImageRegistryAuth(r, cfg.BuilderImage)
}
if len(cfg.BuilderPullPolicy) == 0 {
cfg.BuilderPullPolicy = api.DefaultBuilderPullPolicy
}
if glog.V(2) {
fmt.Printf("\n%s\n", describe.DescribeConfig(cfg))
}
builder, err := strategies.GetStrategy(cfg)
checkErr(err)
result, err := builder.Build(cfg)
checkErr(err)
for _, message := range result.Messages {
glog.V(1).Infof(message)
}
},
}
cmdutil.AddCommonFlags(buildCmd, cfg)
return buildCmd
}
开发者ID:paralin,项目名称:source-to-image,代码行数:54,代码来源:main.go
示例4: GenerateConfigFromLabels
// GenerateConfigFromLabels generates the S2I Config struct from the Docker
// image labels.
func GenerateConfigFromLabels(image string, config *api.Config) error {
d, err := docker.New(config.DockerConfig, config.PullAuthentication)
if err != nil {
return err
}
var source *dockerclient.Image
if config.ForcePull {
source, err = d.PullImage(image)
} else {
source, err = d.CheckAndPullImage(image)
}
if err != nil {
return err
}
if builderVersion, ok := source.Config.Labels["io.openshift.builder-version"]; ok {
config.BuilderImageVersion = builderVersion
config.BuilderBaseImageVersion = source.Config.Labels["io.openshift.builder-base-version"]
}
config.ScriptsURL = source.Config.Labels[api.DefaultNamespace+"scripts-url"]
if len(config.ScriptsURL) == 0 {
// FIXME: Backward compatibility
config.ScriptsURL = source.Config.Labels["io.s2i.scripts-url"]
}
config.Description = source.Config.Labels[api.KubernetesNamespace+"description"]
config.DisplayName = source.Config.Labels[api.KubernetesNamespace+"display-name"]
if builder, ok := source.Config.Labels[api.DefaultNamespace+"build.image"]; ok {
config.BuilderImage = builder
} else {
return fmt.Errorf("Required label %q not found in image", api.DefaultNamespace+"build.image")
}
if repo, ok := source.Config.Labels[api.DefaultNamespace+"build.source-location"]; ok {
config.Source = repo
} else {
return fmt.Errorf("Required label %q not found in image", api.DefaultNamespace+"source-location")
}
config.ContextDir = source.Config.Labels[api.DefaultNamespace+"build.source-context-dir"]
config.Ref = source.Config.Labels[api.DefaultNamespace+"build.commit.ref"]
return nil
}
开发者ID:jhadvig,项目名称:origin,代码行数:50,代码来源:config.go
示例5: Download
// Download downloads the application source code from the GIT repository
// and checkout the Ref specified in the config.
func (c *Clone) Download(config *api.Config) (*api.SourceInfo, error) {
targetSourceDir := filepath.Join(config.WorkingDir, api.Source)
config.WorkingSourceDir = targetSourceDir
var info *api.SourceInfo
if c.ValidCloneSpec(config.Source) {
if len(config.ContextDir) > 0 {
targetSourceDir = filepath.Join(config.WorkingDir, api.ContextTmp)
}
glog.V(2).Infof("Cloning into %s", targetSourceDir)
if err := c.Clone(config.Source, targetSourceDir); err != nil {
glog.V(1).Infof("Git clone failed: %+v", err)
return nil, err
}
if len(config.Ref) > 0 {
if err := c.Checkout(targetSourceDir, config.Ref); err != nil {
return nil, err
}
glog.V(1).Infof("Checked out %q", config.Ref)
}
if len(config.ContextDir) > 0 {
originalTargetDir := filepath.Join(config.WorkingDir, api.Source)
c.RemoveDirectory(originalTargetDir)
// we want to copy entire dir contents, thus we need to use dir/. construct
path := filepath.Join(targetSourceDir, config.ContextDir) + string(filepath.Separator) + "."
err := c.Copy(path, originalTargetDir)
if err != nil {
return nil, err
}
info = c.GetInfo(targetSourceDir)
c.RemoveDirectory(targetSourceDir)
} else {
info = c.GetInfo(targetSourceDir)
}
if len(config.ContextDir) > 0 {
info.ContextDir = config.ContextDir
}
return info, nil
}
// we want to copy entire dir contents, thus we need to use dir/. construct
path := filepath.Join(config.Source, config.ContextDir) + string(filepath.Separator) + "."
if !c.Exists(path) {
return nil, errors.NewSourcePathError(path)
}
if err := c.Copy(path, targetSourceDir); err != nil {
return nil, err
}
// When building from a local directory (not using GIT clone spec scheme) we
// skip gathering informations about the source as there is no guarantee that
// the folder is a GIT repository or it requires context-dir to be set.
if !config.Quiet {
glog.Warning("You are using <source> location that is not valid GIT repository. The source code information will not be stored into the output image. Use this image only for local testing and development.")
}
return nil, nil
}
开发者ID:jhadvig,项目名称:origin,代码行数:62,代码来源:clone.go
示例6: Strategy
// Strategy creates the appropriate build strategy for the provided config, using
// the overrides provided. Not all strategies support all overrides.
func Strategy(config *api.Config, overrides build.Overrides) (build.Builder, api.BuildInfo, error) {
var builder build.Builder
var buildInfo api.BuildInfo
image, err := docker.GetBuilderImage(config)
if err != nil {
buildInfo.FailureReason = utilstatus.NewFailureReason(utilstatus.ReasonPullBuilderImageFailed, utilstatus.ReasonMessagePullBuilderImageFailed)
return nil, buildInfo, err
}
config.HasOnBuild = image.OnBuild
// if we're blocking onbuild, just do a normal s2i build flow
// which won't do a docker build and invoke the onbuild commands
if image.OnBuild && !config.BlockOnBuild {
builder, err = onbuild.New(config, overrides)
if err != nil {
buildInfo.FailureReason = utilstatus.NewFailureReason(utilstatus.ReasonGenericS2IBuildFailed, utilstatus.ReasonMessageGenericS2iBuildFailed)
return nil, buildInfo, err
}
return builder, buildInfo, nil
}
builder, err = sti.New(config, overrides)
if err != nil {
buildInfo.FailureReason = utilstatus.NewFailureReason(utilstatus.ReasonGenericS2IBuildFailed, utilstatus.ReasonMessageGenericS2iBuildFailed)
return nil, buildInfo, err
}
return builder, buildInfo, err
}
开发者ID:juanluisvaladas,项目名称:origin,代码行数:31,代码来源:strategies.go
示例7: New
// New returns a new instance of OnBuild builder
func New(config *api.Config, overrides build.Overrides) (*OnBuild, error) {
dockerHandler, err := docker.New(config.DockerConfig, config.PullAuthentication)
if err != nil {
return nil, err
}
b := &OnBuild{
docker: dockerHandler,
git: git.New(),
fs: util.NewFileSystem(),
tar: tar.New(),
}
// Use STI Prepare() and download the 'run' script optionally.
s, err := sti.New(config, overrides)
s.SetScripts([]string{}, []string{api.Assemble, api.Run})
downloader := overrides.Downloader
if downloader == nil {
d, sourceURL, err := scm.DownloaderForSource(config.Source)
if err != nil {
return nil, err
}
downloader = d
config.Source = sourceURL
}
b.source = onBuildSourceHandler{
Downloader: downloader,
Preparer: s,
Ignorer: &ignore.DockerIgnorer{},
}
b.garbage = &build.DefaultCleaner{b.fs, b.docker}
return b, nil
}
开发者ID:johnmccawley,项目名称:origin,代码行数:35,代码来源:onbuild.go
示例8: Download
func (f *File) Download(config *api.Config) (*api.SourceInfo, error) {
targetSourceDir := filepath.Join(config.WorkingDir, api.Source)
sourceDir := strings.TrimPrefix(config.Source, "file://")
config.WorkingSourceDir = targetSourceDir
if len(config.ContextDir) > 0 {
targetSourceDir = filepath.Join(config.WorkingDir, api.ContextTmp)
}
glog.V(1).Infof("Copying sources from %q to %q", sourceDir, targetSourceDir)
err := f.CopyContents(sourceDir, targetSourceDir)
if err != nil {
return nil, err
}
if len(config.ContextDir) > 0 {
originalTargetDir := filepath.Join(config.WorkingDir, api.Source)
f.RemoveDirectory(originalTargetDir)
// we want to copy entire dir contents, thus we need to use dir/. construct
path := filepath.Join(targetSourceDir, config.ContextDir) + string(filepath.Separator) + "."
err := f.Copy(path, originalTargetDir)
if err != nil {
return nil, err
}
f.RemoveDirectory(targetSourceDir)
}
return &api.SourceInfo{
Location: sourceDir,
ContextDir: config.ContextDir,
}, nil
}
开发者ID:RomainVabre,项目名称:origin,代码行数:32,代码来源:download.go
示例9: New
// New returns the instance of STI builder strategy for the given config.
// If the layeredBuilder parameter is specified, then the builder provided will
// be used for the case that the base Docker image does not have 'tar' or 'bash'
// installed.
func New(req *api.Config, overrides build.Overrides) (*STI, error) {
docker, err := dockerpkg.New(req.DockerConfig, req.PullAuthentication)
if err != nil {
return nil, err
}
var incrementalDocker dockerpkg.Docker
if req.Incremental {
incrementalDocker, err = dockerpkg.New(req.DockerConfig, req.IncrementalAuthentication)
if err != nil {
return nil, err
}
}
inst := scripts.NewInstaller(req.BuilderImage, req.ScriptsURL, docker, req.PullAuthentication)
b := &STI{
installer: inst,
config: req,
docker: docker,
incrementalDocker: incrementalDocker,
git: git.New(),
fs: util.NewFileSystem(),
tar: tar.New(),
callbackInvoker: util.NewCallbackInvoker(),
requiredScripts: []string{api.Assemble, api.Run},
optionalScripts: []string{api.SaveArtifacts},
externalScripts: map[string]bool{},
installedScripts: map[string]bool{},
scriptsURL: map[string]string{},
}
// The sources are downloaded using the GIT downloader.
// TODO: Add more SCM in future.
// TODO: explicit decision made to customize processing for usage specifically vs.
// leveraging overrides; also, we ultimately want to simplify s2i usage a good bit,
// which would lead to replacing this quick short circuit (so this change is tactical)
b.source = overrides.Downloader
if b.source == nil && !req.Usage {
downloader, sourceURL, err := scm.DownloaderForSource(req.Source, req.ForceCopy)
if err != nil {
return nil, err
}
b.source = downloader
req.Source = sourceURL
}
b.garbage = &build.DefaultCleaner{b.fs, b.docker}
b.layered, err = layered.New(req, b, overrides)
// Set interfaces
b.preparer = b
// later on, if we support say .gitignore func in addition to .dockerignore func, setting
// ignorer will be based on config setting
b.ignorer = &ignore.DockerIgnorer{}
b.artifacts = b
b.scripts = b
b.postExecutor = b
return b, err
}
开发者ID:carriercomm,项目名称:origin,代码行数:63,代码来源:sti.go
示例10: New
// New returns the instance of STI builder strategy for the given config.
// If the layeredBuilder parameter is specified, then the builder provided will
// be used for the case that the base Docker image does not have 'tar' or 'bash'
// installed.
func New(req *api.Config, overrides build.Overrides) (*STI, error) {
docker, err := dockerpkg.New(req.DockerConfig, req.PullAuthentication)
if err != nil {
return nil, err
}
var incrementalDocker dockerpkg.Docker
if req.Incremental {
incrementalDocker, err = dockerpkg.New(req.DockerConfig, req.IncrementalAuthentication)
if err != nil {
return nil, err
}
}
inst := scripts.NewInstaller(req.BuilderImage, req.ScriptsURL, docker, req.PullAuthentication)
b := &STI{
installer: inst,
config: req,
docker: docker,
incrementalDocker: incrementalDocker,
git: git.New(),
fs: util.NewFileSystem(),
tar: tar.New(),
callbackInvoker: util.NewCallbackInvoker(),
requiredScripts: []string{api.Assemble, api.Run},
optionalScripts: []string{api.SaveArtifacts},
externalScripts: map[string]bool{},
installedScripts: map[string]bool{},
scriptsURL: map[string]string{},
}
// The sources are downloaded using the GIT downloader.
// TODO: Add more SCM in future.
b.source = overrides.Downloader
if b.source == nil {
downloader, sourceURL, err := scm.DownloaderForSource(req.Source)
if err != nil {
return nil, err
}
b.source = downloader
req.Source = sourceURL
}
b.garbage = &build.DefaultCleaner{b.fs, b.docker}
b.layered, err = layered.New(req, b, overrides)
// Set interfaces
b.preparer = b
// later on, if we support say .gitignore func in addition to .dockerignore func, setting
// ignorer will be based on config setting
b.ignorer = &ignore.DockerIgnorer{}
b.artifacts = b
b.scripts = b
b.postExecutor = b
return b, err
}
开发者ID:4sp1r3,项目名称:source-to-image,代码行数:60,代码来源:sti.go
示例11: GenerateConfigFromLabels
// GenerateConfigFromLabels generates the S2I Config struct from the Docker
// image labels.
func GenerateConfigFromLabels(config *api.Config, metadata *docker.PullResult) error {
if config == nil {
return errors.New("config must be provided to GenerateConfigFromLabels")
}
if metadata == nil {
return errors.New("image metadata must be provided to GenerateConfigFromLabels")
}
labels := metadata.Image.Config.Labels
if builderVersion, ok := labels["io.openshift.builder-version"]; ok {
config.BuilderImageVersion = builderVersion
config.BuilderBaseImageVersion = labels["io.openshift.builder-base-version"]
}
config.ScriptsURL = labels[api.DefaultNamespace+"scripts-url"]
if len(config.ScriptsURL) == 0 {
// FIXME: Backward compatibility
config.ScriptsURL = labels["io.s2i.scripts-url"]
}
config.Description = labels[api.KubernetesNamespace+"description"]
config.DisplayName = labels[api.KubernetesNamespace+"display-name"]
if builder, ok := labels[api.DefaultNamespace+"build.image"]; ok {
config.BuilderImage = builder
} else {
return fmt.Errorf("Required label %q not found in image", api.DefaultNamespace+"build.image")
}
if repo, ok := labels[api.DefaultNamespace+"build.source-location"]; ok {
config.Source = repo
} else {
return fmt.Errorf("Required label %q not found in image", api.DefaultNamespace+"source-location")
}
config.ContextDir = labels[api.DefaultNamespace+"build.source-context-dir"]
config.Ref = labels[api.DefaultNamespace+"build.commit.ref"]
return nil
}
开发者ID:php-coder,项目名称:origin,代码行数:43,代码来源:config.go
示例12: newCmdUsage
func newCmdUsage(cfg *api.Config) *cobra.Command {
oldScriptsFlag := ""
oldDestination := ""
usageCmd := &cobra.Command{
Use: "usage <image>",
Short: "Print usage of the assemble script associated with the image",
Long: "Create and start a container from the image and invoke its usage script.",
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.Help()
os.Exit(1)
}
cfg.Usage = true
cfg.BuilderImage = args[0]
if len(oldScriptsFlag) != 0 {
glog.Warning("DEPRECATED: Flag --scripts is deprecated, use --scripts-url instead")
cfg.ScriptsURL = oldScriptsFlag
}
if len(cfg.BuilderPullPolicy) == 0 {
cfg.BuilderPullPolicy = api.DefaultBuilderPullPolicy
}
if len(cfg.PreviousImagePullPolicy) == 0 {
cfg.PreviousImagePullPolicy = api.DefaultPreviousImagePullPolicy
}
uh, err := sti.NewUsage(cfg)
checkErr(err)
err = uh.Show()
checkErr(err)
},
}
usageCmd.Flags().StringVarP(&(oldDestination), "location", "l", "",
"Specify a destination location for untar operation")
cmdutil.AddCommonFlags(usageCmd, cfg)
return usageCmd
}
开发者ID:php-coder,项目名称:source-to-image,代码行数:40,代码来源:main.go
示例13: newCmdUsage
func newCmdUsage(cfg *api.Config) *cobra.Command {
oldScriptsFlag := ""
oldDestination := ""
usageCmd := &cobra.Command{
Use: "usage <image>",
Short: "Print usage of the assemble script associated with the image",
Long: "Create and start a container from the image and invoke its usage script.",
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.Help()
os.Exit(1)
}
cfg.BuilderImage = args[0]
envs, err := parseEnvs(cmd, "env")
checkErr(err)
cfg.Environment = envs
if len(oldScriptsFlag) != 0 {
glog.Warning("Flag --scripts is deprecated, use --scripts-url instead")
cfg.ScriptsURL = oldScriptsFlag
}
uh, err := sti.NewUsage(cfg)
checkErr(err)
err = uh.Show()
checkErr(err)
},
}
usageCmd.Flags().StringP("env", "e", "", "Specify an environment var NAME=VALUE,NAME2=VALUE2,...")
usageCmd.Flags().StringVarP(&(cfg.ScriptsURL), "scripts-url", "s", "", "Specify a URL for the assemble and run scripts")
usageCmd.Flags().StringVar(&(oldScriptsFlag), "scripts", "", "Specify a URL for the assemble and run scripts")
usageCmd.Flags().BoolVar(&(cfg.ForcePull), "force-pull", true, "Always pull the builder image even if it is present locally")
usageCmd.Flags().BoolVar(&(cfg.PreserveWorkingDir), "save-temp-dir", false, "Save the temporary directory used by STI instead of deleting it")
usageCmd.Flags().StringVarP(&(oldDestination), "location", "l", "", "Specify a destination location for untar operation")
usageCmd.Flags().StringVarP(&(cfg.Destination), "destination", "d", "", "Specify a destination location for untar operation")
return usageCmd
}
开发者ID:rimolive,项目名称:source-to-image,代码行数:39,代码来源:main.go
示例14: GenerateConfigFromLabels
// GenerateConfigFromLabels generates the S2I Config struct from the Docker
// image labels.
func GenerateConfigFromLabels(config *api.Config) error {
result, err := docker.GetBuilderImage(config)
if err != nil {
return err
}
labels := result.Image.Config.Labels
if builderVersion, ok := labels["io.openshift.builder-version"]; ok {
config.BuilderImageVersion = builderVersion
config.BuilderBaseImageVersion = labels["io.openshift.builder-base-version"]
}
config.ScriptsURL = labels[api.DefaultNamespace+"scripts-url"]
if len(config.ScriptsURL) == 0 {
// FIXME: Backward compatibility
config.ScriptsURL = labels["io.s2i.scripts-url"]
}
config.Description = labels[api.KubernetesNamespace+"description"]
config.DisplayName = labels[api.KubernetesNamespace+"display-name"]
if builder, ok := labels[api.DefaultNamespace+"build.image"]; ok {
config.BuilderImage = builder
} else {
return fmt.Errorf("Required label %q not found in image", api.DefaultNamespace+"build.image")
}
if repo, ok := labels[api.DefaultNamespace+"build.source-location"]; ok {
config.Source = repo
} else {
return fmt.Errorf("Required label %q not found in image", api.DefaultNamespace+"source-location")
}
config.ContextDir = labels[api.DefaultNamespace+"build.source-context-dir"]
config.Ref = labels[api.DefaultNamespace+"build.commit.ref"]
return nil
}
开发者ID:RomainVabre,项目名称:origin,代码行数:40,代码来源:config.go
示例15: Strategy
// Strategy creates the appropriate build strategy for the provided config, using
// the overrides provided. Not all strategies support all overrides.
func Strategy(config *api.Config, overrides build.Overrides) (build.Builder, error) {
image, err := docker.GetBuilderImage(config)
if err != nil {
return nil, err
}
config.HasOnBuild = image.OnBuild
// if we're blocking onbuild, just do a normal s2i build flow
// which won't do a docker build and invoke the onbuild commands
if image.OnBuild && !config.BlockOnBuild {
return onbuild.New(config, overrides)
}
return sti.New(config, overrides)
}
开发者ID:RomainVabre,项目名称:origin,代码行数:16,代码来源:strategies.go
示例16: Download
func (f *File) Download(config *api.Config) (*api.SourceInfo, error) {
targetSourceDir := filepath.Join(config.WorkingDir, api.Source)
sourceDir := strings.TrimPrefix(config.Source, "file://")
config.WorkingSourceDir = targetSourceDir
if len(config.ContextDir) > 0 {
targetSourceDir = filepath.Join(targetSourceDir, config.ContextDir, ".")
}
glog.V(1).Infof("Copying sources from %q to %q", sourceDir, targetSourceDir)
err := f.Copy(sourceDir, targetSourceDir)
if err != nil {
return nil, err
}
return &api.SourceInfo{
Location: sourceDir,
ContextDir: config.ContextDir,
}, nil
}
开发者ID:ncantor,项目名称:origin,代码行数:20,代码来源:download.go
示例17: Download
// Download copies sources from a local directory into the working directory
func (f *File) Download(config *api.Config) (*api.SourceInfo, error) {
config.WorkingSourceDir = filepath.Join(config.WorkingDir, api.Source)
source := strings.TrimPrefix(config.Source, "file://")
copySrc := source
if len(config.ContextDir) > 0 {
copySrc = filepath.Join(source, config.ContextDir)
}
glog.V(1).Infof("Copying sources from %q to %q", copySrc, config.WorkingSourceDir)
err := f.CopyContents(copySrc, config.WorkingSourceDir)
if err != nil {
return nil, err
}
return &api.SourceInfo{
Location: source,
ContextDir: config.ContextDir,
}, nil
}
开发者ID:php-coder,项目名称:origin,代码行数:21,代码来源:download.go
示例18: newCmdBuild
func newCmdBuild(cfg *api.Config) *cobra.Command {
useConfig := false
oldScriptsFlag := ""
oldDestination := ""
buildCmd := &cobra.Command{
Use: "build <source> <image> [<tag>]",
Short: "Build a new image",
Long: "Build a new Docker image named <tag> (if provided) from a source repository and base image.",
Run: func(cmd *cobra.Command, args []string) {
go func() {
for {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGQUIT)
buf := make([]byte, 1<<20)
for {
<-sigs
runtime.Stack(buf, true)
if file, err := ioutil.TempFile(os.TempDir(), "sti_dump"); err == nil {
defer file.Close()
file.Write(buf)
}
glog.Infof("=== received SIGQUIT ===\n*** goroutine dump...\n%s\n*** end\n", buf)
}
}
}()
// Attempt to restore the build command from the configuration file
if useConfig {
config.Restore(cfg, cmd)
}
// If user specifies the arguments, then we override the stored ones
if len(args) >= 2 {
cfg.Source = args[0]
cfg.BuilderImage = args[1]
if len(args) >= 3 {
cfg.Tag = args[2]
}
}
if len(validation.ValidateConfig(cfg)) != 0 {
cmd.Help()
os.Exit(1)
}
// Persists the current command line options and config into .stifile
if useConfig {
config.Save(cfg, cmd)
}
// Attempt to read the .dockercfg and extract the authentication for
// docker pull
if r, err := os.Open(cfg.DockerCfgPath); err == nil {
cfg.PullAuthentication = docker.GetImageRegistryAuth(r, cfg.BuilderImage)
}
cfg.Environment = map[string]string{}
if len(cfg.EnvironmentFile) > 0 {
result, err := util.ReadEnvironmentFile(cfg.EnvironmentFile)
if err != nil {
glog.Warningf("Unable to read %s: %v", cfg.EnvironmentFile, err)
} else {
cfg.Environment = result
}
}
envs, err := parseEnvs(cmd, "env")
checkErr(err)
for k, v := range envs {
cfg.Environment[k] = v
}
if len(oldScriptsFlag) != 0 {
glog.Warning("Flag --scripts is deprecated, use --scripts-url instead")
cfg.ScriptsURL = oldScriptsFlag
}
if len(oldDestination) != 0 {
glog.Warning("Flag --location is deprecated, use --destination instead")
cfg.Destination = oldDestination
}
if glog.V(2) {
fmt.Printf("\n%s\n", describe.DescribeConfig(cfg))
}
builder, err := strategies.GetStrategy(cfg)
checkErr(err)
result, err := builder.Build(cfg)
checkErr(err)
for _, message := range result.Messages {
glog.V(1).Infof(message)
}
},
}
buildCmd.Flags().BoolVarP(&(cfg.Quiet), "quiet", "q", false, "Operate quietly. Suppress all non-error output.")
buildCmd.Flags().BoolVar(&(cfg.Incremental), "incremental", false, "Perform an incremental build")
buildCmd.Flags().BoolVar(&(cfg.RemovePreviousImage), "rm", false, "Remove the previous image during incremental builds")
//.........这里部分代码省略.........
开发者ID:rimolive,项目名称:source-to-image,代码行数:101,代码来源:main.go
示例19: Execute
// Execute runs the specified STI script in the builder image.
func (builder *STI) Execute(command string, user string, config *api.Config) error {
glog.V(2).Infof("Using image name %s", config.BuilderImage)
// we can't invoke this method before (for example in New() method)
// because of later initialization of config.WorkingDir
builder.env = createBuildEnvironment(config)
errOutput := ""
outReader, outWriter := io.Pipe()
errReader, errWriter := io.Pipe()
externalScripts := builder.externalScripts[command]
// if LayeredBuild is called then all the scripts will be placed inside the image
if config.LayeredBuild {
externalScripts = false
}
opts := dockerpkg.RunContainerOptions{
Image: config.BuilderImage,
Stdout: outWriter,
Stderr: errWriter,
// The PullImage is false because the PullImage function should be called
// before we run the container
PullImage: false,
ExternalScripts: externalScripts,
ScriptsURL: config.ScriptsURL,
Destination: config.Destination,
Command: command,
Env: builder.env,
User: user,
PostExec: builder.postExecutor,
NetworkMode: string(config.DockerNetworkMode),
CGroupLimits: config.CGroupLimits,
CapDrop: config.DropCapabilities,
Binds: config.BuildVolumes.AsBinds(),
}
// If there are injections specified, override the original assemble script
// and wait till all injections are uploaded into the container that runs the
// assemble script.
injectionError := make(chan error)
if len(config.Injections) > 0 && command == api.Assemble {
workdir, err := builder.docker.GetImageWorkdir(config.BuilderImage)
if err != nil {
builder.result.BuildInfo.FailureReason = utilstatus.NewFailureReason(
utilstatus.ReasonGenericS2IBuildFailed,
utilstatus.ReasonMessageGenericS2iBuildFailed,
)
return err
}
config.Injections = util.FixInjectionsWithRelativePath(workdir, config.Injections)
injectedFiles, err := util.ExpandInjectedFiles(builder.fs, config.Injections)
if err != nil {
builder.result.BuildInfo.FailureReason = utilstatus.NewFailureReason(
utilstatus.ReasonInstallScriptsFailed,
utilstatus.ReasonMessageInstallScriptsFailed,
)
return err
}
rmScript, err := util.CreateInjectedFilesRemovalScript(injectedFiles, "/tmp/rm-injections")
if err != nil {
builder.result.BuildInfo.FailureReason = utilstatus.NewFailureReason(
utilstatus.ReasonGenericS2IBuildFailed,
utilstatus.ReasonMessageGenericS2iBuildFailed,
)
return err
}
defer os.Remove(rmScript)
opts.CommandOverrides = func(cmd string) string {
return fmt.Sprintf("while [ ! -f %q ]; do sleep 0.5; done; %s; result=$?; source %[1]s; exit $result",
"/tmp/rm-injections", cmd)
}
originalOnStart := opts.OnStart
opts.OnStart = func(containerID string) error {
defer close(injectionError)
glog.V(2).Info("starting the injections uploading ...")
for _, s := range config.Injections {
if err := builder.docker.UploadToContainer(builder.fs, s.Source, s.Destination, containerID); err != nil {
injectionError <- util.HandleInjectionError(s, err)
return err
}
}
if err := builder.docker.UploadToContainer(builder.fs, rmScript, "/tmp/rm-injections", containerID); err != nil {
injectionError <- util.HandleInjectionError(api.VolumeSpec{Source: rmScript, Destination: "/tmp/rm-injections"}, err)
return err
}
if originalOnStart != nil {
return originalOnStart(containerID)
}
return nil
}
} else {
close(injectionError)
}
if !config.LayeredBuild {
r, w := io.Pipe()
opts.Stdin = r
go func() {
//.........这里部分代码省略.........
开发者ID:php-coder,项目名称:origin,代码行数:101,代码来源:sti.go
示例20: newCmdBuild
func newCmdBuild(cfg *api.Config) *cobra.Command {
useConfig := false
oldScriptsFlag := ""
oldDestination := ""
buildCmd := &cobra.Command{
Use: "build <source> <image> [<tag>]",
Short: "Build a new image",
Long: "Build a new Docker image named <tag> (if provided) from a source repository and base image.",
Example: `
# Build an application Docker image from a Git repository
$ s2i build git://github.com/openshift/ruby-hello-world centos/ruby-22-centos7 hello-world-app
# Build from a local directory
$ s2i build . centos/ruby-22-centos7 hello-world-app
`,
Run: func(cmd *cobra.Command, args []string) {
glog.V(1).Infof("Running S2I version %q\n", version.Get())
// Attempt to restore the build command from the configuration file
if useConfig {
config.Restore(cfg, cmd)
}
// If user specifies the arguments, then we override the stored ones
if len(args) >= 2 {
cfg.Source = args[0]
cfg.BuilderImage = args[1]
if len(args) >= 3 {
cfg.Tag = args[2]
}
}
if cfg.Incremental && len(cfg.RuntimeImage) > 0 {
fmt.Fprintln(os.Stderr, "ERROR: Incremental build with runtime image isn't supported")
os.Exit(1)
}
if cfg.ForcePull {
glog.Warning("DEPRECATED: The '--force-pull' option is deprecated. Use '--pull-policy' instead")
}
if len(cfg.BuilderPullPolicy) == 0 {
cfg.BuilderPullPolicy = api.DefaultBuilderPullPolicy
}
if len(cfg.PreviousImagePullPolicy) == 0 {
cfg.PreviousImagePullPolicy = api.DefaultPreviousImagePullPolicy
}
if errs := validation.ValidateConfig(cfg); len(errs) > 0 {
for _, e := range errs {
fmt.Fprintf(os.Stderr, "ERROR: %s\n", e)
}
fmt.Println()
cmd.Help()
os.Exit(1)
}
// Persists the current command line options and config into .s2ifile
if useConfig {
config.Save(cfg, cmd)
}
// Attempt to read the .dockercfg and extract the authentication for
// docker pull
if r, err := os.Open(cfg.DockerCfgPath); err == nil {
defer r.Close()
auths := docker.LoadImageRegistryAuth(r)
cfg.PullAuthentication = docker.GetImageRegistryAuth(auths, cfg.BuilderImage)
if cfg.Incremental {
cfg.IncrementalAuthentication = docker.GetImageRegistryAuth(auths, cfg.Tag)
}
if len(cfg.RuntimeImage) > 0 {
cfg.RuntimeAuthentication = docker.GetImageRegistryAuth(auths, cfg.RuntimeImage)
}
}
if len(cfg.EnvironmentFile) > 0 {
result, err := util.ReadEnvironmentFile(cfg.EnvironmentFile)
if err != nil {
glog.Warningf("Unable to read environment file %q: %v", cfg.EnvironmentFile, err)
} else {
for name, value := range result {
cfg.Environment = append(cfg.Environment, api.EnvironmentSpec{Name: name, Value: value})
}
}
}
if len(oldScriptsFlag) != 0 {
glog.Warning("DEPRECATED: Flag --scripts is deprecated, use --scripts-url instead")
cfg.ScriptsURL = oldScriptsFlag
}
if len(oldDestination) != 0 {
glog.Warning("DEPRECATED: Flag --location is deprecated, use --destination instead")
cfg.Destination = oldDestination
}
glog.V(2).Infof("\n%s\n", describe.Config(cfg))
err := docker.CheckReachable(cfg)
if err != nil {
//.........这里部分代码省略.........
开发者ID:php-coder,项目名称:source-to-image,代码行数:101,代码来源:main.go
注:本文中的github.com/openshift/source-to-image/pkg/api.Config类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论