@@ -122,22 +122,24 @@ func (s *ContainerSpec) setResources(resources *corev1.ResourceRequirements) *Co
122122
123123// BaseSpec contains command fields for both StatefulSet and Deployment
124124type BaseSpec struct {
125- Name string `json:"name,omitempty"`
126- Namespace string `json:"namespace,omitempty"`
127- Labels map [string ]string `json:"labels,omitempty"`
128- ServiceAccountName string `json:"serviceAccountName,omitempty"`
129- Replicas int32 `json:"replicas,omitempty"`
130- NodeSelector map [string ]string `json:"nodeSelector,omitempty"`
131- RuntimeClassName string `json:"runtimeClassName,omitempty"`
132- PriorityClassName string `json:"priorityClassName,omitempty"`
133- SecuritySecret string `json:"securitySecret,omitempty"`
134- SecuritySecretPath string `json:"securitySecretPath,omitempty"`
135- CConf string `json:"cdapConf,omitempty"`
136- HConf string `json:"hadoopConf,omitempty"`
137- SysAppConf string `json:"sysAppConf,omitempty"`
138- ConfigMapVolumes map [string ]string `json:"configMapVolumes,omitempty"`
139- SecretVolumes map [string ]string `json:"secretVolumes,omitempty"`
140- SecurityContext * v1alpha1.SecurityContext `json:"securityContext,omitempty"`
125+ Name string `json:"name,omitempty"`
126+ Namespace string `json:"namespace,omitempty"`
127+ Labels map [string ]string `json:"labels,omitempty"`
128+ ServiceAccountName string `json:"serviceAccountName,omitempty"`
129+ Replicas int32 `json:"replicas,omitempty"`
130+ NodeSelector map [string ]string `json:"nodeSelector,omitempty"`
131+ RuntimeClassName string `json:"runtimeClassName,omitempty"`
132+ PriorityClassName string `json:"priorityClassName,omitempty"`
133+ SecuritySecret string `json:"securitySecret,omitempty"`
134+ SecuritySecretPath string `json:"securitySecretPath,omitempty"`
135+ CConf string `json:"cdapConf,omitempty"`
136+ HConf string `json:"hadoopConf,omitempty"`
137+ SysAppConf string `json:"sysAppConf,omitempty"`
138+ ConfigMapVolumes map [string ]string `json:"configMapVolumes,omitempty"`
139+ SecretVolumes map [string ]string `json:"secretVolumes,omitempty"`
140+ AdditionalVolumes []corev1.Volume `json:"additionalVolumes,omitempty"`
141+ AdditionalVolumeMounts []corev1.VolumeMount `json:"additionalVolumeMounts,omitempty"`
142+ SecurityContext * v1alpha1.SecurityContext `json:"securityContext,omitempty"`
141143}
142144
143145func newBaseSpec (master * v1alpha1.CDAPMaster , name string , labels map [string ]string , cconf , hconf , sysappconf string ) * BaseSpec {
@@ -156,7 +158,8 @@ func newBaseSpec(master *v1alpha1.CDAPMaster, name string, labels map[string]str
156158 s .SysAppConf = sysappconf
157159 s .ConfigMapVolumes = cloneMap (master .Spec .ConfigMapVolumes )
158160 s .SecretVolumes = cloneMap (master .Spec .SecretVolumes )
159-
161+ s .AdditionalVolumes = master .Spec .AdditionalVolumes
162+ s .AdditionalVolumeMounts = master .Spec .AdditionalVolumeMounts
160163 return s
161164}
162165
@@ -218,6 +221,30 @@ func addVolumes(volumes, newVolumes map[string]string, typeName string) error {
218221 return nil
219222}
220223
224+ func (s * BaseSpec ) addAdditionalVolumes (additionalVolumes []corev1.Volume ) (* BaseSpec , error ) {
225+ for _ , additionalVolume := range additionalVolumes {
226+ for _ , specVolume := range s .AdditionalVolumes {
227+ if specVolume .Name == additionalVolume .Name {
228+ return nil , fmt .Errorf ("failed to add custom volume %q due to already mounted as %+v" , additionalVolume .Name , specVolume )
229+ }
230+ }
231+ s .AdditionalVolumes = append (s .AdditionalVolumes , additionalVolume )
232+ }
233+ return s , nil
234+ }
235+
236+ func (s * BaseSpec ) addAdditionalVolumeMounts (additionalVolumeMounts []corev1.VolumeMount ) (* BaseSpec , error ) {
237+ for _ , additionalVolumeMount := range additionalVolumeMounts {
238+ for _ , specVolumeMount := range s .AdditionalVolumeMounts {
239+ if specVolumeMount .Name == additionalVolumeMount .Name {
240+ return nil , fmt .Errorf ("failed to mount custom volume %q at path %q due to already mounted as %+v" , additionalVolumeMount .Name , additionalVolumeMount .MountPath , specVolumeMount )
241+ }
242+ }
243+ s .AdditionalVolumeMounts = append (s .AdditionalVolumeMounts , additionalVolumeMount )
244+ }
245+ return s , nil
246+ }
247+
221248func (s * BaseSpec ) setSecurityContext (securityContext * v1alpha1.SecurityContext ) * BaseSpec {
222249 s .SecurityContext = securityContext
223250 if securityContext != nil {
@@ -306,6 +333,20 @@ func (s *DeploymentSpec) addSecretVolumes(volumes map[string]string) (*Deploymen
306333 return s , nil
307334}
308335
336+ func (s * DeploymentSpec ) addAdditionalVolumes (additionalVolumes []corev1.Volume ) (* DeploymentSpec , error ) {
337+ if _ , err := s .Base .addAdditionalVolumes (additionalVolumes ); err != nil {
338+ return nil , err
339+ }
340+ return s , nil
341+ }
342+
343+ func (s * DeploymentSpec ) addAdditionalVolumeMounts (additionalVolumeMounts []corev1.VolumeMount ) (* DeploymentSpec , error ) {
344+ if _ , err := s .Base .addAdditionalVolumeMounts (additionalVolumeMounts ); err != nil {
345+ return nil , err
346+ }
347+ return s , nil
348+ }
349+
309350func (s * DeploymentSpec ) setSecurityContext (securityContext * v1alpha1.SecurityContext ) * DeploymentSpec {
310351 s .Base .setSecurityContext (securityContext )
311352 return s
@@ -397,6 +438,20 @@ func (s *StatefulSpec) addSecretVolumes(volumes map[string]string) (*StatefulSpe
397438 return s , nil
398439}
399440
441+ func (s * StatefulSpec ) addAdditionalVolumes (additionalVolumes []corev1.Volume ) (* StatefulSpec , error ) {
442+ if _ , err := s .Base .addAdditionalVolumes (additionalVolumes ); err != nil {
443+ return nil , err
444+ }
445+ return s , nil
446+ }
447+
448+ func (s * StatefulSpec ) addAdditionalVolumeMounts (additionalVolumeMounts []corev1.VolumeMount ) (* StatefulSpec , error ) {
449+ if _ , err := s .Base .addAdditionalVolumeMounts (additionalVolumeMounts ); err != nil {
450+ return nil , err
451+ }
452+ return s , nil
453+ }
454+
400455func (s * StatefulSpec ) setSecurityContext (securityContext * v1alpha1.SecurityContext ) * StatefulSpec {
401456 s .Base .setSecurityContext (securityContext )
402457 return s
0 commit comments