Skip to content
Open
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
4 changes: 4 additions & 0 deletions deploy/crds/contrail.juniper.net_kubemanagers_crd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,10 @@ spec:
type: string
type: object
type: array
envVariablesConfig:
additionalProperties:
type: string
type: object
hostNetworkService:
type: boolean
ipFabricForwarding:
Expand Down
4 changes: 4 additions & 0 deletions deploy/crds/contrail.juniper.net_managers_crd.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1517,6 +1517,10 @@ spec:
type: string
type: object
type: array
envVariablesConfig:
additionalProperties:
type: string
type: object
hostNetworkService:
type: boolean
ipFabricForwarding:
Expand Down
21 changes: 20 additions & 1 deletion pkg/apis/contrail/v1alpha1/kubemanager_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ type KubemanagerConfiguration struct {
RabbitmqPassword string `json:"rabbitmqPassword,omitempty"`
RabbitmqVhost string `json:"rabbitmqVhost,omitempty"`
StaticConfiguration *KubemanagerStaticConfiguration `json:"staticConfiguration,omitempty"`
EnvVariablesConfig map[string]string `json:"envVariablesConfig,omitempty"`
}

// KubemanagerStaticConfiguration is the configuration for deployment with static controller.
Expand Down Expand Up @@ -271,7 +272,13 @@ func (c *Kubemanager) InstanceConfiguration(request reconcile.Request,
if err = client.Update(context.TODO(), configMapInstanceDynamicConfig); err != nil {
return err
}
return nil
envVariablesConfigMapName := request.Name + "-" + "kubemanager" + "-configmap-envs"
envVariablesConfigMap := &corev1.ConfigMap{}
if err := client.Get(context.TODO(), types.NamespacedName{Name: envVariablesConfigMapName, Namespace: request.Namespace}, envVariablesConfigMap); err != nil {
return err
}
envVariablesConfigMap.Data = c.getKubemanagerEnvironmentData()
return client.Update(context.TODO(), envVariablesConfigMap)
}

func (c *Kubemanager) CreateConfigMap(configMapName string, client client.Client, scheme *runtime.Scheme, request reconcile.Request) (*corev1.ConfigMap, error) {
Expand Down Expand Up @@ -457,10 +464,22 @@ func (c *Kubemanager) ConfigurationParameters() KubemanagerConfiguration {
kubemanagerConfiguration.HostNetworkService = &hostNetworkService
kubemanagerConfiguration.UseKubeadmConfig = &useKubeadmConfig
kubemanagerConfiguration.IPFabricSnat = &ipFabricSnat
kubemanagerConfiguration.EnvVariablesConfig = c.Spec.ServiceConfiguration.EnvVariablesConfig

return kubemanagerConfiguration
}

func (c *Kubemanager) getKubemanagerEnvironmentData() map[string]string {
kubemanagerConfig := c.ConfigurationParameters()
envVariables := make(map[string]string)
if len(kubemanagerConfig.EnvVariablesConfig) != 0 {
for key, value := range kubemanagerConfig.EnvVariablesConfig {
envVariables[key] = value
}
}
return envVariables
}

func (c *Kubemanager) getCassandraNodesInformation(namespace string, client client.Client) (CassandraClusterConfiguration, error) {
if c.Spec.ServiceConfiguration.StaticConfiguration != nil && c.Spec.ServiceConfiguration.StaticConfiguration.CassandraNodesConfiguration != nil {
cassandraNodesInformation := *c.Spec.ServiceConfiguration.StaticConfiguration.CassandraNodesConfiguration
Expand Down
19 changes: 13 additions & 6 deletions pkg/apis/contrail/v1alpha1/kubemanager_types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,13 @@ var kubemanagerCM = &corev1.ConfigMap{
},
}

var kubemanagerCMEnvs = &corev1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: "kubemanager1-kubemanager-configmap-envs",
Namespace: "test-ns",
},
}

