From 3919ad25b5f8cc686612741a2678988e62156c55 Mon Sep 17 00:00:00 2001 From: qujinping Date: Fri, 7 Apr 2017 10:01:46 +0800 Subject: [PATCH] Support insecure registry and enhance parsing of image stream tag --- cmd/convert.go | 5 +++++ cmd/up.go | 17 +++++++++------- pkg/kobject/kobject.go | 1 + pkg/transformer/openshift/openshift.go | 27 +++++++++++++++++++++++--- 4 files changed, 40 insertions(+), 10 deletions(-) diff --git a/cmd/convert.go b/cmd/convert.go index b4550a81..1da94657 100644 --- a/cmd/convert.go +++ b/cmd/convert.go @@ -38,6 +38,7 @@ var ( ConvertJSON bool ConvertStdout bool ConvertEmptyVols bool + ConvertInsecureRepo bool ConvertDeploymentConfig bool ConvertReplicas int ConvertOpt kobject.ConvertOptions @@ -68,6 +69,7 @@ var convertCmd = &cobra.Command{ BuildBranch: ConvertBuildBranch, CreateDeploymentConfig: ConvertDeploymentConfig, EmptyVols: ConvertEmptyVols, + InsecureRepository: ConvertInsecureRepo, IsDeploymentFlag: cmd.Flags().Lookup("deployment").Changed, IsDaemonSetFlag: cmd.Flags().Lookup("daemon-set").Changed, IsReplicationControllerFlag: cmd.Flags().Lookup("replication-controller").Changed, @@ -101,9 +103,11 @@ func init() { // OpenShift only convertCmd.Flags().BoolVar(&ConvertDeploymentConfig, "deployment-config", true, "Generate an OpenShift deploymentconfig object") + convertCmd.Flags().BoolVar(&ConvertInsecureRepo, "insecure-repository", false, "Use an insecure Docker repository for OpenShift ImageStream") convertCmd.Flags().StringVar(&ConvertBuildRepo, "build-repo", "", "Specify source repository for buildconfig (default remote origin)") convertCmd.Flags().StringVar(&ConvertBuildBranch, "build-branch", "", "Specify repository branch to use for buildconfig (default master)") convertCmd.Flags().MarkHidden("deployment-config") + convertCmd.Flags().MarkHidden("insecure-repository") convertCmd.Flags().MarkHidden("build-repo") convertCmd.Flags().MarkHidden("build-branch") @@ -138,6 +142,7 @@ Resource Flags: --daemon-set Generate a Kubernetes daemonset object -d, --deployment Generate a Kubernetes deployment object --deployment-config Generate an OpenShift deployment config object + --insecure-repository Specify to use insecure docker repository while generating Openshift image stream object --replication-controller Generate a Kubernetes replication controller object Flags: diff --git a/cmd/up.go b/cmd/up.go index 47c5b9f3..41e81130 100644 --- a/cmd/up.go +++ b/cmd/up.go @@ -26,9 +26,10 @@ import ( // TODO: comment var ( - UpReplicas int - UpEmptyVols bool - UpOpt kobject.ConvertOptions + UpReplicas int + UpEmptyVols bool + UpInsecureRepo bool + UpOpt kobject.ConvertOptions ) var upCmd = &cobra.Command{ @@ -39,10 +40,11 @@ var upCmd = &cobra.Command{ // Create the Convert options. UpOpt = kobject.ConvertOptions{ - Replicas: UpReplicas, - InputFiles: GlobalFiles, - Provider: strings.ToLower(GlobalProvider), - EmptyVols: UpEmptyVols, + Replicas: UpReplicas, + InputFiles: GlobalFiles, + Provider: strings.ToLower(GlobalProvider), + EmptyVols: UpEmptyVols, + InsecureRepository: UpInsecureRepo, } // Validate before doing anything else. @@ -56,5 +58,6 @@ var upCmd = &cobra.Command{ func init() { upCmd.Flags().BoolVar(&UpEmptyVols, "emptyvols", false, "Use empty volumes. Do not generate PersistentVolumeClaim") upCmd.Flags().IntVar(&UpReplicas, "replicas", 1, "Specify the number of replicas generated") + upCmd.Flags().BoolVar(&UpInsecureRepo, "insecure-repository", false, "Use an insecure Docker repository for OpenShift ImageStream") RootCmd.AddCommand(upCmd) } diff --git a/pkg/kobject/kobject.go b/pkg/kobject/kobject.go index 0f80da8d..afddf3cd 100644 --- a/pkg/kobject/kobject.go +++ b/pkg/kobject/kobject.go @@ -43,6 +43,7 @@ type ConvertOptions struct { GenerateYaml bool GenerateJSON bool EmptyVols bool + InsecureRepository bool Replicas int InputFiles []string OutFile string diff --git a/pkg/transformer/openshift/openshift.go b/pkg/transformer/openshift/openshift.go index 6a41d566..5d14606c 100644 --- a/pkg/transformer/openshift/openshift.go +++ b/pkg/transformer/openshift/openshift.go @@ -75,7 +75,22 @@ var unsupportedKey = map[string]bool{} // getImageTag get tag name from image name // if no tag is specified return 'latest' func getImageTag(image string) string { - p := strings.Split(image, ":") + // format: registry_host:registry_port/repo_name/image_name:image_tag + // example: + // 1) myregistryhost:5000/fedora/httpd:version1.0 + // 2) myregistryhost:5000/fedora/httpd + // 3) myregistryhost/fedora/httpd:version1.0 + // 4) myregistryhost/fedora/httpd + // 5) fedora/httpd + // 6) httpd + imageAndTag := image + + i := strings.Split(image, "/") + if len(i) >= 2 { + imageAndTag = i[len(i)-1] + } + + p := strings.Split(imageAndTag, ":") if len(p) == 2 { return p[1] } @@ -144,9 +159,14 @@ func getAbsBuildContext(context string, composeFileDir string) (string, error) { } // initImageStream initialize ImageStream object -func (o *OpenShift) initImageStream(name string, service kobject.ServiceConfig) *imageapi.ImageStream { +func (o *OpenShift) initImageStream(name string, service kobject.ServiceConfig, opt kobject.ConvertOptions) *imageapi.ImageStream { tag := getImageTag(service.Image) + var importPolicy imageapi.TagImportPolicy + if opt.InsecureRepository { + importPolicy = imageapi.TagImportPolicy{Insecure: true} + } + var tags map[string]imageapi.TagReference if service.Build == "" { tags = map[string]imageapi.TagReference{ @@ -155,6 +175,7 @@ func (o *OpenShift) initImageStream(name string, service kobject.ServiceConfig) Kind: "DockerImage", Name: service.Image, }, + ImportPolicy: importPolicy, }, } } @@ -333,7 +354,7 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C if opt.CreateDeploymentConfig { objects = append(objects, o.initDeploymentConfig(name, service, opt.Replicas)) // OpenShift DeploymentConfigs // create ImageStream after deployment (creating IS will trigger new deployment) - objects = append(objects, o.initImageStream(name, service)) + objects = append(objects, o.initImageStream(name, service, opt)) } // buildconfig needs to be added to objects after imagestream because of this Openshift bug: https://github.com/openshift/origin/issues/4518