Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenShift - generate DeploymentConfig with ImageStream #160

Merged
merged 2 commits into from
Sep 28, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions Godeps/Godeps.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion cli/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,9 @@ import (
client "k8s.io/kubernetes/pkg/client/unversioned"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"

// install OpenShift apis
// install OpenShift api
_ "github.com/openshift/origin/pkg/deploy/api/install"
_ "github.com/openshift/origin/pkg/image/api/install"

"github.com/skippbox/kompose/pkg/kobject"
"github.com/skippbox/kompose/pkg/loader"
Expand Down
3 changes: 3 additions & 0 deletions pkg/transformer/kubernetes/k8sutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ import (
"k8s.io/kubernetes/pkg/runtime"

deployapi "github.com/openshift/origin/pkg/deploy/api"
imageapi "github.com/openshift/origin/pkg/image/api"
)

/**
Expand Down Expand Up @@ -177,6 +178,8 @@ func PrintList(objects []runtime.Object, opt kobject.ConvertOptions) error {
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
case *deployapi.DeploymentConfig:
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
case *imageapi.ImageStream:
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
case *api.Service:
file = transformer.Print(t.Name, strings.ToLower(t.Kind), data, opt.ToStdout, opt.GenerateYaml, f)
}
Expand Down
68 changes: 66 additions & 2 deletions pkg/transformer/openshift/openshift.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,62 @@ package openshift

import (
deployapi "github.com/openshift/origin/pkg/deploy/api"
imageapi "github.com/openshift/origin/pkg/image/api"

"github.com/skippbox/kompose/pkg/kobject"
"github.com/skippbox/kompose/pkg/transformer/kubernetes"

"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/runtime"

"strings"
)

type OpenShift struct {
}

// getImageTag get tag name from image name
// if no tag is specified return 'latest'
func getImageTag(image string) string {
p := strings.Split(image, ":")
if len(p) == 2 {
return p[1]
} else {
return "latest"
}
}

// initImageStream initialize ImageStream object
func initImageStream(name string, service kobject.ServiceConfig) *imageapi.ImageStream {
tag := getImageTag(service.Image)

is := &imageapi.ImageStream{
TypeMeta: unversioned.TypeMeta{
Kind: "ImageStream",
APIVersion: "v1",
},
ObjectMeta: api.ObjectMeta{
Name: name,
},
Spec: imageapi.ImageStreamSpec{
Tags: map[string]imageapi.TagReference{
tag: imageapi.TagReference{
From: &api.ObjectReference{
Kind: "DockerImage",
Name: service.Image,
},
},
},
},
}
return is
}

// initDeploymentConfig initialize OpenShifts DeploymentConfig object
func initDeploymentConfig(name string, service kobject.ServiceConfig, replicas int) *deployapi.DeploymentConfig {
tag := getImageTag(service.Image)

dc := &deployapi.DeploymentConfig{
TypeMeta: unversioned.TypeMeta{
Kind: "DeploymentConfig",
Expand All @@ -51,8 +94,27 @@ func initDeploymentConfig(name string, service kobject.ServiceConfig, replicas i
Spec: api.PodSpec{
Containers: []api.Container{
{
Name: name,
Image: service.Image,
Name: name,
// Image will be set to ImageStream image by ImageChange trigger.
Image: " ",
},
},
},
},
Triggers: []deployapi.DeploymentTriggerPolicy{
// Trigger new deploy when DeploymentConfig is created (config change)
deployapi.DeploymentTriggerPolicy{
Type: deployapi.DeploymentTriggerOnConfigChange,
},
deployapi.DeploymentTriggerPolicy{
Type: deployapi.DeploymentTriggerOnImageChange,
ImageChangeParams: &deployapi.DeploymentTriggerImageChangeParams{
//Automatic - if new tag is detected - update image update inside the pod template
Automatic: true,
ContainerNames: []string{name},
From: api.ObjectReference{
Name: name + ":" + tag,
Kind: "ImageStreamTag",
},
},
},
Expand All @@ -73,6 +135,8 @@ func (k *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C

if opt.CreateDeploymentConfig {
objects = append(objects, initDeploymentConfig(name, service, opt.Replicas)) // OpenShift DeploymentConfigs
// create ImageStream after deployment (creating IS will trigger new deployment)
objects = append(objects, initImageStream(name, service))
}

// If ports not provided in configuration we will not make service
Expand Down
46 changes: 44 additions & 2 deletions script/test/fixtures/entrypoint-command/output-os.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,24 @@
"strategy": {
"resources": {}
},
"triggers": null,
"triggers": [
{
"type": "ConfigChange"
},
{
"type": "ImageChange",
"imageChangeParams": {
"automatic": true,
"containerNames": [
"base"
],
"from": {
"kind": "ImageStreamTag",
"name": "base:latest"
}
}
}
],
"replicas": 1,
"test": false,
"selector": {
Expand All @@ -34,7 +51,7 @@
"containers": [
{
"name": "base",
"image": "busybox",
"image": " ",
"command": [
"echo"
],
Expand All @@ -49,6 +66,31 @@
}
},
"status": {}
},
{
"kind": "ImageStream",
"apiVersion": "v1",
"metadata": {
"name": "base",
"creationTimestamp": null
},
"spec": {
"tags": [
{
"name": "latest",
"annotations": null,
"from": {
"kind": "DockerImage",
"name": "busybox"
},
"generation": null,
"importPolicy": {}
}
]
},
"status": {
"dockerImageRepository": ""
}
}
]
}
Loading