var rabbitSecret = &corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "rabbit-secret",
Expand Down Expand Up @@ -394,7 +401,7 @@ func TestInstanceConfigurationWithStaticConfiguration(t *testing.T) {
require.NoError(t, err, "Failed to build scheme")
require.NoError(t, corev1.SchemeBuilder.AddToScheme(scheme), "Failed to add CoreV1 into scheme")

cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, rabbitSecret, kubemanagerSecret)
cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, kubemanagerCMEnvs, rabbitSecret, kubemanagerSecret)

kubemanager := Kubemanager{
Spec: KubemanagerSpec{
Expand Down Expand Up @@ -466,7 +473,7 @@ func TestInstanceConfigurationWithDynamicConfiguration(t *testing.T) {
require.NoError(t, err, "Failed to build scheme")
require.NoError(t, corev1.SchemeBuilder.AddToScheme(scheme), "Failed to add CoreV1 into scheme")

cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, rabbitSecret, kubemanagerSecret, cassandraCR, zookeeperCR, configCR, rabbitmqCR)
cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, kubemanagerCMEnvs, rabbitSecret, kubemanagerSecret, cassandraCR, zookeeperCR, configCR, rabbitmqCR)

kubemanager := Kubemanager{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -523,7 +530,7 @@ func TestInstanceConfigurationWithDynamicCassandraZookeeperConfiguration(t *test
require.NoError(t, err, "Failed to build scheme")
require.NoError(t, corev1.SchemeBuilder.AddToScheme(scheme), "Failed to add CoreV1 into scheme")

cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, rabbitSecret, kubemanagerSecret, cassandraCR, zookeeperCR)
cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, kubemanagerCMEnvs, rabbitSecret, kubemanagerSecret, cassandraCR, zookeeperCR)

kubemanager := Kubemanager{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -593,7 +600,7 @@ func TestInstanceConfigurationWithDynamicRabbitmqConfigConfiguration(t *testing.
require.NoError(t, err, "Failed to build scheme")
require.NoError(t, corev1.SchemeBuilder.AddToScheme(scheme), "Failed to add CoreV1 into scheme")

cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, rabbitSecret, kubemanagerSecret, configCR, rabbitmqCR)
cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, kubemanagerCMEnvs, rabbitSecret, kubemanagerSecret, configCR, rabbitmqCR)

kubemanager := Kubemanager{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -659,7 +666,7 @@ func TestInstanceConfigurationWithDynamicConfigZookeeperConfiguration(t *testing
require.NoError(t, err, "Failed to build scheme")
require.NoError(t, corev1.SchemeBuilder.AddToScheme(scheme), "Failed to add CoreV1 into scheme")

cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, rabbitSecret, kubemanagerSecret, configCR, zookeeperCR)
cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, kubemanagerCMEnvs, rabbitSecret, kubemanagerSecret, configCR, zookeeperCR)

kubemanager := Kubemanager{
ObjectMeta: metav1.ObjectMeta{
Expand Down Expand Up @@ -727,7 +734,7 @@ func TestInstanceConfigurationWithDynamicRabbitmqCassandraConfiguration(t *testi
require.NoError(t, err, "Failed to build scheme")
require.NoError(t, corev1.SchemeBuilder.AddToScheme(scheme), "Failed to add CoreV1 into scheme")

cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, rabbitSecret, kubemanagerSecret, cassandraCR, rabbitmqCR)
cl := fake.NewFakeClientWithScheme(scheme, kubemanagerCM, kubemanagerCMEnvs, rabbitSecret, kubemanagerSecret, cassandraCR, rabbitmqCR)

kubemanager := Kubemanager{
ObjectMeta: metav1.ObjectMeta{
Expand Down
119 changes: 63 additions & 56 deletions pkg/apis/contrail/v1alpha1/tests/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,35 +188,36 @@ var configMap = &corev1.ConfigMap{}
var secret = &corev1.Secret{}

type Environment struct {
client *client.Client
configPodList corev1.PodList
rabbitmqPodList corev1.PodList
zookeeperPodList corev1.PodList
cassandraPodList corev1.PodList
controlPodList corev1.PodList
kubemanbagerPodList corev1.PodList
webuiPodList corev1.PodList
vrouterPodList corev1.PodList
configResource v1alpha1.Config
controlResource v1alpha1.Control
cassandraResource v1alpha1.Cassandra
zookeeperResource v1alpha1.Zookeeper
rabbitmqResource v1alpha1.Rabbitmq
kubemanagerResource v1alpha1.Kubemanager
webuiResource v1alpha1.Webui
vrouterResource v1alpha1.Vrouter
configConfigMap corev1.ConfigMap
controlConfigMap corev1.ConfigMap
cassandraConfigMap corev1.ConfigMap
zookeeperConfigMap corev1.ConfigMap
zookeeperConfigMap2 corev1.ConfigMap
rabbitmqConfigMap corev1.ConfigMap
rabbitmqConfigMap2 corev1.ConfigMap
kubemanagerConfigMap corev1.ConfigMap
kubemanagerSecret corev1.Secret
webuiConfigMap corev1.ConfigMap
vrouterConfigMap corev1.ConfigMap
vrouterConfigMap2 corev1.ConfigMap
client *client.Client
configPodList corev1.PodList
rabbitmqPodList corev1.PodList
zookeeperPodList corev1.PodList
cassandraPodList corev1.PodList
controlPodList corev1.PodList
kubemanbagerPodList corev1.PodList
webuiPodList corev1.PodList
vrouterPodList corev1.PodList
configResource v1alpha1.Config
controlResource v1alpha1.Control
cassandraResource v1alpha1.Cassandra
zookeeperResource v1alpha1.Zookeeper
rabbitmqResource v1alpha1.Rabbitmq
kubemanagerResource v1alpha1.Kubemanager
webuiResource v1alpha1.Webui
vrouterResource v1alpha1.Vrouter
configConfigMap corev1.ConfigMap
controlConfigMap corev1.ConfigMap
cassandraConfigMap corev1.ConfigMap
zookeeperConfigMap corev1.ConfigMap
zookeeperConfigMap2 corev1.ConfigMap
rabbitmqConfigMap corev1.ConfigMap
rabbitmqConfigMap2 corev1.ConfigMap
kubemanagerConfigMap corev1.ConfigMap
kubemanagerConfigMapEnvs corev1.ConfigMap
kubemanagerSecret corev1.Secret
webuiConfigMap corev1.ConfigMap
vrouterConfigMap corev1.ConfigMap
vrouterConfigMap2 corev1.ConfigMap
}

func SetupEnv() Environment {
Expand All @@ -228,6 +229,7 @@ func SetupEnv() Environment {
zookeeperConfigMap := *configMap
controlConfigMap := *configMap
kubemanagerConfigMap := *configMap
kubemanagerConfigMapEnvs := *configMap
webuiConfigMap := *configMap
vrouterConfigMap := *configMap
vrouterConfigMap2 := *configMap
Expand Down Expand Up @@ -286,6 +288,9 @@ func SetupEnv() Environment {
kubemanagerConfigMap.Name = "kubemanager1-kubemanager-configmap"
kubemanagerConfigMap.Namespace = "default"

kubemanagerConfigMapEnvs.Name = "kubemanager1-kubemanager-configmap-envs"
kubemanagerConfigMapEnvs.Namespace = "default"

webuiConfigMap.Name = "webui1-webui-configmap"
webuiConfigMap.Namespace = "default"

Expand Down Expand Up @@ -338,6 +343,7 @@ func SetupEnv() Environment {
&rabbitmqConfigMap,
&rabbitmqConfigMap2,
&kubemanagerConfigMap,
&kubemanagerConfigMapEnvs,
&webuiConfigMap,
&vrouterConfigMap,
&vrouterConfigMap2,
Expand Down Expand Up @@ -498,33 +504,34 @@ func SetupEnv() Environment {
vrouterResource.ManageNodeStatus(podMap.vrouterPods, cl)

environment := Environment{
client: &cl,
configPodList: configPodList,
cassandraPodList: cassandraPodList,
zookeeperPodList: zookeeperPodList,
rabbitmqPodList: rabbitmqPodList,
controlPodList: controlPodList,
kubemanbagerPodList: kubemanagerPodList,
webuiPodList: webuiPodList,
vrouterPodList: vrouterPodList,
configResource: *configResource,
controlResource: *controlResource,
cassandraResource: *cassandraResource,
zookeeperResource: *zookeeperResource,
rabbitmqResource: *rabbitmqResource,
kubemanagerResource: *kubemanagerResource,
webuiResource: *webuiResource,
vrouterResource: *vrouterResource,
configConfigMap: configConfigMap,
controlConfigMap: controlConfigMap,
cassandraConfigMap: cassandraConfigMap,
zookeeperConfigMap: zookeeperConfigMap,
rabbitmqConfigMap: rabbitmqConfigMap,
rabbitmqConfigMap2: rabbitmqConfigMap2,
kubemanagerConfigMap: kubemanagerConfigMap,
webuiConfigMap: webuiConfigMap,
vrouterConfigMap: vrouterConfigMap,
vrouterConfigMap2: vrouterConfigMap2,
client: &cl,
configPodList: configPodList,
cassandraPodList: cassandraPodList,
zookeeperPodList: zookeeperPodList,
rabbitmqPodList: rabbitmqPodList,
controlPodList: controlPodList,
kubemanbagerPodList: kubemanagerPodList,
webuiPodList: webuiPodList,
vrouterPodList: vrouterPodList,
configResource: *configResource,
controlResource: *controlResource,
cassandraResource: *cassandraResource,
zookeeperResource: *zookeeperResource,
rabbitmqResource: *rabbitmqResource,
kubemanagerResource: *kubemanagerResource,
webuiResource: *webuiResource,
vrouterResource: *vrouterResource,
configConfigMap: configConfigMap,
controlConfigMap: controlConfigMap,
cassandraConfigMap: cassandraConfigMap,
zookeeperConfigMap: zookeeperConfigMap,
rabbitmqConfigMap: rabbitmqConfigMap,
rabbitmqConfigMap2: rabbitmqConfigMap2,
kubemanagerConfigMap: kubemanagerConfigMap,
kubemanagerConfigMapEnvs: kubemanagerConfigMapEnvs,
webuiConfigMap: webuiConfigMap,
vrouterConfigMap: vrouterConfigMap,
vrouterConfigMap2: vrouterConfigMap2,
}
return environment
}
Expand Down
9 changes: 8 additions & 1 deletion pkg/apis/contrail/v1alpha1/zz_generated.deepcopy.go

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

13 changes: 13 additions & 0 deletions pkg/controller/kubemanager/kubemanager_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,12 @@ func (r *ReconcileKubemanager) Reconcile(request reconcile.Request) (reconcile.R
return reconcile.Result{}, err
}

envVariablesConfigMap := request.Name + "-" + instanceType + "-configmap-envs"
_, err = instance.CreateConfigMap(envVariablesConfigMap, r.Client, r.Scheme, request)
if err != nil {
return reconcile.Result{}, err
}

secretCertificates, err := instance.CreateSecret(request.Name+"-secret-certificates", r.Client, r.Scheme, request)
if err != nil {
return reconcile.Result{}, err
Expand Down Expand Up @@ -429,6 +435,13 @@ func (r *ReconcileKubemanager) Reconcile(request reconcile.Request) (reconcile.R
volumeMountList = append(volumeMountList, volumeMount)
(&statefulSet.Spec.Template.Spec.Containers[idx]).VolumeMounts = volumeMountList
(&statefulSet.Spec.Template.Spec.Containers[idx]).Image = instanceContainer.Image
(&statefulSet.Spec.Template.Spec.Containers[idx]).EnvFrom = []corev1.EnvFromSource{{
ConfigMapRef: &corev1.ConfigMapEnvSource{
LocalObjectReference: corev1.LocalObjectReference{
Name: envVariablesConfigMap,
},
},
}}
}
if container.Name == "statusmonitor" {
command := []string{"sh", "-c",
Expand Down