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,
|
||||
IsDaemonSetFlag: cmd.Flags().Lookup("daemon-set").Changed,
|
||||
IsReplicationControllerFlag: cmd.Flags().Lookup("replication-controller").Changed,
|
||||
IsReplicaSetFlag: cmd.Flags().Lookup("replicas").Changed,
|
||||
IsDeploymentConfigFlag: cmd.Flags().Lookup("deployment-config").Changed,
|
||||
}
|
||||
|
||||
|
||||
@ -53,6 +53,7 @@ type ConvertOptions struct {
|
||||
IsDeploymentFlag bool
|
||||
IsDaemonSetFlag bool
|
||||
IsReplicationControllerFlag bool
|
||||
IsReplicaSetFlag bool
|
||||
IsDeploymentConfigFlag bool
|
||||
IsNamespaceFlag bool
|
||||
}
|
||||
@ -92,6 +93,7 @@ type ServiceConfig struct {
|
||||
MemLimit yaml.MemStringorInt `compose:"mem_limit" bundle:""`
|
||||
TmpFs []string `compose:"tmpfs" bundle:""`
|
||||
Dockerfile string `compose:"dockerfile" bundle:""`
|
||||
Replicas int `compose:"replicas" bundle:""`
|
||||
}
|
||||
|
||||
// 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.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
|
||||
// TODO: Refactor yaml.MemStringorInt in kobject.go to int64
|
||||
// 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
|
||||
func (k *Kubernetes) CreateKubernetesObjects(name string, service kobject.ServiceConfig, opt kobject.ConvertOptions) []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 {
|
||||
objects = append(objects, k.InitD(name, service, opt.Replicas))
|
||||
objects = append(objects, k.InitD(name, service, replica))
|
||||
}
|
||||
if opt.CreateDS {
|
||||
objects = append(objects, k.InitDS(name, service))
|
||||
}
|
||||
if opt.CreateRC {
|
||||
objects = append(objects, k.InitRC(name, service, opt.Replicas))
|
||||
objects = append(objects, k.InitRC(name, service, replica))
|
||||
}
|
||||
|
||||
return objects
|
||||
|
||||
@ -53,6 +53,7 @@ func newServiceConfig() kobject.ServiceConfig {
|
||||
Stdin: true,
|
||||
Tty: true,
|
||||
TmpFs: []string{"/tmp"},
|
||||
Replicas: 2,
|
||||
}
|
||||
}
|
||||
|
||||
@ -270,11 +271,14 @@ func TestKomposeConvert(t *testing.T) {
|
||||
expectedNumObjs int
|
||||
}{
|
||||
// objects generated are deployment, service and pvc
|
||||
"Convert to Deployments (D)": {newKomposeObject(), kobject.ConvertOptions{CreateD: true, Replicas: replicas}, 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 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 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
|
||||
"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
|
||||
}
|
||||
|
||||
@ -313,9 +317,18 @@ func TestKomposeConvert(t *testing.T) {
|
||||
if err := checkMeta(config, d.ObjectMeta, name, true); err != nil {
|
||||
t.Errorf("%v", err)
|
||||
}
|
||||
if (int)(d.Spec.Replicas) != replicas {
|
||||
t.Errorf("Expected %d replicas, got %d", replicas, d.Spec.Replicas)
|
||||
if test.opt.IsReplicaSetFlag {
|
||||
if (int)(d.Spec.Replicas) != 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 {
|
||||
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 {
|
||||
t.Errorf("%v", err)
|
||||
}
|
||||
if (int)(rc.Spec.Replicas) != replicas {
|
||||
t.Errorf("Expected %d replicas, got %d", replicas, rc.Spec.Replicas)
|
||||
if test.opt.IsReplicaSetFlag {
|
||||
if (int)(rc.Spec.Replicas) != 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 {
|
||||
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 {
|
||||
service := komposeObject.ServiceConfigs[name]
|
||||
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
|
||||
// Check to see if there is an InputFile (required!) before we build the container
|
||||
// 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)
|
||||
|
||||
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)
|
||||
objects = append(objects, o.initImageStream(name, service, opt))
|
||||
}
|
||||
|
||||
@ -160,7 +160,7 @@
|
||||
}
|
||||
},
|
||||
"spec": {
|
||||
"replicas": 1,
|
||||
"replicas": 6,
|
||||
"template": {
|
||||
"metadata": {
|
||||
"creationTimestamp": null,
|
||||
|
||||
@ -182,7 +182,7 @@
|
||||
}
|
||||
}
|
||||
],
|
||||
"replicas": 1,
|
||||
"replicas": 6,
|
||||
"test": false,
|
||||
"selector": {
|
||||
"io.kompose.service": "foo"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user