Skip to content

Commit beba6c2

Browse files
Make OPENSEARCH_HOME configurable
1 parent ccf6161 commit beba6c2

6 files changed

Lines changed: 115 additions & 61 deletions

File tree

rust/operator-binary/src/controller/build/role_group_builder.rs

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ const DATA_VOLUME_NAME: &str = "data";
4141
const LISTENER_VOLUME_NAME: &str = "listener";
4242
const LISTENER_VOLUME_DIR: &str = "/stackable/listener";
4343

44-
// Path in opensearchproject/opensearch:3.0.0
45-
const OPENSEARCH_BASE_PATH: &str = "/stackable/opensearch";
44+
const DEFAULT_OPENSEARCH_HOME: &str = "/stackable/opensearch";
4645

4746
pub struct RoleGroupBuilder<'a> {
4847
service_account_name: String,
@@ -271,26 +270,40 @@ impl<'a> RoleGroupBuilder<'a> {
271270
..Probe::default()
272271
};
273272

273+
let env_vars = self.node_config.environment_variables();
274+
275+
// Use `OPENSEARCH_HOME` from envOverrides or default to `DEFAULT_OPENSEARCH_HOME`.
276+
let opensearch_home = env_vars
277+
.get_env_var("OPENSEARCH_HOME")
278+
.and_then(|env_var| env_var.value.clone())
279+
.unwrap_or(DEFAULT_OPENSEARCH_HOME.to_owned());
280+
// Use `OPENSEARCH_PATH_CONF` from envOverrides or default to `{OPENSEARCH_HOME}/config`,
281+
// i.e. depend on `OPENSEARCH_HOME`.
282+
let opensearch_path_conf = env_vars
283+
.get_env_var("OPENSEARCH_PATH_CONF")
284+
.and_then(|env_var| env_var.value.clone())
285+
.unwrap_or(format!("{opensearch_home}/config"));
286+
274287
ContainerBuilder::new("opensearch")
275288
.expect("should be a valid container name")
276289
.image_from_product_image(&product_image)
277290
.command(vec![format!(
278-
"{OPENSEARCH_BASE_PATH}/opensearch-docker-entrypoint.sh"
291+
"{opensearch_home}/opensearch-docker-entrypoint.sh"
279292
)])
280293
.args(role_group_config.cli_overrides_to_vec())
281-
.add_env_vars(self.node_config.environment_variables().into())
294+
.add_env_vars(env_vars.into())
282295
.add_volume_mounts([
283296
VolumeMount {
284297
mount_path: format!(
285-
"{OPENSEARCH_BASE_PATH}/config/{CONFIGURATION_FILE_OPENSEARCH_YML}"
298+
"{opensearch_path_conf}/{CONFIGURATION_FILE_OPENSEARCH_YML}"
286299
),
287300
name: CONFIG_VOLUME_NAME.to_owned(),
288301
read_only: Some(true),
289302
sub_path: Some(CONFIGURATION_FILE_OPENSEARCH_YML.to_owned()),
290303
..VolumeMount::default()
291304
},
292305
VolumeMount {
293-
mount_path: format!("{OPENSEARCH_BASE_PATH}/data"),
306+
mount_path: format!("{opensearch_home}/data"),
294307
name: DATA_VOLUME_NAME.to_owned(),
295308
..VolumeMount::default()
296309
},

rust/operator-binary/src/framework/builder/pod/container.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,22 @@ impl EnvVarSet {
1616
Self::default()
1717
}
1818

19+
pub fn get_env_var(&self, env_var_name: impl Into<EnvVarName>) -> Option<&EnvVar> {
20+
self.0.get(&env_var_name.into())
21+
}
22+
23+
pub fn add_env_var(mut self, env_var: EnvVar) -> Self {
24+
self.0.insert(env_var.name.clone(), env_var);
25+
26+
self
27+
}
28+
29+
pub fn merge(mut self, mut env_var_set: EnvVarSet) -> Self {
30+
self.0.append(&mut env_var_set.0);
31+
32+
self
33+
}
34+
1935
pub fn with_values<I, K, V>(self, env_vars: I) -> Self
2036
where
2137
I: IntoIterator<Item = (K, V)>,

tests/templates/kuttl/external-access/opensearch.yaml.j2

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ metadata:
55
name: opensearch
66
spec:
77
image:
8-
productVersion: 3.1.0
8+
{% if test_scenario['values']['opensearch'].find(",") > 0 %}
9+
custom: "{{ test_scenario['values']['opensearch'].split(',')[1] }}"
10+
productVersion: "{{ test_scenario['values']['opensearch'].split(',')[0] }}"
11+
{% else %}
12+
productVersion: "{{ test_scenario['values']['opensearch'] }}"
13+
{% endif %}
914
pullPolicy: IfNotPresent
1015
nodes:
1116
roleGroups:
@@ -57,6 +62,7 @@ spec:
5762
envOverrides:
5863
# TODO Make these the defaults in the image
5964
DISABLE_INSTALL_DEMO_CONFIG: "true"
65+
OPENSEARCH_HOME: {{ test_scenario['values']['opensearch_home'] }}
6066
configOverrides:
6167
# TODO Add the required options to the operator
6268
opensearch.yml:
@@ -66,24 +72,25 @@ spec:
6672
# TODO Check that this is safe despite the warning in the documentation
6773
plugins.security.allow_default_init_securityindex: "true"
6874
plugins.security.ssl.transport.enabled: "true"
69-
plugins.security.ssl.transport.pemcert_filepath: /stackable/opensearch/config/tls/tls.crt
70-
plugins.security.ssl.transport.pemkey_filepath: /stackable/opensearch/config/tls/tls.key
71-
plugins.security.ssl.transport.pemtrustedcas_filepath: /stackable/opensearch/config/tls/ca.crt
75+
plugins.security.ssl.transport.pemcert_filepath: {{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.crt
76+
plugins.security.ssl.transport.pemkey_filepath: {{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.key
77+
plugins.security.ssl.transport.pemtrustedcas_filepath: {{ test_scenario['values']['opensearch_home'] }}/config/tls/ca.crt
7278
plugins.security.ssl.http.enabled: "true"
73-
plugins.security.ssl.http.pemcert_filepath: /stackable/opensearch/config/tls/tls.crt
74-
plugins.security.ssl.http.pemkey_filepath: /stackable/opensearch/config/tls/tls.key
75-
plugins.security.ssl.http.pemtrustedcas_filepath: /stackable/opensearch/config/tls/ca.crt
79+
plugins.security.ssl.http.pemcert_filepath: {{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.crt
80+
plugins.security.ssl.http.pemkey_filepath: {{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.key
81+
plugins.security.ssl.http.pemtrustedcas_filepath: {{ test_scenario['values']['opensearch_home'] }}/config/tls/ca.crt
7682
plugins.security.authcz.admin_dn: "CN=generated certificate for pod"
7783
podOverrides:
7884
spec:
7985
containers:
8086
- name: opensearch
8187
volumeMounts:
8288
- name: security-config
83-
mountPath: /stackable/opensearch/config/opensearch-security
89+
mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/opensearch-security
8490
readOnly: true
8591
- name: tls
86-
mountPath: /stackable/opensearch/config/tls
92+
# The Java policy allows reading from ${OPENSEARCH_HOME}/config.
93+
mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/tls
8794
readOnly: true
8895
securityContext:
8996
fsGroup: 1000

tests/templates/kuttl/smoke/10-assert.yaml renamed to tests/templates/kuttl/smoke/10-assert.yaml.j2

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ metadata:
1616
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
1717
app.kubernetes.io/name: opensearch
1818
app.kubernetes.io/role-group: cluster-manager
19-
app.kubernetes.io/version: 3.1.0
19+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
2020
stackable.tech/vendor: Stackable
2121
name: opensearch-nodes-cluster-manager
2222
ownerReferences:
@@ -42,7 +42,7 @@ spec:
4242
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
4343
app.kubernetes.io/name: opensearch
4444
app.kubernetes.io/role-group: cluster-manager
45-
app.kubernetes.io/version: 3.1.0
45+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
4646
stackable.tech/opensearch-role.cluster_manager: "true"
4747
stackable.tech/vendor: Stackable
4848
spec:
@@ -59,10 +59,12 @@ spec:
5959
weight: 1
6060
containers:
6161
- command:
62-
- /stackable/opensearch/opensearch-docker-entrypoint.sh
62+
- {{ test_scenario['values']['opensearch_home'] }}/opensearch-docker-entrypoint.sh
6363
env:
6464
- name: DISABLE_INSTALL_DEMO_CONFIG
6565
value: "true"
66+
- name: OPENSEARCH_HOME
67+
value: {{ test_scenario['values']['opensearch_home'] }}
6668
- name: cluster.initial_cluster_manager_nodes
6769
value: opensearch-nodes-cluster-manager-0,opensearch-nodes-cluster-manager-1,opensearch-nodes-cluster-manager-2
6870
- name: discovery.seed_hosts
@@ -74,7 +76,6 @@ spec:
7476
fieldPath: metadata.name
7577
- name: node.roles
7678
value: cluster_manager
77-
image: oci.stackable.tech/sdp/opensearch:3.1.0-stackable0.0.0-dev
7879
imagePullPolicy: IfNotPresent
7980
name: opensearch
8081
ports:
@@ -107,18 +108,18 @@ spec:
107108
port: http
108109
timeoutSeconds: 3
109110
volumeMounts:
110-
- mountPath: /stackable/opensearch/config/opensearch.yml
111+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/opensearch.yml
111112
name: config
112113
readOnly: true
113114
subPath: opensearch.yml
114-
- mountPath: /stackable/opensearch/data
115+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/data
115116
name: data
116117
- mountPath: /stackable/listener
117118
name: listener
118-
- mountPath: /stackable/opensearch/config/opensearch-security
119+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/opensearch-security
119120
name: security-config
120121
readOnly: true
121-
- mountPath: /stackable/opensearch/config/tls
122+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/tls
122123
name: tls
123124
readOnly: true
124125
securityContext:
@@ -175,7 +176,7 @@ spec:
175176
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
176177
app.kubernetes.io/name: opensearch
177178
app.kubernetes.io/role-group: cluster-manager
178-
app.kubernetes.io/version: 3.1.0
179+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
179180
stackable.tech/vendor: Stackable
180181
name: listener
181182
spec:
@@ -201,7 +202,7 @@ metadata:
201202
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
202203
app.kubernetes.io/name: opensearch
203204
app.kubernetes.io/role-group: data
204-
app.kubernetes.io/version: 3.1.0
205+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
205206
stackable.tech/vendor: Stackable
206207
name: opensearch-nodes-data
207208
ownerReferences:
@@ -227,7 +228,7 @@ spec:
227228
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
228229
app.kubernetes.io/name: opensearch
229230
app.kubernetes.io/role-group: data
230-
app.kubernetes.io/version: 3.1.0
231+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
231232
stackable.tech/opensearch-role.data: "true"
232233
stackable.tech/opensearch-role.ingest: "true"
233234
stackable.tech/opensearch-role.remote_cluster_client: "true"
@@ -246,10 +247,12 @@ spec:
246247
weight: 1
247248
containers:
248249
- command:
249-
- /stackable/opensearch/opensearch-docker-entrypoint.sh
250+
- {{ test_scenario['values']['opensearch_home'] }}/opensearch-docker-entrypoint.sh
250251
env:
251252
- name: DISABLE_INSTALL_DEMO_CONFIG
252253
value: "true"
254+
- name: OPENSEARCH_HOME
255+
value: {{ test_scenario['values']['opensearch_home'] }}
253256
- name: cluster.initial_cluster_manager_nodes
254257
- name: discovery.seed_hosts
255258
value: opensearch
@@ -260,7 +263,6 @@ spec:
260263
fieldPath: metadata.name
261264
- name: node.roles
262265
value: ingest,data,remote_cluster_client
263-
image: oci.stackable.tech/sdp/opensearch:3.1.0-stackable0.0.0-dev
264266
imagePullPolicy: IfNotPresent
265267
name: opensearch
266268
ports:
@@ -293,18 +295,18 @@ spec:
293295
port: http
294296
timeoutSeconds: 3
295297
volumeMounts:
296-
- mountPath: /stackable/opensearch/config/opensearch.yml
298+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/opensearch.yml
297299
name: config
298300
readOnly: true
299301
subPath: opensearch.yml
300-
- mountPath: /stackable/opensearch/data
302+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/data
301303
name: data
302304
- mountPath: /stackable/listener
303305
name: listener
304-
- mountPath: /stackable/opensearch/config/opensearch-security
306+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/opensearch-security
305307
name: security-config
306308
readOnly: true
307-
- mountPath: /stackable/opensearch/config/tls
309+
- mountPath: {{ test_scenario['values']['opensearch_home'] }}/config/tls
308310
name: tls
309311
readOnly: true
310312
securityContext:
@@ -361,7 +363,7 @@ spec:
361363
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
362364
app.kubernetes.io/name: opensearch
363365
app.kubernetes.io/role-group: data
364-
app.kubernetes.io/version: 3.1.0
366+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
365367
stackable.tech/vendor: Stackable
366368
name: listener
367369
spec:
@@ -387,7 +389,7 @@ metadata:
387389
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
388390
app.kubernetes.io/name: opensearch
389391
app.kubernetes.io/role-group: cluster-manager
390-
app.kubernetes.io/version: 3.1.0
392+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
391393
stackable.tech/vendor: Stackable
392394
name: opensearch-nodes-cluster-manager
393395
ownerReferences:
@@ -405,13 +407,13 @@ data:
405407
plugins.security.authcz.admin_dn: "CN=generated certificate for pod"
406408
plugins.security.nodes_dn: ["CN=generated certificate for pod"]
407409
plugins.security.ssl.http.enabled: "true"
408-
plugins.security.ssl.http.pemcert_filepath: "/stackable/opensearch/config/tls/tls.crt"
409-
plugins.security.ssl.http.pemkey_filepath: "/stackable/opensearch/config/tls/tls.key"
410-
plugins.security.ssl.http.pemtrustedcas_filepath: "/stackable/opensearch/config/tls/ca.crt"
410+
plugins.security.ssl.http.pemcert_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.crt"
411+
plugins.security.ssl.http.pemkey_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.key"
412+
plugins.security.ssl.http.pemtrustedcas_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/ca.crt"
411413
plugins.security.ssl.transport.enabled: "true"
412-
plugins.security.ssl.transport.pemcert_filepath: "/stackable/opensearch/config/tls/tls.crt"
413-
plugins.security.ssl.transport.pemkey_filepath: "/stackable/opensearch/config/tls/tls.key"
414-
plugins.security.ssl.transport.pemtrustedcas_filepath: "/stackable/opensearch/config/tls/ca.crt"
414+
plugins.security.ssl.transport.pemcert_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.crt"
415+
plugins.security.ssl.transport.pemkey_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.key"
416+
plugins.security.ssl.transport.pemtrustedcas_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/ca.crt"
415417
---
416418
apiVersion: v1
417419
kind: ConfigMap
@@ -422,7 +424,7 @@ metadata:
422424
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
423425
app.kubernetes.io/name: opensearch
424426
app.kubernetes.io/role-group: data
425-
app.kubernetes.io/version: 3.1.0
427+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
426428
stackable.tech/vendor: Stackable
427429
name: opensearch-nodes-data
428430
ownerReferences:
@@ -440,13 +442,13 @@ data:
440442
plugins.security.authcz.admin_dn: "CN=generated certificate for pod"
441443
plugins.security.nodes_dn: ["CN=generated certificate for pod"]
442444
plugins.security.ssl.http.enabled: "true"
443-
plugins.security.ssl.http.pemcert_filepath: "/stackable/opensearch/config/tls/tls.crt"
444-
plugins.security.ssl.http.pemkey_filepath: "/stackable/opensearch/config/tls/tls.key"
445-
plugins.security.ssl.http.pemtrustedcas_filepath: "/stackable/opensearch/config/tls/ca.crt"
445+
plugins.security.ssl.http.pemcert_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.crt"
446+
plugins.security.ssl.http.pemkey_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.key"
447+
plugins.security.ssl.http.pemtrustedcas_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/ca.crt"
446448
plugins.security.ssl.transport.enabled: "true"
447-
plugins.security.ssl.transport.pemcert_filepath: "/stackable/opensearch/config/tls/tls.crt"
448-
plugins.security.ssl.transport.pemkey_filepath: "/stackable/opensearch/config/tls/tls.key"
449-
plugins.security.ssl.transport.pemtrustedcas_filepath: "/stackable/opensearch/config/tls/ca.crt"
449+
plugins.security.ssl.transport.pemcert_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.crt"
450+
plugins.security.ssl.transport.pemkey_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/tls.key"
451+
plugins.security.ssl.transport.pemtrustedcas_filepath: "{{ test_scenario['values']['opensearch_home'] }}/config/tls/ca.crt"
450452
---
451453
apiVersion: v1
452454
kind: Service
@@ -457,7 +459,7 @@ metadata:
457459
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
458460
app.kubernetes.io/name: opensearch
459461
app.kubernetes.io/role-group: cluster-manager
460-
app.kubernetes.io/version: 3.1.0
462+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
461463
stackable.tech/vendor: Stackable
462464
name: opensearch-nodes-cluster-manager-headless
463465
spec:
@@ -487,7 +489,7 @@ metadata:
487489
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
488490
app.kubernetes.io/name: opensearch
489491
app.kubernetes.io/role-group: data
490-
app.kubernetes.io/version: 3.1.0
492+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
491493
stackable.tech/vendor: Stackable
492494
name: opensearch-nodes-data-headless
493495
spec:
@@ -516,7 +518,7 @@ metadata:
516518
app.kubernetes.io/instance: opensearch
517519
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
518520
app.kubernetes.io/name: opensearch
519-
app.kubernetes.io/version: 3.1.0
521+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
520522
stackable.tech/vendor: Stackable
521523
name: opensearch
522524
ownerReferences:
@@ -550,7 +552,7 @@ metadata:
550552
app.kubernetes.io/instance: opensearch
551553
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
552554
app.kubernetes.io/name: opensearch
553-
app.kubernetes.io/version: 3.1.0
555+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
554556
stackable.tech/vendor: Stackable
555557
name: opensearch-serviceaccount
556558
ownerReferences:
@@ -567,7 +569,7 @@ metadata:
567569
app.kubernetes.io/instance: opensearch
568570
app.kubernetes.io/managed-by: opensearch.stackable.tech_opensearchcluster
569571
app.kubernetes.io/name: opensearch
570-
app.kubernetes.io/version: 3.1.0
572+
app.kubernetes.io/version: {{ test_scenario['values']['opensearch'].split(',')[0] }}
571573
stackable.tech/vendor: Stackable
572574
name: opensearch-rolebinding
573575
ownerReferences:

0 commit comments

Comments
 (0)