Skip to content

Commit 9660518

Browse files
Merge branch 'stable' into airgapenvtest
2 parents a0542b8 + 058ad9f commit 9660518

File tree

8 files changed

+181
-29
lines changed

8 files changed

+181
-29
lines changed

.secrets.baseline

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"files": "^.secrets.baseline$",
44
"lines": null
55
},
6-
"generated_at": "2024-11-24T13:39:40Z",
6+
"generated_at": "2025-02-28T10:11:51Z",
77
"plugins_used": [
88
{
99
"name": "AWSKeyDetector"

bin/mas-devops-db2-validate-config

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ if __name__ == "__main__":
2727
# Primary Options
2828
parser.add_argument("--mas-instance-id", required=True)
2929
parser.add_argument("--mas-app-id", required=True)
30+
parser.add_argument("--database-role", default='primary', required=False)
3031
parser.add_argument("--log-level", required=False, choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"], default="WARNING")
3132

3233
args, unknown = parser.parse_known_args()
@@ -47,5 +48,6 @@ if __name__ == "__main__":
4748
validate_db2_config(
4849
client.api_client.ApiClient(),
4950
args.mas_instance_id,
50-
args.mas_app_id
51+
args.mas_app_id,
52+
args.database_role
5153
)

src/mas/devops/data/catalogs/v9-250206-amd64.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ mongo_extras_version_7: 7.0.12
9595
# Extra Images for Db2u
9696
# ------------------------------------------------------------------------------
9797
db2u_extras_version: 1.0.6 # No Update
98-
98+
db2u_filter: db2
9999
# Extra Images for IBM Watson Discovery
100100
# ------------------------------------------------------------------------------
101101
#wd_extras_version: 1.0.4
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
---
2+
# Case bundle configuration for IBM Maximo Operator Catalog 250206
3+
# -----------------------------------------------------------------------------
4+
# In the future this won't be necessary as we'll be able to mirror from the
5+
# catalog itself, but not everything in the catalog supports this yet (including MAS)
6+
# so we need to use the CASE bundle mirror process still.
7+
8+
catalog_digest: sha256:d2ffdec7d99dd4b0027d151b36b08b97efd58a1203bd0874fe782ad497198419
9+
10+
# Dependencies
11+
# -----------------------------------------------------------------------------
12+
ibm_licensing_version: 4.2.11 # Operator version 4.2.11 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-licensing)
13+
common_svcs_version: 4.7.0 # check once why we have 4.3.0 in all previous versions since so long it's 4.3.0 # Operator version 4.3.1 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-cp-common-services)
14+
common_svcs_version_2: 4.8.0
15+
common_svcs_version_1: 4.3.0 #+20240702.100000 # common_svcs is a mess
16+
17+
cp4d_platform_version: 5.0.0 #+20240716.101015 # Operator version 5.0.0 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-cp-datacore/4.0.0%2B20231213.115030)
18+
19+
ibm_zen_version: 6.0.1+20240708.121250.32 # For CPD5 ibm-zen has to be explicitily mirrored
20+
21+
db2u_version: 6.0.1+20240704.142950.9960 # Operator version 110509.0.2 to find the version 6.0.1, search CASE_VERSION in db2u, catalog.yaml into ibm-maximo-operator-catalog (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-db2uoperator)
22+
events_version: 5.0.1 # Operator version 5.0.1 (https://github.com/IBM/cloud-pak/tree/master/repo/case/ibm-events-operator)
23+
uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change
24+
sls_version: 3.11.1 # Updated # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases)
25+
tsm_version: 1.6.1 # No Update # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases)
26+
dd_version: 1.1.16 # Updated # Operator version 1.1.14 (https://github.ibm.com/maximoappsuite/ibm-data-dictionary/releases)
27+
appconnect_version: 6.2.0 # Operator version 6.2.0 # sticking to 6.2.0 version # Please do Not Change
28+
wsl_version: 9.0.0 # Operator version 9.0.0
29+
wml_version: 9.0.0 # Operator version 5.0.0
30+
# ccs_build: +20240528.144404.460 # ibm-ccs from version 9.0.0 requires the build version
31+
# datarefinery_build: +20240517.202103.146
32+
spark_version: 9.0.0 # Operator version 5.0.0
33+
cognos_version: 25.0.0 # Operator version 25.0.0
34+
# couchdb_version: 1.0.14 # Operator version 2.2.1 (This is required for Assist 9.0, https://github.com/IBM/cloud-pak/blob/master/repo/case/ibm-couchdb/index.yaml)
35+
elasticsearch_version: 1.1.2470 # Operator version 1.1.2470
36+
37+
38+
# Maximo Application Suite
39+
# -----------------------------------------------------------------------------
40+
mas_core_version:
41+
9.1.x-feature: 9.1.0-pre.stable_8193 # Updated
42+
9.0.x: 9.0.9 # Updated
43+
8.10.x: 8.10.23 # Updated
44+
8.11.x: 8.11.20 # Updated
45+
mas_assist_version:
46+
9.0.x: 9.0.4 # Updated
47+
8.10.x: 8.7.8 # No Update
48+
8.11.x: 8.8.7 # No Update
49+
mas_hputilities_version:
50+
9.0.x: "" # Not Supported
51+
8.10.x: 8.6.7 # tbc
52+
8.11.x: "" # Not Supported
53+
mas_iot_version:
54+
9.0.x: 9.0.6 # Updated
55+
8.10.x: 8.7.20 # Updated
56+
8.11.x: 8.8.16 # Updated
57+
mas_manage_version:
58+
9.1.x-feature: 9.1.0-pre.stable_9992 # Updated
59+
9.0.x: 9.0.10 # Updated
60+
8.10.x: 8.6.23 # Updated
61+
8.11.x: 8.7.17 # Updated
62+
mas_monitor_version:
63+
9.0.x: 9.0.7 # Updated
64+
8.10.x: 8.10.17 # Updated
65+
8.11.x: 8.11.15 # Updated
66+
mas_optimizer_version:
67+
9.1.x-feature: 9.1.0-pre.stable_1813 # Updated
68+
9.0.x: 9.0.8 # Updated
69+
8.10.x: 8.4.15 # Updated
70+
8.11.x: 8.5.14 # Updated
71+
mas_predict_version:
72+
9.0.x: 9.0.5 # Updated
73+
8.10.x: 8.8.6 # Updated
74+
8.11.x: 8.9.8 # Updated
75+
mas_visualinspection_version:
76+
9.1.x-feature: 9.1.0-pre.stable_2246 # Updated
77+
9.0.x: 9.0.7 # Updated
78+
8.10.x: 8.8.4 # No Update
79+
8.11.x: 8.9.10 # Updated
80+
81+
# Extra Images for UDS
82+
# ------------------------------------------------------------------------------
83+
uds_extras_version: 1.5.0
84+
85+
# Extra Images for Mongo
86+
# ------------------------------------------------------------------------------
87+
mongo_extras_version_default: 7.0.12
88+
89+
# Variables used to mirror additional mongo image versions
90+
mongo_extras_version_4: 4.4.21
91+
mongo_extras_version_5: 5.0.23
92+
mongo_extras_version_6: 6.0.12
93+
mongo_extras_version_7: 7.0.12
94+
95+
# Extra Images for Db2u
96+
# ------------------------------------------------------------------------------
97+
db2u_extras_version: 1.0.6 # No Update
98+
db2u_filter: db2
99+
100+
# Extra Images for IBM Watson Discovery
101+
# ------------------------------------------------------------------------------
102+
#wd_extras_version: 1.0.4
103+
104+
# Extra Images for Amlen
105+
# ------------------------------------------------------------------------------
106+
amlen_extras_version: 1.1.2
107+
108+
# Default Cloud Pak for Data version
109+
# ------------------------------------------------------------------------------
110+
cpd_product_version_default: 5.0.0
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
# Case bundle configuration for IBM Maximo Operator Catalog 250206
3+
# -----------------------------------------------------------------------------
4+
# In the future this won't be necessary as we'll be able to mirror from the
5+
# catalog itself, but not everything in the catalog supports this yet (including MAS)
6+
# so we need to use the CASE bundle mirror process still.
7+
8+
catalog_digest: sha256:a9f4a2a8aa4ec25b68ff6a1592c0773f730564a833b14eef5585a077e37c203a
9+
10+
uds_version: 2.0.12 # Operator version 2.0.12 # sticking to 2.0.12 version # Please do Not Change
11+
sls_version: 3.11.1 # Updated # Operator version 3.10.0 (https://github.ibm.com/maximoappsuite/ibm-sls/releases)
12+
tsm_version: 1.6.1 # No Update # Operator version 1.5.4 (https://github.ibm.com/maximoappsuite/ibm-truststore-mgr/releases)
13+
14+
15+
# Maximo Application Suite
16+
# -----------------------------------------------------------------------------
17+
mas_core_version:
18+
9.1.x-feature: 9.1.0-pre.stable_8193 # Updated
19+
9.0.x: 9.0.8 # tbc
20+
8.10.x: "" # Not Supported
21+
8.11.x: "" # Not Supported
22+
mas_manage_version:
23+
9.1.x-feature: 9.1.0-pre.stable_9992 # Updated
24+
9.0.x: 9.0.9 # tbc
25+
8.10.x: "" # Not Supported
26+
8.11.x: "" # Not Supported
27+
28+
# Extra Images for UDS
29+
# ------------------------------------------------------------------------------
30+
uds_extras_version: 1.5.0
31+
32+
# Extra Images for Mongo
33+
# ------------------------------------------------------------------------------
34+
mongo_extras_version_default: 7.0.12
35+
36+
# Variables used to mirror additional mongo image versions
37+
mongo_extras_version_4: 4.4.21
38+
mongo_extras_version_5: 5.0.23
39+
mongo_extras_version_6: 6.0.12
40+
mongo_extras_version_7: 7.0.12

src/mas/devops/db2.py

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
logger = logging.getLogger(__name__)
2222

2323

24-
def get_db2u_instance_cr(custom_objects_api: client.CustomObjectsApi, mas_instance_id: str, mas_app_id: str) -> dict:
25-
cr_name = f"db2wh-{mas_instance_id}-{mas_app_id}"
24+
def get_db2u_instance_cr(custom_objects_api: client.CustomObjectsApi, mas_instance_id: str, mas_app_id: str, database_role='primary') -> dict:
25+
cr_name = {'primary': f"db2wh-{mas_instance_id}-{mas_app_id}", 'standby': f"db2wh-{mas_instance_id}-{mas_app_id}-sdb"}[database_role]
2626
namespace = f"db2u-{mas_instance_id}"
2727
logger.debug(f"Getting Db2uInstance CR {cr_name} in {namespace}")
2828

@@ -37,25 +37,25 @@ def get_db2u_instance_cr(custom_objects_api: client.CustomObjectsApi, mas_instan
3737
return db2u_instance_cr
3838

3939

40-
def db2_pod_exec(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, command: list) -> str:
41-
pod_name = f"c-db2wh-{mas_instance_id}-{mas_app_id}-db2u-0"
40+
def db2_pod_exec(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, command: list, database_role='primary') -> str:
41+
pod_name = {'primary': f"c-db2wh-{mas_instance_id}-{mas_app_id}-db2u-0", 'standby': f"c-db2wh-{mas_instance_id}-{mas_app_id}-sdb-db2u-0"}[database_role]
4242
namespace = f"db2u-{mas_instance_id}"
4343
return execInPod(core_v1_api, pod_name, namespace, command)
4444

4545

46-
def db2_pod_exec_db2_get_db_cfg(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, db_name: str) -> str:
46+
def db2_pod_exec_db2_get_db_cfg(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, db_name: str, database_role='primary') -> str:
4747
command = ["su", "-lc", f"db2 get db cfg for {db_name}", "db2inst1"]
48-
return db2_pod_exec(core_v1_api, mas_instance_id, mas_app_id, command)
48+
return db2_pod_exec(core_v1_api, mas_instance_id, mas_app_id, command, database_role)
4949

5050

51-
def db2_pod_exec_db2_get_dbm_cfg(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str) -> str:
51+
def db2_pod_exec_db2_get_dbm_cfg(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, database_role='primary') -> str:
5252
command = ["su", "-lc", "db2 get dbm cfg", "db2inst1"]
53-
return db2_pod_exec(core_v1_api, mas_instance_id, mas_app_id, command)
53+
return db2_pod_exec(core_v1_api, mas_instance_id, mas_app_id, command, database_role)
5454

5555

56-
def db2_pod_exec_db2set(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str) -> str:
56+
def db2_pod_exec_db2set(core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, database_role='primary') -> str:
5757
command = ["su", "-lc", "db2set", "db2inst1"]
58-
return db2_pod_exec(core_v1_api, mas_instance_id, mas_app_id, command)
58+
return db2_pod_exec(core_v1_api, mas_instance_id, mas_app_id, command, database_role)
5959

6060

6161
def cr_pod_v_matches(cr_k: str, cr_v: str, pod_v: str) -> bool:
@@ -79,7 +79,7 @@ def cr_pod_v_matches(cr_k: str, cr_v: str, pod_v: str) -> bool:
7979
return pod_v == cr_v
8080

8181

82-
def check_db_cfgs(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str) -> list:
82+
def check_db_cfgs(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, database_role='primary') -> list:
8383
"""
8484
Runs check_db_cfg for each database in the provided Db2uInstance CR
8585
@@ -100,12 +100,12 @@ def check_db_cfgs(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_ins
100100

101101
# Check each db cfg
102102
for cr_db in db2u_instance_cr_databases:
103-
failures = [*failures, *check_db_cfg(cr_db, core_v1_api, mas_instance_id, mas_app_id)]
103+
failures = [*failures, *check_db_cfg(cr_db, core_v1_api, mas_instance_id, mas_app_id, database_role)]
104104

105105
return failures
106106

107107

108-
def check_db_cfg(db_dr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str) -> list:
108+
def check_db_cfg(db_dr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, database_role='primary') -> list:
109109
"""
110110
Check that the parameters in the provided db dict taken from the Db2uInstance CR align with those in the output of the
111111
db2 get db cfg command (i.e. the configuration that is actually active in DB2).
@@ -123,7 +123,7 @@ def check_db_cfg(db_dr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: st
123123
failures = []
124124

125125
db_name = db_dr["name"]
126-
db_cfg_pod = db2_pod_exec_db2_get_db_cfg(core_v1_api, mas_instance_id, mas_app_id, db_name)
126+
db_cfg_pod = db2_pod_exec_db2_get_db_cfg(core_v1_api, mas_instance_id, mas_app_id, db_name, database_role)
127127

128128
logger.info(f"Checking db cfg for {db_name}\n{H1_BREAK}")
129129

@@ -154,7 +154,7 @@ def check_db_cfg(db_dr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: st
154154
return failures
155155

156156

157-
def check_dbm_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str) -> list:
157+
def check_dbm_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, database_role='primary') -> list:
158158
"""
159159
Check that the database manager (dbmConfig) parameters from the Db2uInstance CR align with those in the output of the
160160
db2 get dbm cfg command (i.e. the configuration that is actually active in DB2).
@@ -178,7 +178,7 @@ def check_dbm_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_ins
178178
logger.info("spec.environment.instance.dbmConfig not found or empty, skipping dbm cfg checks\n")
179179
return []
180180

181-
dbm_cfg_pod = db2_pod_exec_db2_get_dbm_cfg(core_v1_api, mas_instance_id, mas_app_id)
181+
dbm_cfg_pod = db2_pod_exec_db2_get_dbm_cfg(core_v1_api, mas_instance_id, mas_app_id, database_role)
182182

183183
logger.debug(f"db2 dbm cfg output:\n{H2_BREAK}{dbm_cfg_pod}{H2_BREAK}")
184184
logger.debug(f"db2 dbm cr settings:\n{H2_BREAK}\n{yaml.dump(dbm_cfg_cr, sort_keys=False, default_flow_style=False)}{H2_BREAK}")
@@ -203,7 +203,7 @@ def check_dbm_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_ins
203203
return failures
204204

205205

206-
def check_reg_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str) -> list:
206+
def check_reg_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_instance_id: str, mas_app_id: str, database_role='primary') -> list:
207207
"""
208208
Check that the registry parameters from the Db2uInstance CR align with those in the output of the
209209
db2set command (i.e. the configuration that is actually active in DB2).
@@ -228,7 +228,7 @@ def check_reg_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_ins
228228
logger.info("spec.environment.instance.registry not found or empty, skipping registry cfg checks\n")
229229
return []
230230

231-
reg_cfg_pod = db2_pod_exec_db2set(core_v1_api, mas_instance_id, mas_app_id)
231+
reg_cfg_pod = db2_pod_exec_db2set(core_v1_api, mas_instance_id, mas_app_id, database_role)
232232

233233
logger.debug(f"db2set output:\n{H2_BREAK}{reg_cfg_pod}{H2_BREAK}")
234234
logger.debug(f"db2 cr registry settings:\n{H2_BREAK}\n{yaml.dump(reg_cfg_cr, sort_keys=False, default_flow_style=False)}{H2_BREAK}")
@@ -254,15 +254,15 @@ def check_reg_cfg(db2u_instance_cr: dict, core_v1_api: client.CoreV1Api, mas_ins
254254
return failures
255255

256256

257-
def validate_db2_config(k8s_client: client.api_client.ApiClient, mas_instance_id: str, mas_app_id: str):
257+
def validate_db2_config(k8s_client: client.api_client.ApiClient, mas_instance_id: str, mas_app_id: str, database_role='primary'):
258258

259259
core_v1_api = client.CoreV1Api(k8s_client)
260260
custom_objects_api = client.CustomObjectsApi(k8s_client)
261261

262-
db2u_instance_cr = get_db2u_instance_cr(custom_objects_api, mas_instance_id, mas_app_id)
263-
db_failures = check_db_cfgs(db2u_instance_cr, core_v1_api, mas_instance_id, mas_app_id)
264-
dbm_failures = check_dbm_cfg(db2u_instance_cr, core_v1_api, mas_instance_id, mas_app_id)
265-
reg_failures = check_reg_cfg(db2u_instance_cr, core_v1_api, mas_instance_id, mas_app_id)
262+
db2u_instance_cr = get_db2u_instance_cr(custom_objects_api, mas_instance_id, mas_app_id, database_role)
263+
db_failures = check_db_cfgs(db2u_instance_cr, core_v1_api, mas_instance_id, mas_app_id, database_role)
264+
dbm_failures = check_dbm_cfg(db2u_instance_cr, core_v1_api, mas_instance_id, mas_app_id, database_role)
265+
reg_failures = check_reg_cfg(db2u_instance_cr, core_v1_api, mas_instance_id, mas_app_id, database_role)
266266

267267
all_failures = [*db_failures, *dbm_failures, *reg_failures]
268268

test/src/test_data.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def test_list_catalogs():
2626
def test_get_newest_catalog_tag():
2727
catalogTag = getNewestCatalogTag("amd64")
2828
# Reminder: update this test when adding a new catalog each month!
29-
assert catalogTag == "v9-250206-amd64"
29+
assert catalogTag == "v9-250306-amd64"
3030

3131

3232
def test_get_newest_catalog_tag_fail():

test/src/test_db2.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ def test_check_db_cfgs(mocker):
101101
)
102102

103103
assert mock_check_db_cfg.call_args_list == [
104-
mocker.call(dict(name="a"), mock_core_v1_api, "mas_instance_id", "mas_app_id"),
105-
mocker.call(dict(name="b"), mock_core_v1_api, "mas_instance_id", "mas_app_id")
104+
mocker.call(dict(name="a"), mock_core_v1_api, "mas_instance_id", "mas_app_id", "primary"),
105+
mocker.call(dict(name="b"), mock_core_v1_api, "mas_instance_id", "mas_app_id", "primary")
106106
]
107107

108108

0 commit comments

Comments
 (0)