forked from LaconicNetwork/kompose
Merge pull request #664 from surajnarwade/add-replicas-v3
Added support for `replicas` keys in v3
This commit is contained in:
commit
06543f7535
@ -82,6 +82,7 @@ var convertCmd = &cobra.Command{
|
|||||||
IsDeploymentFlag: cmd.Flags().Lookup("deployment").Changed,
|
IsDeploymentFlag: cmd.Flags().Lookup("deployment").Changed,
|
||||||
IsDaemonSetFlag: cmd.Flags().Lookup("daemon-set").Changed,
|
IsDaemonSetFlag: cmd.Flags().Lookup("daemon-set").Changed,
|
||||||
IsReplicationControllerFlag: cmd.Flags().Lookup("replication-controller").Changed,
|
IsReplicationControllerFlag: cmd.Flags().Lookup("replication-controller").Changed,
|
||||||
|
IsReplicaSetFlag: cmd.Flags().Lookup("replicas").Changed,
|
||||||
IsDeploymentConfigFlag: cmd.Flags().Lookup("deployment-config").Changed,
|
IsDeploymentConfigFlag: cmd.Flags().Lookup("deployment-config").Changed,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -53,6 +53,7 @@ type ConvertOptions struct {
|
|||||||
IsDeploymentFlag bool
|
IsDeploymentFlag bool
|
||||||
IsDaemonSetFlag bool
|
IsDaemonSetFlag bool
|
||||||
IsReplicationControllerFlag bool
|
IsReplicationControllerFlag bool
|
||||||
|
IsReplicaSetFlag bool
|
||||||
IsDeploymentConfigFlag bool
|
IsDeploymentConfigFlag bool
|
||||||
IsNamespaceFlag bool
|
IsNamespaceFlag bool
|
||||||
}
|
}
|
||||||
@ -92,6 +93,7 @@ type ServiceConfig struct {
|
|||||||
MemLimit yaml.MemStringorInt `compose:"mem_limit" bundle:""`
|
MemLimit yaml.MemStringorInt `compose:"mem_limit" bundle:""`
|
||||||
TmpFs []string `compose:"tmpfs" bundle:""`
|
TmpFs []string `compose:"tmpfs" bundle:""`
|
||||||
Dockerfile string `compose:"dockerfile" bundle:""`
|
Dockerfile string `compose:"dockerfile" bundle:""`
|
||||||
|
Replicas int `compose:"replicas" bundle:""`
|
||||||
}
|
}
|
||||||
|
|
||||||
// EnvVar holds the environment variable struct of a container
|
// EnvVar holds the environment variable struct of a container
|
||||||
|
|||||||
@ -192,6 +192,11 @@ func dockerComposeToKomposeMapping(composeObject *types.Config) (kobject.Kompose
|
|||||||
serviceConfig.Command = composeServiceConfig.Entrypoint
|
serviceConfig.Command = composeServiceConfig.Entrypoint
|
||||||
serviceConfig.Args = composeServiceConfig.Command
|
serviceConfig.Args = composeServiceConfig.Command
|
||||||
|
|
||||||
|
//Handling replicas
|
||||||
|
if composeServiceConfig.Deploy.Replicas != nil {
|
||||||
|
serviceConfig.Replicas = int(*composeServiceConfig.Deploy.Replicas)
|
||||||
|
}
|
||||||
|
|
||||||
// This is a bit messy since we use yaml.MemStringorInt
|
// This is a bit messy since we use yaml.MemStringorInt
|
||||||
// TODO: Refactor yaml.MemStringorInt in kobject.go to int64
|
// TODO: Refactor yaml.MemStringorInt in kobject.go to int64
|
||||||
// Since Deploy.Resources.Limits does not initialize, we must check type Resources before continuing
|
// Since Deploy.Resources.Limits does not initialize, we must check type Resources before continuing
|
||||||
|
|||||||
@ -489,15 +489,21 @@ func (k *Kubernetes) ConfigEnvs(name string, service kobject.ServiceConfig) []ap
|
|||||||
// CreateKubernetesObjects generates a Kubernetes artifact for each input type service
|
// CreateKubernetesObjects generates a Kubernetes artifact for each input type service
|
||||||
func (k *Kubernetes) CreateKubernetesObjects(name string, service kobject.ServiceConfig, opt kobject.ConvertOptions) []runtime.Object {
|
func (k *Kubernetes) CreateKubernetesObjects(name string, service kobject.ServiceConfig, opt kobject.ConvertOptions) []runtime.Object {
|
||||||
var objects []runtime.Object
|
var objects []runtime.Object
|
||||||
|
var replica int
|
||||||
|
if opt.IsReplicaSetFlag || service.Replicas == 0 {
|
||||||
|
replica = opt.Replicas
|
||||||
|
} else {
|
||||||
|
replica = service.Replicas
|
||||||
|
}
|
||||||
|
|
||||||
if opt.CreateD {
|
if opt.CreateD {
|
||||||
objects = append(objects, k.InitD(name, service, opt.Replicas))
|
objects = append(objects, k.InitD(name, service, replica))
|
||||||
}
|
}
|
||||||
if opt.CreateDS {
|
if opt.CreateDS {
|
||||||
objects = append(objects, k.InitDS(name, service))
|
objects = append(objects, k.InitDS(name, service))
|
||||||
}
|
}
|
||||||
if opt.CreateRC {
|
if opt.CreateRC {
|
||||||
objects = append(objects, k.InitRC(name, service, opt.Replicas))
|
objects = append(objects, k.InitRC(name, service, replica))
|
||||||
}
|
}
|
||||||
|
|
||||||
return objects
|
return objects
|
||||||
|
|||||||
@ -53,6 +53,7 @@ func newServiceConfig() kobject.ServiceConfig {
|
|||||||
Stdin: true,
|
Stdin: true,
|
||||||
Tty: true,
|
Tty: true,
|
||||||
TmpFs: []string{"/tmp"},
|
TmpFs: []string{"/tmp"},
|
||||||
|
Replicas: 2,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,11 +271,14 @@ func TestKomposeConvert(t *testing.T) {
|
|||||||
expectedNumObjs int
|
expectedNumObjs int
|
||||||
}{
|
}{
|
||||||
// objects generated are deployment, service and pvc
|
// objects generated are deployment, service and pvc
|
||||||
"Convert to Deployments (D)": {newKomposeObject(), kobject.ConvertOptions{CreateD: true, Replicas: replicas}, 3},
|
"Convert to Deployments (D)": {newKomposeObject(), kobject.ConvertOptions{CreateD: true, Replicas: replicas, IsReplicaSetFlag: true}, 3},
|
||||||
|
"Convert to Deployments (D) with v3 replicas": {newKomposeObject(), kobject.ConvertOptions{CreateD: true}, 3},
|
||||||
"Convert to DaemonSets (DS)": {newKomposeObject(), kobject.ConvertOptions{CreateDS: true}, 3},
|
"Convert to DaemonSets (DS)": {newKomposeObject(), kobject.ConvertOptions{CreateDS: true}, 3},
|
||||||
"Convert to ReplicationController (RC)": {newKomposeObject(), kobject.ConvertOptions{CreateRC: true, Replicas: replicas}, 3},
|
"Convert to ReplicationController(RC)": {newKomposeObject(), kobject.ConvertOptions{CreateRC: true, Replicas: replicas, IsReplicaSetFlag: true}, 3},
|
||||||
|
"Convert to ReplicationController(RC) with v3 replicas ": {newKomposeObject(), kobject.ConvertOptions{CreateRC: true}, 3},
|
||||||
// objects generated are deployment, daemonset, ReplicationController, service and pvc
|
// objects generated are deployment, daemonset, ReplicationController, service and pvc
|
||||||
"Convert to D, DS, and RC": {newKomposeObject(), kobject.ConvertOptions{CreateD: true, CreateDS: true, CreateRC: true, Replicas: replicas}, 5},
|
"Convert to D, DS, and RC": {newKomposeObject(), kobject.ConvertOptions{CreateD: true, CreateDS: true, CreateRC: true, Replicas: replicas, IsReplicaSetFlag: true}, 5},
|
||||||
|
"Convert to D, DS, and RC with v3 replicas": {newKomposeObject(), kobject.ConvertOptions{CreateD: true, CreateDS: true, CreateRC: true}, 5},
|
||||||
// TODO: add more tests
|
// TODO: add more tests
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -313,9 +317,18 @@ func TestKomposeConvert(t *testing.T) {
|
|||||||
if err := checkMeta(config, d.ObjectMeta, name, true); err != nil {
|
if err := checkMeta(config, d.ObjectMeta, name, true); err != nil {
|
||||||
t.Errorf("%v", err)
|
t.Errorf("%v", err)
|
||||||
}
|
}
|
||||||
|
if test.opt.IsReplicaSetFlag {
|
||||||
if (int)(d.Spec.Replicas) != replicas {
|
if (int)(d.Spec.Replicas) != replicas {
|
||||||
t.Errorf("Expected %d replicas, got %d", replicas, d.Spec.Replicas)
|
t.Errorf("Expected %d replicas, got %d", replicas, d.Spec.Replicas)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (int)(d.Spec.Replicas) != newServiceConfig().Replicas {
|
||||||
|
t.Errorf("Expected %d replicas, got %d", newServiceConfig().Replicas, d.Spec.Replicas)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if d.Spec.Selector != nil && len(d.Spec.Selector.MatchLabels) > 0 {
|
if d.Spec.Selector != nil && len(d.Spec.Selector.MatchLabels) > 0 {
|
||||||
t.Errorf("Expect selector be unset, got: %#v", d.Spec.Selector)
|
t.Errorf("Expect selector be unset, got: %#v", d.Spec.Selector)
|
||||||
}
|
}
|
||||||
@ -344,9 +357,18 @@ func TestKomposeConvert(t *testing.T) {
|
|||||||
if err := checkMeta(config, rc.ObjectMeta, name, true); err != nil {
|
if err := checkMeta(config, rc.ObjectMeta, name, true); err != nil {
|
||||||
t.Errorf("%v", err)
|
t.Errorf("%v", err)
|
||||||
}
|
}
|
||||||
|
if test.opt.IsReplicaSetFlag {
|
||||||
if (int)(rc.Spec.Replicas) != replicas {
|
if (int)(rc.Spec.Replicas) != replicas {
|
||||||
t.Errorf("Expected %d replicas, got %d", replicas, rc.Spec.Replicas)
|
t.Errorf("Expected %d replicas, got %d", replicas, rc.Spec.Replicas)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (int)(rc.Spec.Replicas) != newServiceConfig().Replicas {
|
||||||
|
t.Errorf("Expected %d replicas, got %d", newServiceConfig().Replicas, rc.Spec.Replicas)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(rc.Spec.Selector) > 0 {
|
if len(rc.Spec.Selector) > 0 {
|
||||||
t.Errorf("Expect selector be unset, got: %#v", rc.Spec.Selector)
|
t.Errorf("Expect selector be unset, got: %#v", rc.Spec.Selector)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -346,7 +346,13 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
|
|||||||
for _, name := range sortedKeys {
|
for _, name := range sortedKeys {
|
||||||
service := komposeObject.ServiceConfigs[name]
|
service := komposeObject.ServiceConfigs[name]
|
||||||
var objects []runtime.Object
|
var objects []runtime.Object
|
||||||
|
//replicas
|
||||||
|
var replica int
|
||||||
|
if opt.IsReplicaSetFlag || service.Replicas == 0 {
|
||||||
|
replica = opt.Replicas
|
||||||
|
} else {
|
||||||
|
replica = service.Replicas
|
||||||
|
}
|
||||||
// Must build the images before conversion (got to add service.Image in case 'image' key isn't provided
|
// Must build the images before conversion (got to add service.Image in case 'image' key isn't provided
|
||||||
// Check to see if there is an InputFile (required!) before we build the container
|
// Check to see if there is an InputFile (required!) before we build the container
|
||||||
// Check that there's actually a Build key
|
// Check that there's actually a Build key
|
||||||
@ -394,7 +400,7 @@ func (o *OpenShift) Transform(komposeObject kobject.KomposeObject, opt kobject.C
|
|||||||
objects = o.CreateKubernetesObjects(name, service, opt)
|
objects = o.CreateKubernetesObjects(name, service, opt)
|
||||||
|
|
||||||
if opt.CreateDeploymentConfig {
|
if opt.CreateDeploymentConfig {
|
||||||
objects = append(objects, o.initDeploymentConfig(name, service, opt.Replicas)) // OpenShift DeploymentConfigs
|
objects = append(objects, o.initDeploymentConfig(name, service, replica)) // OpenShift DeploymentConfigs
|
||||||
// create ImageStream after deployment (creating IS will trigger new deployment)
|
// create ImageStream after deployment (creating IS will trigger new deployment)
|
||||||
objects = append(objects, o.initImageStream(name, service, opt))
|
objects = append(objects, o.initImageStream(name, service, opt))
|
||||||
}
|
}
|
||||||
|
|||||||
@ -160,7 +160,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"spec": {
|
"spec": {
|
||||||
"replicas": 1,
|
"replicas": 6,
|
||||||
"template": {
|
"template": {
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"creationTimestamp": null,
|
"creationTimestamp": null,
|
||||||
|
|||||||
@ -182,7 +182,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"replicas": 1,
|
"replicas": 6,
|
||||||
"test": false,
|
"test": false,
|
||||||
"selector": {
|
"selector": {
|
||||||
"io.kompose.service": "foo"
|
"io.kompose.service": "foo"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user