This is an automated email from the ASF dual-hosted git repository.

caigy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/rocketmq-operator.git


The following commit(s) were added to refs/heads/master by this push:
     new bd3757e  fix #207: Support to set environment variables in NameServer 
pod. (#208)
bd3757e is described below

commit bd3757e0813c3394fcb7634b3f3ecb66e32cc5e3
Author: Jin Shang <jim.sha...@gmail.com>
AuthorDate: Sun Feb 4 14:56:46 2024 +0800

    fix #207: Support to set environment variables in NameServer pod. (#208)
    
    Co-authored-by: jim.sj <jim...@alibaba-inc.com>
---
 .../crds/rocketmq.apache.org_nameservices.yaml     | 105 +++++++++++++++++++++
 deploy/crds/rocketmq.apache.org_nameservices.yaml  | 105 +++++++++++++++++++++
 pkg/apis/rocketmq/v1alpha1/nameservice_types.go    |   2 +
 .../nameservice/nameservice_controller.go          |   1 +
 4 files changed, 213 insertions(+)

diff --git 
a/charts/rocketmq-operator/crds/rocketmq.apache.org_nameservices.yaml 
b/charts/rocketmq-operator/crds/rocketmq.apache.org_nameservices.yaml
index 315d85e..49317b0 100644
--- a/charts/rocketmq-operator/crds/rocketmq.apache.org_nameservices.yaml
+++ b/charts/rocketmq-operator/crds/rocketmq.apache.org_nameservices.yaml
@@ -1023,6 +1023,111 @@ spec:
               dnsPolicy:
                 description: dnsPolicy defines how a pod's DNS will be 
configured
                 type: string
+              env:
+                description: Env defines custom env, e.g. JAVA_OPT_EXT
+                items:
+                  description: EnvVar represents an environment variable 
present in
+                    a Container.
+                  properties:
+                    name:
+                      description: Name of the environment variable. Must be a 
C_IDENTIFIER.
+                      type: string
+                    value:
+                      description: 'Variable references $(VAR_NAME) are 
expanded using
+                        the previously defined environment variables in the 
container
+                        and any service environment variables. If a variable 
cannot
+                        be resolved, the reference in the input string will be 
unchanged.
+                        Double $$ are reduced to a single $, which allows for 
escaping
+                        the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will 
produce the
+                        string literal "$(VAR_NAME)". Escaped references will 
never
+                        be expanded, regardless of whether the variable exists 
or
+                        not. Defaults to "".'
+                      type: string
+                    valueFrom:
+                      description: Source for the environment variable's 
value. Cannot
+                        be used if value is not empty.
+                      properties:
+                        configMapKeyRef:
+                          description: Selects a key of a ConfigMap.
+                          properties:
+                            key:
+                              description: The key to select.
+                              type: string
+                            name:
+                              description: 'Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                TODO: Add other useful fields. apiVersion, 
kind, uid?'
+                              type: string
+                            optional:
+                              description: Specify whether the ConfigMap or 
its key
+                                must be defined
+                              type: boolean
+                          required:
+                          - key
+                          type: object
+                        fieldRef:
+                          description: 'Selects a field of the pod: supports 
metadata.name,
+                            metadata.namespace, `metadata.labels[''<KEY>'']`, 
`metadata.annotations[''<KEY>'']`,
+                            spec.nodeName, spec.serviceAccountName, 
status.hostIP,
+                            status.podIP, status.podIPs.'
+                          properties:
+                            apiVersion:
+                              description: Version of the schema the FieldPath 
is
+                                written in terms of, defaults to "v1".
+                              type: string
+                            fieldPath:
+                              description: Path of the field to select in the 
specified
+                                API version.
+                              type: string
+                          required:
+                          - fieldPath
+                          type: object
+                        resourceFieldRef:
+                          description: 'Selects a resource of the container: 
only
+                            resources limits and requests (limits.cpu, 
limits.memory,
+                            limits.ephemeral-storage, requests.cpu, 
requests.memory
+                            and requests.ephemeral-storage) are currently 
supported.'
+                          properties:
+                            containerName:
+                              description: 'Container name: required for 
volumes,
+                                optional for env vars'
+                              type: string
+                            divisor:
+                              anyOf:
+                              - type: integer
+                              - type: string
+                              description: Specifies the output format of the 
exposed
+                                resources, defaults to "1"
+                              pattern: 
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                              x-kubernetes-int-or-string: true
+                            resource:
+                              description: 'Required: resource to select'
+                              type: string
+                          required:
+                          - resource
+                          type: object
+                        secretKeyRef:
+                          description: Selects a key of a secret in the pod's 
namespace
+                          properties:
+                            key:
+                              description: The key of the secret to select 
from.  Must
+                                be a valid secret key.
+                              type: string
+                            name:
+                              description: 'Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                TODO: Add other useful fields. apiVersion, 
kind, uid?'
+                              type: string
+                            optional:
+                              description: Specify whether the Secret or its 
key must
+                                be defined
+                              type: boolean
+                          required:
+                          - key
+                          type: object
+                      type: object
+                  required:
+                  - name
+                  type: object
+                type: array
               hostNetwork:
                 description: HostNetwork can be true or false
                 type: boolean
diff --git a/deploy/crds/rocketmq.apache.org_nameservices.yaml 
b/deploy/crds/rocketmq.apache.org_nameservices.yaml
index 315d85e..49317b0 100644
--- a/deploy/crds/rocketmq.apache.org_nameservices.yaml
+++ b/deploy/crds/rocketmq.apache.org_nameservices.yaml
@@ -1023,6 +1023,111 @@ spec:
               dnsPolicy:
                 description: dnsPolicy defines how a pod's DNS will be 
configured
                 type: string
+              env:
+                description: Env defines custom env, e.g. JAVA_OPT_EXT
+                items:
+                  description: EnvVar represents an environment variable 
present in
+                    a Container.
+                  properties:
+                    name:
+                      description: Name of the environment variable. Must be a 
C_IDENTIFIER.
+                      type: string
+                    value:
+                      description: 'Variable references $(VAR_NAME) are 
expanded using
+                        the previously defined environment variables in the 
container
+                        and any service environment variables. If a variable 
cannot
+                        be resolved, the reference in the input string will be 
unchanged.
+                        Double $$ are reduced to a single $, which allows for 
escaping
+                        the $(VAR_NAME) syntax: i.e. "$$(VAR_NAME)" will 
produce the
+                        string literal "$(VAR_NAME)". Escaped references will 
never
+                        be expanded, regardless of whether the variable exists 
or
+                        not. Defaults to "".'
+                      type: string
+                    valueFrom:
+                      description: Source for the environment variable's 
value. Cannot
+                        be used if value is not empty.
+                      properties:
+                        configMapKeyRef:
+                          description: Selects a key of a ConfigMap.
+                          properties:
+                            key:
+                              description: The key to select.
+                              type: string
+                            name:
+                              description: 'Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                TODO: Add other useful fields. apiVersion, 
kind, uid?'
+                              type: string
+                            optional:
+                              description: Specify whether the ConfigMap or 
its key
+                                must be defined
+                              type: boolean
+                          required:
+                          - key
+                          type: object
+                        fieldRef:
+                          description: 'Selects a field of the pod: supports 
metadata.name,
+                            metadata.namespace, `metadata.labels[''<KEY>'']`, 
`metadata.annotations[''<KEY>'']`,
+                            spec.nodeName, spec.serviceAccountName, 
status.hostIP,
+                            status.podIP, status.podIPs.'
+                          properties:
+                            apiVersion:
+                              description: Version of the schema the FieldPath 
is
+                                written in terms of, defaults to "v1".
+                              type: string
+                            fieldPath:
+                              description: Path of the field to select in the 
specified
+                                API version.
+                              type: string
+                          required:
+                          - fieldPath
+                          type: object
+                        resourceFieldRef:
+                          description: 'Selects a resource of the container: 
only
+                            resources limits and requests (limits.cpu, 
limits.memory,
+                            limits.ephemeral-storage, requests.cpu, 
requests.memory
+                            and requests.ephemeral-storage) are currently 
supported.'
+                          properties:
+                            containerName:
+                              description: 'Container name: required for 
volumes,
+                                optional for env vars'
+                              type: string
+                            divisor:
+                              anyOf:
+                              - type: integer
+                              - type: string
+                              description: Specifies the output format of the 
exposed
+                                resources, defaults to "1"
+                              pattern: 
^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+                              x-kubernetes-int-or-string: true
+                            resource:
+                              description: 'Required: resource to select'
+                              type: string
+                          required:
+                          - resource
+                          type: object
+                        secretKeyRef:
+                          description: Selects a key of a secret in the pod's 
namespace
+                          properties:
+                            key:
+                              description: The key of the secret to select 
from.  Must
+                                be a valid secret key.
+                              type: string
+                            name:
+                              description: 'Name of the referent. More info: 
https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+                                TODO: Add other useful fields. apiVersion, 
kind, uid?'
+                              type: string
+                            optional:
+                              description: Specify whether the Secret or its 
key must
+                                be defined
+                              type: boolean
+                          required:
+                          - key
+                          type: object
+                      type: object
+                  required:
+                  - name
+                  type: object
+                type: array
               hostNetwork:
                 description: HostNetwork can be true or false
                 type: boolean
diff --git a/pkg/apis/rocketmq/v1alpha1/nameservice_types.go 
b/pkg/apis/rocketmq/v1alpha1/nameservice_types.go
index a6f4ace..007b6e0 100644
--- a/pkg/apis/rocketmq/v1alpha1/nameservice_types.go
+++ b/pkg/apis/rocketmq/v1alpha1/nameservice_types.go
@@ -47,6 +47,8 @@ type NameServiceSpec struct {
        StorageMode string `json:"storageMode"`
        // HostPath is the local path to store data
        HostPath string `json:"hostPath"`
+       // Env defines custom env, e.g. JAVA_OPT_EXT
+       Env []corev1.EnvVar `json:"env,omitempty"`
        // VolumeClaimTemplates defines the StorageClass
        VolumeClaimTemplates []corev1.PersistentVolumeClaim 
`json:"volumeClaimTemplates"`
        // Pod Security Context
diff --git a/pkg/controller/nameservice/nameservice_controller.go 
b/pkg/controller/nameservice/nameservice_controller.go
index ece34de..88fe0fa 100644
--- a/pkg/controller/nameservice/nameservice_controller.go
+++ b/pkg/controller/nameservice/nameservice_controller.go
@@ -374,6 +374,7 @@ func (r *ReconcileNameService) 
statefulSetForNameService(nameService *rocketmqv1
                                                // Name must be lower case !
                                                Name:            "name-service",
                                                ImagePullPolicy: 
nameService.Spec.ImagePullPolicy,
+                                               Env:             
nameService.Spec.Env,
                                                Ports: []corev1.ContainerPort{{
                                                        ContainerPort: 
cons.NameServiceMainContainerPort,
                                                        Name:          
cons.NameServiceMainContainerPortName,

Reply via email to