Skip to content

Commit d635892

Browse files
authored
Merge pull request #62 from marklogic/features/MLE-19888-storage
MLE-19888 Allow multiple Persistence Volume and change the current Storage API to Persistence
2 parents 980b110 + 563b6a7 commit d635892

File tree

10 files changed

+2213
-6378
lines changed

10 files changed

+2213
-6378
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ help: ## Display this help.
109109

110110
.PHONY: manifests
111111
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
112-
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases
112+
$(CONTROLLER_GEN) rbac:roleName=manager-role crd:generateEmbeddedObjectMeta=true webhook paths="./..." output:crd:artifacts:config=config/crd/bases
113113

114114
.PHONY: generate
115115
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.

api/v1alpha1/common_types.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,15 @@ type ContainerProbe struct {
2121
}
2222

2323
// Storage is the inteface to add pvc and pv support in marklogic
24-
type Storage struct {
25-
Size string `json:"size,omitempty"`
26-
VolumeMount VolumeMountWrapper `json:"volumeMount,omitempty"`
27-
StorageClassName string `json:"storageClassName,omitempty"`
24+
type Persistence struct {
25+
// +kubebuilder:default:=true
26+
Enabled bool `json:"enabled,omitempty"`
27+
// +kubebuilder:default:="10Gi"
28+
Size string `json:"size,omitempty"`
29+
StorageClassName string `json:"storageClassName,omitempty"`
30+
// +kubebuilder:default:={ReadWriteOnce}
31+
AccessModes []corev1.PersistentVolumeAccessMode `json:"accessModes,omitempty"`
32+
Annotations map[string]string `json:"annotations,omitempty"`
2833
}
2934

3035
type HugePages struct {

api/v1alpha1/marklogiccluster_types.go

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ type MarklogicClusterSpec struct {
4242
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
4343

4444
Auth *AdminAuth `json:"auth,omitempty"`
45-
Storage *Storage `json:"storage,omitempty"`
45+
Persistence *Persistence `json:"persistence,omitempty"`
4646
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
4747
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"`
4848
// +kubebuilder:validation:Enum=OnDelete;RollingUpdate
@@ -60,11 +60,12 @@ type MarklogicClusterSpec struct {
6060
// +kubebuilder:default:={enabled: false, mountPath: "/dev/hugepages"}
6161
HugePages *HugePages `json:"hugePages,omitempty"`
6262
// +kubebuilder:default:={enabled: false, image: "fluent/fluent-bit:3.2.5", resources: {requests: {cpu: "100m", memory: "200Mi"}, limits: {cpu: "200m", memory: "500Mi"}}, files: {errorLogs: true, accessLogs: true, requestLogs: true}, outputs: "stdout"}
63-
LogCollection *LogCollection `json:"logCollection,omitempty"`
64-
HAProxy *HAProxy `json:"haproxy,omitempty"`
65-
Tls *Tls `json:"tls,omitempty"`
66-
AdditionalVolumes *[]corev1.Volume `json:"additionalVolumes,omitempty"`
67-
AdditionalVolumeMounts *[]corev1.VolumeMount `json:"additionalVolumeMounts,omitempty"`
63+
LogCollection *LogCollection `json:"logCollection,omitempty"`
64+
HAProxy *HAProxy `json:"haproxy,omitempty"`
65+
Tls *Tls `json:"tls,omitempty"`
66+
AdditionalVolumes *[]corev1.Volume `json:"additionalVolumes,omitempty"`
67+
AdditionalVolumeMounts *[]corev1.VolumeMount `json:"additionalVolumeMounts,omitempty"`
68+
AdditionalVolumeClaimTemplates *[]corev1.PersistentVolumeClaim `json:"additionalVolumeClaimTemplates,omitempty"`
6869

6970
// +kubebuilder:validation:MaxItems=100
7071
// +kubebuilder:validation:XValidation:rule="size(self) == 1 || (size(self) == size(self.map(x, x.groupConfig.name).filter(y, self.map(x, x.groupConfig.name).filter(z, z == y).size() == 1)))", message="MarkLogicGroups must have unique groupConfig names"
@@ -73,26 +74,27 @@ type MarklogicClusterSpec struct {
7374
}
7475

7576
type MarklogicGroups struct {
76-
Replicas *int32 `json:"replicas,omitempty"`
77-
Name string `json:"name,omitempty"`
78-
GroupConfig *GroupConfig `json:"groupConfig,omitempty"`
79-
Image string `json:"image,omitempty"`
80-
ImagePullPolicy string `json:"imagePullPolicy,omitempty"`
81-
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
82-
Storage *Storage `json:"storage,omitempty"`
83-
Service Service `json:"service,omitempty"`
84-
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
85-
Affinity *corev1.Affinity `json:"affinity,omitempty"`
86-
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
87-
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
88-
PriorityClassName string `json:"priorityClassName,omitempty"`
89-
HugePages *HugePages `json:"hugePages,omitempty"`
90-
LogCollection *LogCollection `json:"logCollection,omitempty"`
91-
HAProxy *HAProxy `json:"haproxy,omitempty"`
92-
IsBootstrap bool `json:"isBootstrap,omitempty"`
93-
Tls *Tls `json:"tls,omitempty"`
94-
AdditionalVolumes *[]corev1.Volume `json:"additionalVolumes,omitempty"`
95-
AdditionalVolumeMounts *[]corev1.VolumeMount `json:"additionalVolumeMounts,omitempty"`
77+
Replicas *int32 `json:"replicas,omitempty"`
78+
Name string `json:"name,omitempty"`
79+
GroupConfig *GroupConfig `json:"groupConfig,omitempty"`
80+
Image string `json:"image,omitempty"`
81+
ImagePullPolicy string `json:"imagePullPolicy,omitempty"`
82+
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
83+
Persistence *Persistence `json:"persistence,omitempty"`
84+
Service Service `json:"service,omitempty"`
85+
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
86+
Affinity *corev1.Affinity `json:"affinity,omitempty"`
87+
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
88+
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
89+
PriorityClassName string `json:"priorityClassName,omitempty"`
90+
HugePages *HugePages `json:"hugePages,omitempty"`
91+
LogCollection *LogCollection `json:"logCollection,omitempty"`
92+
HAProxy *HAProxy `json:"haproxy,omitempty"`
93+
IsBootstrap bool `json:"isBootstrap,omitempty"`
94+
Tls *Tls `json:"tls,omitempty"`
95+
AdditionalVolumes *[]corev1.Volume `json:"additionalVolumes,omitempty"`
96+
AdditionalVolumeMounts *[]corev1.VolumeMount `json:"additionalVolumeMounts,omitempty"`
97+
AdditionalVolumeClaimTemplates *[]corev1.PersistentVolumeClaim `json:"additionalVolumeClaimTemplates,omitempty"`
9698
}
9799

98100
type Tls struct {

api/v1alpha1/marklogicgroup_types.go

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -30,61 +30,50 @@ type MarklogicGroupSpec struct {
3030
// +kubebuilder:default:=1
3131
Replicas *int32 `json:"replicas,omitempty"`
3232
Name string `json:"name,omitempty"`
33-
3433
// +kubebuilder:default:="cluster.local"
3534
ClusterDomain string `json:"clusterDomain,omitempty"`
36-
3735
// +kubebuilder:default:="progressofficial/marklogic-db:11.3.0-ubi-rootless"
3836
Image string `json:"image"`
3937
// +kubebuilder:default:="IfNotPresent"
40-
ImagePullPolicy string `json:"imagePullPolicy,omitempty"`
41-
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
42-
43-
Auth *AdminAuth `json:"auth,omitempty"`
44-
Storage *Storage `json:"storage,omitempty"`
45-
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
46-
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"`
38+
ImagePullPolicy string `json:"imagePullPolicy,omitempty"`
39+
ImagePullSecrets []corev1.LocalObjectReference `json:"imagePullSecrets,omitempty"`
40+
Auth *AdminAuth `json:"auth,omitempty"`
41+
Persistence *Persistence `json:"persistence,omitempty"`
42+
Resources *corev1.ResourceRequirements `json:"resources,omitempty"`
43+
TerminationGracePeriodSeconds *int64 `json:"terminationGracePeriodSeconds,omitempty"`
4744
// +kubebuilder:validation:Enum=OnDelete;RollingUpdate
4845
// +kubebuilder:default:="OnDelete"
4946
UpdateStrategy appsv1.StatefulSetUpdateStrategyType `json:"updateStrategy,omitempty"`
5047
NetworkPolicy NetworkPolicy `json:"networkPolicy,omitempty"`
5148
// +kubebuilder:default:={fsGroup: 2, fsGroupChangePolicy: "OnRootMismatch"}
5249
PodSecurityContext *corev1.PodSecurityContext `json:"podSecurityContext,omitempty"`
5350
// +kubebuilder:default:={runAsUser: 1000, runAsNonRoot: true, allowPrivilegeEscalation: false}
54-
ContainerSecurityContext *corev1.SecurityContext `json:"securityContext,omitempty"`
55-
51+
ContainerSecurityContext *corev1.SecurityContext `json:"securityContext,omitempty"`
5652
Affinity *corev1.Affinity `json:"affinity,omitempty"`
5753
NodeSelector map[string]string `json:"nodeSelector,omitempty"`
5854
TopologySpreadConstraints []corev1.TopologySpreadConstraint `json:"topologySpreadConstraints,omitempty"`
5955
PriorityClassName string `json:"priorityClassName,omitempty"`
60-
6156
// +kubebuilder:default:={enabled: false, mountPath: "/dev/hugepages"}
6257
HugePages *HugePages `json:"hugePages,omitempty"`
63-
6458
// +kubebuilder:default:={enabled: true, initialDelaySeconds: 30, timeoutSeconds: 5, periodSeconds: 30, successThreshold: 1, failureThreshold: 3}
6559
LivenessProbe ContainerProbe `json:"livenessProbe,omitempty"`
6660
// +kubebuilder:default:={enabled: false, initialDelaySeconds: 10, timeoutSeconds: 5, periodSeconds: 30, successThreshold: 1, failureThreshold: 3}
6761
ReadinessProbe ContainerProbe `json:"readinessProbe,omitempty"`
68-
6962
// +kubebuilder:default:={enabled: false, image: "fluent/fluent-bit:3.2.5", resources: {requests: {cpu: "100m", memory: "200Mi"}, limits: {cpu: "200m", memory: "500Mi"}}, files: {errorLogs: true, accessLogs: true, requestLogs: true}, outputs: "stdout"}
7063
LogCollection *LogCollection `json:"logCollection,omitempty"`
71-
7264
// +kubebuilder:default:={name: "Default", enableXdqpSsl: true}
73-
GroupConfig *GroupConfig `json:"groupConfig,omitempty"`
74-
License *License `json:"license,omitempty"`
75-
EnableConverters bool `json:"enableConverters,omitempty"`
76-
77-
BootstrapHost string `json:"bootstrapHost,omitempty"`
78-
79-
DoNotDelete *bool `json:"doNotDelete,omitempty"`
80-
81-
Service Service `json:"service,omitempty"`
82-
PathBasedRouting bool `json:"pathBasedRouting,omitempty"`
83-
84-
AdditionalVolumes *[]corev1.Volume `json:"additionalVolumes,omitempty"`
85-
AdditionalVolumeMounts *[]corev1.VolumeMount `json:"additionalVolumeMounts,omitempty"`
86-
SecretName string `json:"secretName,omitempty"`
87-
Tls *Tls `json:"tls,omitempty"`
65+
GroupConfig *GroupConfig `json:"groupConfig,omitempty"`
66+
License *License `json:"license,omitempty"`
67+
EnableConverters bool `json:"enableConverters,omitempty"`
68+
BootstrapHost string `json:"bootstrapHost,omitempty"`
69+
DoNotDelete *bool `json:"doNotDelete,omitempty"`
70+
Service Service `json:"service,omitempty"`
71+
PathBasedRouting bool `json:"pathBasedRouting,omitempty"`
72+
AdditionalVolumes *[]corev1.Volume `json:"additionalVolumes,omitempty"`
73+
AdditionalVolumeMounts *[]corev1.VolumeMount `json:"additionalVolumeMounts,omitempty"`
74+
AdditionalVolumeClaimTemplates *[]corev1.PersistentVolumeClaim `json:"additionalVolumeClaimTemplates,omitempty"`
75+
SecretName string `json:"secretName,omitempty"`
76+
Tls *Tls `json:"tls,omitempty"`
8877
}
8978

9079
// InternalState defines the observed state of MarklogicGroup

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 69 additions & 25 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)