forked from LaconicNetwork/kompose
Refactor how we update controllers
This commit is contained in:
parent
eb8e5be7b4
commit
e55044b9e9
132
cli/app/app.go
132
cli/app/app.go
@ -36,6 +36,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/apis/extensions"
|
"k8s.io/kubernetes/pkg/apis/extensions"
|
||||||
client "k8s.io/kubernetes/pkg/client/unversioned"
|
client "k8s.io/kubernetes/pkg/client/unversioned"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
"k8s.io/kubernetes/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/util/intstr"
|
"k8s.io/kubernetes/pkg/util/intstr"
|
||||||
|
|
||||||
"github.com/fatih/structs"
|
"github.com/fatih/structs"
|
||||||
@ -589,7 +590,7 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
if createRS {
|
if createRS {
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
if (replicas != 0) {
|
if replicas != 0 {
|
||||||
count++
|
count++
|
||||||
}
|
}
|
||||||
if count > 1 {
|
if count > 1 {
|
||||||
@ -637,62 +638,20 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
logrus.Fatalf(err)
|
logrus.Fatalf(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
rc.Spec.Template.Spec.Containers[0].Env = envs
|
|
||||||
dc.Spec.Template.Spec.Containers[0].Env = envs
|
|
||||||
ds.Spec.Template.Spec.Containers[0].Env = envs
|
|
||||||
rs.Spec.Template.Spec.Containers[0].Env = envs
|
|
||||||
|
|
||||||
// Configure the container command.
|
// Configure the container command.
|
||||||
var cmds []string
|
var cmds []string
|
||||||
for _, cmd := range service.Command.Slice() {
|
for _, cmd := range service.Command.Slice() {
|
||||||
cmds = append(cmds, cmd)
|
cmds = append(cmds, cmd)
|
||||||
}
|
}
|
||||||
rc.Spec.Template.Spec.Containers[0].Command = cmds
|
|
||||||
dc.Spec.Template.Spec.Containers[0].Command = cmds
|
|
||||||
ds.Spec.Template.Spec.Containers[0].Command = cmds
|
|
||||||
rs.Spec.Template.Spec.Containers[0].Command = cmds
|
|
||||||
|
|
||||||
// Configure the container working dir.
|
|
||||||
rc.Spec.Template.Spec.Containers[0].WorkingDir = service.WorkingDir
|
|
||||||
dc.Spec.Template.Spec.Containers[0].WorkingDir = service.WorkingDir
|
|
||||||
ds.Spec.Template.Spec.Containers[0].WorkingDir = service.WorkingDir
|
|
||||||
rs.Spec.Template.Spec.Containers[0].WorkingDir = service.WorkingDir
|
|
||||||
|
|
||||||
// Configure the container volumes.
|
// Configure the container volumes.
|
||||||
volumesMount, volumes := configVolumes(service)
|
volumesMount, volumes := configVolumes(service)
|
||||||
|
|
||||||
rc.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
|
||||||
dc.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
|
||||||
ds.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
|
||||||
rs.Spec.Template.Spec.Containers[0].VolumeMounts = volumesMount
|
|
||||||
|
|
||||||
rc.Spec.Template.Spec.Volumes = volumes
|
|
||||||
dc.Spec.Template.Spec.Volumes = volumes
|
|
||||||
ds.Spec.Template.Spec.Volumes = volumes
|
|
||||||
rs.Spec.Template.Spec.Volumes = volumes
|
|
||||||
|
|
||||||
// Configure the container privileged mode
|
|
||||||
if service.Privileged == true {
|
|
||||||
securitycontexts := &api.SecurityContext{
|
|
||||||
Privileged: &service.Privileged,
|
|
||||||
}
|
|
||||||
rc.Spec.Template.Spec.Containers[0].SecurityContext = securitycontexts
|
|
||||||
dc.Spec.Template.Spec.Containers[0].SecurityContext = securitycontexts
|
|
||||||
ds.Spec.Template.Spec.Containers[0].SecurityContext = securitycontexts
|
|
||||||
rs.Spec.Template.Spec.Containers[0].SecurityContext = securitycontexts
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure the container ports.
|
// Configure the container ports.
|
||||||
ports, err := configPorts(name, service)
|
ports, err := configPorts(name, service)
|
||||||
if err != "" {
|
if err != "" {
|
||||||
logrus.Fatalf(err)
|
logrus.Fatalf(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
rc.Spec.Template.Spec.Containers[0].Ports = ports
|
|
||||||
dc.Spec.Template.Spec.Containers[0].Ports = ports
|
|
||||||
ds.Spec.Template.Spec.Containers[0].Ports = ports
|
|
||||||
rs.Spec.Template.Spec.Containers[0].Ports = ports
|
|
||||||
|
|
||||||
// Configure the service ports.
|
// Configure the service ports.
|
||||||
servicePorts, err := configServicePorts(name, service)
|
servicePorts, err := configServicePorts(name, service)
|
||||||
if err != "" {
|
if err != "" {
|
||||||
@ -706,38 +665,48 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
for key, value := range service.Labels.MapParts() {
|
for key, value := range service.Labels.MapParts() {
|
||||||
labels[key] = value
|
labels[key] = value
|
||||||
}
|
}
|
||||||
rc.Spec.Template.ObjectMeta.Labels = labels
|
|
||||||
dc.Spec.Template.ObjectMeta.Labels = labels
|
|
||||||
ds.Spec.Template.ObjectMeta.Labels = labels
|
|
||||||
rs.Spec.Template.ObjectMeta.Labels = labels
|
|
||||||
|
|
||||||
rc.ObjectMeta.Labels = labels
|
|
||||||
dc.ObjectMeta.Labels = labels
|
|
||||||
ds.ObjectMeta.Labels = labels
|
|
||||||
rs.ObjectMeta.Labels = labels
|
|
||||||
sc.ObjectMeta.Labels = labels
|
sc.ObjectMeta.Labels = labels
|
||||||
|
|
||||||
// Configure the container restart policy.
|
// fillTemplate fills the pod template with the value calculated from config
|
||||||
switch service.Restart {
|
fillTemplate := func(template *api.PodTemplateSpec) {
|
||||||
case "", "always":
|
template.Spec.Containers[0].Env = envs
|
||||||
rc.Spec.Template.Spec.RestartPolicy = api.RestartPolicyAlways
|
template.Spec.Containers[0].Command = cmds
|
||||||
dc.Spec.Template.Spec.RestartPolicy = api.RestartPolicyAlways
|
template.Spec.Containers[0].WorkingDir = service.WorkingDir
|
||||||
ds.Spec.Template.Spec.RestartPolicy = api.RestartPolicyAlways
|
template.Spec.Containers[0].VolumeMounts = volumesMount
|
||||||
rs.Spec.Template.Spec.RestartPolicy = api.RestartPolicyAlways
|
template.Spec.Volumes = volumes
|
||||||
case "no":
|
// Configure the container privileged mode
|
||||||
rc.Spec.Template.Spec.RestartPolicy = api.RestartPolicyNever
|
if service.Privileged == true {
|
||||||
dc.Spec.Template.Spec.RestartPolicy = api.RestartPolicyNever
|
template.Spec.Containers[0].SecurityContext = &api.SecurityContext{
|
||||||
ds.Spec.Template.Spec.RestartPolicy = api.RestartPolicyNever
|
Privileged: &service.Privileged,
|
||||||
rs.Spec.Template.Spec.RestartPolicy = api.RestartPolicyNever
|
}
|
||||||
case "on-failure":
|
}
|
||||||
rc.Spec.Template.Spec.RestartPolicy = api.RestartPolicyOnFailure
|
template.Spec.Containers[0].Ports = ports
|
||||||
dc.Spec.Template.Spec.RestartPolicy = api.RestartPolicyOnFailure
|
template.ObjectMeta.Labels = labels
|
||||||
ds.Spec.Template.Spec.RestartPolicy = api.RestartPolicyOnFailure
|
// Configure the container restart policy.
|
||||||
rs.Spec.Template.Spec.RestartPolicy = api.RestartPolicyOnFailure
|
switch service.Restart {
|
||||||
default:
|
case "", "always":
|
||||||
logrus.Fatalf("Unknown restart policy %s for service %s", service.Restart, name)
|
template.Spec.RestartPolicy = api.RestartPolicyAlways
|
||||||
|
case "no":
|
||||||
|
template.Spec.RestartPolicy = api.RestartPolicyNever
|
||||||
|
case "on-failure":
|
||||||
|
template.Spec.RestartPolicy = api.RestartPolicyOnFailure
|
||||||
|
default:
|
||||||
|
logrus.Fatalf("Unknown restart policy %s for service %s", service.Restart, name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fillObjectMeta fills the metadata with the value calculated from config
|
||||||
|
fillObjectMeta := func(meta *api.ObjectMeta) {
|
||||||
|
meta.Labels = labels
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update each supported controllers
|
||||||
|
updateController(rc, fillTemplate, fillObjectMeta)
|
||||||
|
updateController(rs, fillTemplate, fillObjectMeta)
|
||||||
|
updateController(dc, fillTemplate, fillObjectMeta)
|
||||||
|
updateController(ds, fillTemplate, fillObjectMeta)
|
||||||
|
|
||||||
// convert datarc to json / yaml
|
// convert datarc to json / yaml
|
||||||
datarc, err := transformer(rc, "replication controller", generateYaml)
|
datarc, err := transformer(rc, "replication controller", generateYaml)
|
||||||
if err != "" {
|
if err != "" {
|
||||||
@ -820,7 +789,7 @@ func ProjectKuberConvert(p *project.Project, c *cli.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (replicas != 0) {
|
if replicas != 0 {
|
||||||
for k, v := range mReplicationControllers {
|
for k, v := range mReplicationControllers {
|
||||||
print(k, "rc", v, toStdout, generateYaml, f)
|
print(k, "rc", v, toStdout, generateYaml, f)
|
||||||
}
|
}
|
||||||
@ -952,3 +921,24 @@ func ProjectKuberUp(p *project.Project, c *cli.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateController updates the given object with the given pod template update function and ObjectMeta update function
|
||||||
|
func updateController(obj runtime.Object, updateTemplate func(*api.PodTemplateSpec), updateMeta func(meta *api.ObjectMeta)) {
|
||||||
|
switch t := obj.(type) {
|
||||||
|
case *api.ReplicationController:
|
||||||
|
if t.Spec.Template == nil {
|
||||||
|
t.Spec.Template = &api.PodTemplateSpec{}
|
||||||
|
}
|
||||||
|
updateTemplate(t.Spec.Template)
|
||||||
|
updateMeta(&t.ObjectMeta)
|
||||||
|
case *extensions.Deployment:
|
||||||
|
updateTemplate(&t.Spec.Template)
|
||||||
|
updateMeta(&t.ObjectMeta)
|
||||||
|
case *extensions.ReplicaSet:
|
||||||
|
updateTemplate(&t.Spec.Template)
|
||||||
|
updateMeta(&t.ObjectMeta)
|
||||||
|
case *extensions.DaemonSet:
|
||||||
|
updateTemplate(&t.Spec.Template)
|
||||||
|
updateMeta(&t.ObjectMeta)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user