mas-cli 10.8.0__py3-none-any.whl → 10.9.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mas-cli might be problematic. Click here for more details.

@@ -0,0 +1,367 @@
1
+ # *****************************************************************************
2
+ # Copyright (c) 2024 IBM Corporation and other Contributors.
3
+ #
4
+ # All rights reserved. This program and the accompanying materials
5
+ # are made available under the terms of the Eclipse Public License v1.0
6
+ # which accompanies this distribution, and is available at
7
+ # http://www.eclipse.org/legal/epl-v10.html
8
+ #
9
+ # *****************************************************************************
10
+
11
+ import logging
12
+
13
+ logger = logging.getLogger(__name__)
14
+
15
+ class installArgBuilderMixin():
16
+ def buildCommand(self) -> str:
17
+ # MAS Catalog Selection & Entitlement
18
+ # -----------------------------------------------------------------------------
19
+ newline = " \\\n"
20
+ command = "export IBM_ENTITLEMENT_KEY=x\n"
21
+ if self.getParam('ibmcloud_apikey') != "":
22
+ command += "export IBMCLOUD_APIKEY=x\n"
23
+ if self.getParam('aws_access_key_id') != "":
24
+ command += "export AWS_ACCESS_KEY_ID=x\n"
25
+ if self.getParam('secret_access_key') != "":
26
+ command += "export SECRET_ACCESS_KEY=x\n"
27
+ if self.getParam('artifactory_username') != "":
28
+ command += "export ARTIFACTORY_USERNAME=x\nexport ARTIFACTORY_TOKEN=x\n"
29
+
30
+ if self.getParam('mas_superuser_password') != "":
31
+ command += "export SUPERUSER_PASSWORD=x\n"
32
+
33
+ if self.getParam('eck_remote_es_password') != "":
34
+ command += "export ES_PASSWORD=x\n"
35
+ if self.getParam('kafka_password') != "":
36
+ command += "export KAFKA_PASSWORD=x\n"
37
+
38
+ if self.getParam('mas_app_settings_customization_archive_password') != "":
39
+ command += "export CUSTOMIZATION_PASSWORD=x\n"
40
+ if self.getParam('mas_app_settings_crypto_key') != "":
41
+ command += "export CRYPTO_KEY=x\n"
42
+ if self.getParam('mas_app_settings_cryptox_key') != "":
43
+ command += "export CRYPTOX_KEY=x\n"
44
+ if self.getParam('mas_app_settings_old_crypto_key') != "":
45
+ command += "export OLD_CRYPTO_KEY=x\n"
46
+ if self.getParam('mas_app_settings_old_cryptox_key') != "":
47
+ command += "export OLD_CRYTPOX_KEY=x\n"
48
+
49
+ command += f"mas install --mas-catalog-version {self.getParam('mas_catalog_version')}"
50
+
51
+ if self.getParam('mas_catalog_digest') != "":
52
+ command += f" --mas-catalog-digest {self.getParam('mas_catalog_digest')}"
53
+
54
+ command += f" --ibm-entitlement-key $IBM_ENTITLEMENT_KEY{newline}"
55
+
56
+ # MAS Basic Configuration
57
+ # -----------------------------------------------------------------------------
58
+ command += f" --mas-channel {self.getParam('mas_channel')}"
59
+ command += f" --mas-instance-id {self.getParam('mas_instance_id')}"
60
+ command += f" --mas-workspace-id {self.getParam('mas_workspace_id')}"
61
+ command += f" --mas-workspace-name \"{self.getParam('mas_workspace_name')}\"{newline}"
62
+
63
+ # ECK Integration
64
+ # -----------------------------------------------------------------------------
65
+ if self.getParam('eck_action') == "install":
66
+ command += "--eck"
67
+ if self.getParam('eck_enable_logstash') == "true":
68
+ command += f"--eck-enable-logstash{newline}"
69
+ if self.getParam('eck_remote_es_hosts') != "":
70
+ command += f"--eck-remote-es-hosts \"{self.getParam('eck_remote_es_hosts')}\"{newline}"
71
+ if self.getParam('eck_remote_es_username') != "":
72
+ command += f"--eck-remote-es-username \"{self.getParam('eck_remote_es_username')}\""
73
+ if self.getParam('eck_remote_es_password') != "":
74
+ command += f"--eck-remote-es-password $ES_PASSWORD{newline}"
75
+
76
+ # MAS Advanced Configuration
77
+ # -----------------------------------------------------------------------------
78
+ if self.getParam('mas_superuser_username') != "":
79
+ command += f" --mas-superuser-username \"{self.getParam('mas_superuser_username')}\""
80
+ if self.getParam('mas_superuser_password') != "":
81
+ command += f" --mas-superuser-password $SUPERUSER_PASSWORD{newline}"
82
+
83
+ if self.localConfigDir is not None:
84
+ command += f" --additional-configs \"{self.localConfigDir}\"{newline}"
85
+ if self.getParam('pod_templates') != "":
86
+ command += f" --pod-templates \"{self.getParam('pod_templates')}\"{newline}"
87
+
88
+ if self.operationalMode == 2:
89
+ command += f" --non-prod{newline}"
90
+
91
+ if self.getParam('mas_trust_default_cas') == "false":
92
+ command += f" --disable-ca-trust{newline}"
93
+
94
+ if self.getParam('mas_manual_cert_mgmt') == True:
95
+ command += f" --manual-certificates \"{self.getParam('mas_manual_cert_dir')}\"{newline}"
96
+
97
+ if self.getParam('mas_enable_walkme') == "false":
98
+ command += f" --disable-walkme{newline}"
99
+
100
+ # Storage
101
+ # -----------------------------------------------------------------------------
102
+ command += f" --storage-class-rwo \"{self.getParam('storage_class_rwo')}\""
103
+ command += f" --storage-class-rwx \"{self.getParam('storage_class_rwx')}\"{newline}"
104
+ command += f" --storage-pipeline \"{self.pipelineStorageClass}\""
105
+ command += f" --storage-accessmode \"{self.pipelineStorageAccessMode}\"{newline}"
106
+
107
+ # IBM Suite License Service
108
+ # -----------------------------------------------------------------------------
109
+ command += f" --license-file \"{self.slsLicenseFileLocal}\"{newline}"
110
+
111
+ # IBM Data Reporting Operator (DRO)
112
+ # -----------------------------------------------------------------------------
113
+ command += f" --uds-email \"{self.getParam('uds_contact_email')}\""
114
+ command += f" --uds-firstname \"{self.getParam('uds_contact_firstname')}\""
115
+ command += f" --uds-lastname \"{self.getParam('uds_contact_lastname')}\"{newline}"
116
+ if self.getParam('dro_namespace') != "":
117
+ command += f" --dro-namespace \"{self.getParam('dro_namespace')}\"{newline}"
118
+
119
+ # MongoDb Community Operator
120
+ # -----------------------------------------------------------------------------
121
+ if self.getParam('mongodb_namespace') != "":
122
+ command += f" --mongodb-namespace \"{self.getParam('mongodb_namespace')}\"{newline}"
123
+
124
+ # OCP Configuration
125
+ # -----------------------------------------------------------------------------
126
+ if self.getParam('ocp_ingress_tls_secret_name') != "":
127
+ command += f" --ocp-ingress-tls-secret-name \"{self.getParam('ocp_ingress_tls_secret_name')}\"{newline}"
128
+
129
+ # MAS Applications
130
+ # -----------------------------------------------------------------------------
131
+ if self.installAssist:
132
+ command += f" --assist-channel \"{self.getParam('mas_app_channel_assist')}\"{newline}"
133
+ if self.installIoT:
134
+ command += f" --iot-channel \"{self.getParam('mas_app_channel_iot')}\"{newline}"
135
+ if self.installMonitor:
136
+ command += f" --monitor-channel \"{self.getParam('mas_app_channel_monitor')}\"{newline}"
137
+ if self.installManage:
138
+ command += f" --manage-channel \"{self.getParam('mas_app_channel_manage')}\"{newline}"
139
+ if self.installOptimizer:
140
+ command += f" --optimizer-channel \"{self.getParam('mas_app_channel_optimizer')}\""
141
+ command += f" --optimizer-plan \"{self.getParam('mas_app_plan_optimizer')}\"{newline}"
142
+ if self.installPredict:
143
+ command += f" --predict-channel \"{self.getParam('mas_app_channel_predict')}\"{newline}"
144
+ if self.installInspection:
145
+ command += f" --visualinspection-channel \"{self.getParam('mas_app_channel_visualinspection')}\"{newline}"
146
+
147
+ # Arcgis
148
+ # -----------------------------------------------------------------------------
149
+ # TODO: Add ArcGis after we have properly fixed how it's installed
150
+
151
+ # Manage Advanced Settings
152
+ # -----------------------------------------------------------------------------
153
+ if self.installManage:
154
+ command += f" --manage-jdbc \"{self.getParam('mas_appws_bindings_jdbc_manage')}\"{newline}"
155
+ command += f" --manage-components \"{self.getParam('mas_appws_components')}\"{newline}"
156
+
157
+ if self.getParam('mas_app_settings_server_bundles_size') != "":
158
+ command += f" --manage-server-bundle-size \"{self.getParam('mas_app_settings_server_bundles_size')}\"{newline}"
159
+ if self.getParam('mas_app_settings_default_jms') != "":
160
+ command += f" --manage-jms \"{self.getParam('mas_app_settings_default_jms')}\"{newline}"
161
+ if self.getParam('mas_app_settings_persistent_volumes_flag') == "true":
162
+ command += f" --manage-persistent-volumes{newline}"
163
+ if self.getParam('mas_app_settings_demodata') == "true":
164
+ command += f" --manage-demodata{newline}"
165
+
166
+ if self.getParam('mas_app_settings_customization_archive_name') != "":
167
+ command += f" --manage-customization-archive-name \"{self.getParam('mas_app_settings_customization_archive_name')}\"{newline}"
168
+ if self.getParam('mas_app_settings_customization_archive_url') != "":
169
+ command += f" --manage-customization-archive-url \"{self.getParam('mas_app_settings_customization_archive_url')}\"{newline}"
170
+ if self.getParam('mas_app_settings_customization_archive_username') != "":
171
+ command += f" --manage-customization-archive-username \"{self.getParam('mas_app_settings_customization_archive_username')}\"{newline}"
172
+ if self.getParam('mas_app_settings_customization_archive_password') != "":
173
+ command += f" --manage-customization-archive-password $CUSTOMIZATION_PASSWORD{newline}"
174
+
175
+ if self.getParam('mas_app_settings_tablespace') != "":
176
+ command += f" --manage-db-tablespace \"{self.getParam('mas_app_settings_tablespace')}\"{newline}"
177
+ if self.getParam('mas_app_settings_indexspace') != "":
178
+ command += f" --manage-db-indexspace \"{self.getParam('mas_app_settings_indexspace')}\"{newline}"
179
+ if self.getParam('mas_app_settings_db2_schema') != "":
180
+ command += f" --manage-db-schema \"{self.getParam('mas_app_settings_db2_schema')}\"{newline}"
181
+
182
+ if self.getParam('mas_app_settings_crypto_key') != "":
183
+ command += f" --manage-crypto-key $CRYPTO_KEY{newline}"
184
+ if self.getParam('mas_app_settings_cryptox_key') != "":
185
+ command += f" --manage-cryptox-key $CRYPTOX_KEY{newline}"
186
+ if self.getParam('mas_app_settings_old_crypto_key') != "":
187
+ command += f" --manage-old-crypto-key $OLD_CRYPTO_KEY{newline}"
188
+ if self.getParam('mas_app_settings_old_cryptox_key') != "":
189
+ command += f" --manage-old-cryptox-key $OLD_CRYPTOX_KEY{newline}"
190
+ if self.getParam('mas_app_settings_override_encryption_secrets_flag') == "true":
191
+ command += f" --manage-override-encryption-secrets \"{newline}"
192
+
193
+ if self.getParam('mas_app_settings_base_lang') != "":
194
+ command += f" --manage-base-language \"{self.getParam('mas_app_settings_base_lang')}\"{newline}"
195
+ if self.getParam('mas_app_settings_secondary_langs') != "":
196
+ command += f" --manage-secondary-languages \"{self.getParam('mas_app_settings_secondary_langs')}\"{newline}"
197
+
198
+ if self.getParam('mas_app_settings_server_timezone') != "":
199
+ command += f" --manage-server-timezone \"{self.getParam('mas_app_settings_server_timezone')}\"{newline}"
200
+
201
+ # IBM Cloud Pak for Data
202
+ # -----------------------------------------------------------------------------
203
+ if self.getParam('cpd_product_version') != "":
204
+ command += f" --cp4d-version \"{self.getParam('cpd_product_version')}\""
205
+ if self.getParam('cpd_install_spss') == "install":
206
+ command += f" --cp4d-install-spss"
207
+ if self.getParam('cpd_install_openscale') == "install":
208
+ command += f" --cp4d-install-openscal"
209
+ if self.getParam('cpd_install_cognos') == "install":
210
+ command += f" --cp4d-install-cognos"
211
+ command += newline
212
+
213
+ # IBM Db2 Universal Operator
214
+ # -----------------------------------------------------------------------------
215
+ if self.getParam('db2_system') == "install" or self.getParam('db2_manage') == "install":
216
+ if self.getParam('db2_system') == "install":
217
+ command += f" --db2-system{newline}"
218
+ if self.getParam('db2_manage') == "install":
219
+ command += f" --db2-manage{newline}"
220
+
221
+ if self.getParam('db2_channel') != "":
222
+ command += f" --db2-channel \"{self.getParam('db2_channel')}\"{newline}"
223
+ if self.getParam('db2_namespace') != "":
224
+ command += f" --db2-namespace \"{self.getParam('db2_namespace')}\"{newline}"
225
+
226
+ if self.getParam('db2_type') != "":
227
+ command += f" --db2-type \"{self.getParam('db2_type')}\"{newline}"
228
+ if self.getParam('db2_timezone') != "":
229
+ command += f" --db2-timezone \"{self.getParam('db2_timezone')}\"{newline}"
230
+
231
+ if self.getParam('db2_affinity_key') != "":
232
+ command += f" --db2-affinity-key \"{self.getParam('db2_affinity_key')}\"{newline}"
233
+ if self.getParam('db2_affinity_value') != "":
234
+ command += f" --db2-affinity_value \"{self.getParam('db2_affinity_value')}\"{newline}"
235
+
236
+ if self.getParam('db2_tolerate_key') != "":
237
+ command += f" --db2-tolerate-key \"{self.getParam('db2_tolerate_key')}\"{newline}"
238
+ if self.getParam('db2_tolerate_value') != "":
239
+ command += f" --db2-tolerate-value \"{self.getParam('db2_tolerate_value')}\"{newline}"
240
+ if self.getParam('db2_tolerate_effect') != "":
241
+ command += f" --db2-tolerate-effect \"{self.getParam('db2_tolerate_effect')}\"{newline}"
242
+
243
+ if self.getParam('db2_cpu_requests') != "":
244
+ command += f" --db2-cpu-requests \"{self.getParam('db2_cpu_requests')}\"{newline}"
245
+ if self.getParam('db2_cpu_limits') != "":
246
+ command += f" --db2-cpu-limits \"{self.getParam('db2_cpu_limits')}\"{newline}"
247
+
248
+ if self.getParam('db2_memory_requests') != "":
249
+ command += f" --db2-memory-requests \"{self.getParam('db2_memory_requests')}\"{newline}"
250
+ if self.getParam('db2_memory_limits') != "":
251
+ command += f" --db2-memory-limits \"{self.getParam('db2_memory_limits')}\"{newline}"
252
+
253
+ if self.getParam('db2_backup_storage_size') != "":
254
+ command += f" --db2-backup-storage \"{self.getParam('db2_backup_storage_size')}\"{newline}"
255
+ if self.getParam('db2_data_storage_size') != "":
256
+ command += f" --db2-data-storage \"{self.getParam('db2_data_storage_size')}\"{newline}"
257
+ if self.getParam('db2_logs_storage_size') != "":
258
+ command += f" --db2-logs-storage \"{self.getParam('db2_logs_storage_size')}\"{newline}"
259
+ if self.getParam('db2_meta_storage_size') != "":
260
+ command += f" --db2-meta-storage \"{self.getParam('db2_meta_storage_size')}\"{newline}"
261
+ if self.getParam('db2_temp_storage_size') != "":
262
+ command += f" --db2-temp-storage \"{self.getParam('db2_temp_storage_size')}\"{newline}"
263
+
264
+ # Kafka - Common
265
+ # -----------------------------------------------------------------------------
266
+ if self.getParam('kafka_provider') != "":
267
+ command += f" --kafka-provider \"{self.getParam('kafka_provider')}\"{newline}"
268
+
269
+ if self.getParam('kafka_username') != "":
270
+ command += f" --kafka-username \"{self.getParam('kafka_username')}\"{newline}"
271
+ if self.getParam('kafka_password') != "":
272
+ command += f" --kafka-password $KAFKA_PASSWORD{newline}"
273
+
274
+ # Kafka - Strimzi & AMQ Streams
275
+ # -----------------------------------------------------------------------------
276
+ if self.getParam('kafka_namespace') != "":
277
+ command += f" --kafka-namespace \"{self.getParam('kafka_namespace')}\"{newline}"
278
+ if self.getParam('kafka_version') != "":
279
+ command += f" --kafka-version \"{self.getParam('kafka_version')}\"{newline}"
280
+
281
+ # Kafka - MSK
282
+ # -----------------------------------------------------------------------------
283
+ if self.getParam('aws_msk_instance_type') != "":
284
+ command += f" --msk-instance-type \"{self.getParam('aws_msk_instance_type')}\""
285
+ command += f" --msk-instance-nodes \"{self.getParam('aws_msk_instance_nodes')}\""
286
+ command += f" --msk-instance-volume-size \"{self.getParam('aws_msk_instance_volume_size')}\"{newline}"
287
+
288
+ command += f" --msk-cidr-az1 \"{self.getParam('aws_msk_cidr_az1')}\""
289
+ command += f" --msk-cidr-az2 \"{self.getParam('aws_msk_cidr_az1')}\""
290
+ command += f" --msk-cidr-az3 \"{self.getParam('aws_msk_cidr_az1')}\"{newline}"
291
+
292
+ command += f" --msk-cidr-egress \"{self.getParam('aws_msk_egress_cidr')}\""
293
+ command += f" --msk-cidr-ingress \"{self.getParam('aws_msk_ingress_cidr')}\"{newline}"
294
+
295
+ # Kafka - Event Streams
296
+ # -----------------------------------------------------------------------------
297
+ if self.getParam('eventstreams_instance_name') != "":
298
+ command += f" --eventstreams-resource-group \"{self.getParam('eventstreams_resource_group')}\""
299
+ command += f" --eventstreams-instance-name \"{self.getParam('eventstreams_instance_name')}\""
300
+ command += f" --eventstreams-instance-location \"{self.getParam('eventstreams_instance_location')}\"{newline}"
301
+
302
+ # COS
303
+ # -----------------------------------------------------------------------------
304
+ if self.getParam('cos_type') != "":
305
+ command += f" --cos \"{self.getParam('cos_type')}\""
306
+ if self.getParam('cos_resourcegroup') != "":
307
+ command += f" --cos-resourcegroup \"{self.getParam('cos_resourcegroup')}\""
308
+ command += newline
309
+
310
+ # Turbonomic Integration
311
+ # -----------------------------------------------------------------------------
312
+ if self.getParam('turbonomic_target_name') != "":
313
+ command += f" --turbonomic-name \"{self.getParam('turbonomic_target_name')}\""
314
+ command += f" --turbonomic-url \"{self.getParam('turbonomic_server_url')}\""
315
+ command += f" --turbonomic-version \"{self.getParam('turbonomic_server_version')}\""
316
+ command += f" --turbonomic-username \"{self.getParam('turbonomic_username')}\""
317
+ command += f" --turbonomic-password \"{self.getParam('turbonomic_password')}\"{newline}"
318
+
319
+ # Cloud Providers
320
+ # -----------------------------------------------------------------------------
321
+ if self.getParam('ibmcloud_apikey') != "":
322
+ command += f" --ibmcloud-apikey $IBMCLOUD_APIKEY{newline}"
323
+
324
+ if self.getParam('aws_access_key_id') != "":
325
+ command += f" --aws-access-key-id $AWS_ACCESS_KEY_ID{newline}"
326
+ if self.getParam('secret_access_key') != "":
327
+ command += f" --secret-access-key $SECRET_ACCESS_KEY{newline}"
328
+ command += f" --aws-region \"{self.getParam('aws_region')}\""
329
+ command += f" --aws-vpc-id \"{self.getParam('aws_vpc_id')}\""
330
+
331
+ # Development Mode
332
+ # -----------------------------------------------------------------------------
333
+ if self.getParam('artifactory_username') != "":
334
+ command += f" --artifactory-username $ARTIFACTORY_USERNAME --artifactory-token $ARTIFACTORY_TOKEN{newline}"
335
+
336
+ # Approvals
337
+ # -----------------------------------------------------------------------------
338
+ if self.getParam('approval_core') != "":
339
+ command += f" --approval-core \"{self.getParam('approval_core')}\"{newline}"
340
+ if self.getParam('approval_assist') != "":
341
+ command += f" --approval-assist \"{self.getParam('approval_assist')}\"{newline}"
342
+ if self.getParam('approval_iot') != "":
343
+ command += f" --approval-iot \"{self.getParam('approval_iot')}\"{newline}"
344
+ if self.getParam('approval_manage') != "":
345
+ command += f" --approval-manage \"{self.getParam('approval_manage')}\"{newline}"
346
+ if self.getParam('approval_monitor') != "":
347
+ command += f" --approval-monitor \"{self.getParam('approval_monitor')}\"{newline}"
348
+ if self.getParam('approval_optimizer') != "":
349
+ command += f" --approval-optimizer \"{self.getParam('approval_optimizer')}\"{newline}"
350
+ if self.getParam('approval_predict') != "":
351
+ command += f" --approval-predict \"{self.getParam('approval_predict')}\"{newline}"
352
+ if self.getParam('approval_visualinspection') != "":
353
+ command += f" --approval-visualinspection \"{self.getParam('approval_visualinspection')}\"{newline}"
354
+
355
+ # More Options
356
+ # -----------------------------------------------------------------------------
357
+ if self.devMode:
358
+ command += f" --dev-mode{newline}"
359
+ if not self.waitForPVC:
360
+ command += f" --no-wait-for-pvc{newline}"
361
+ if self.getParam('skip_pre_check') == True:
362
+ command += f" --skip-pre-check{newline}"
363
+ if self.getParam('skip_grafana_install') == True:
364
+ command += f" --skip-grafana-install{newline}"
365
+
366
+ command += " --accept-license --no-confirm"
367
+ return command
@@ -41,6 +41,11 @@ catArgGroup.add_argument(
41
41
  required=False,
42
42
  help="IBM Maximo Operator Catalog to install"
43
43
  )
44
+ catArgGroup.add_argument(
45
+ "--mas-catalog-digest",
46
+ required=False,
47
+ help="IBM Maximo Operator Catalog Digest, only required when installing development catalog sources"
48
+ )
44
49
  catArgGroup.add_argument(
45
50
  "--ibm-entitlement-key",
46
51
  required=False,
@@ -464,7 +469,7 @@ cpdAppsArgGroup.add_argument(
464
469
  const="install"
465
470
  )
466
471
  cpdAppsArgGroup.add_argument(
467
- "--cp4d-installopenscale",
472
+ "--cp4d-install-openscale",
468
473
  dest="cpd_install_openscale",
469
474
  required=False,
470
475
  help="Add Watson Openscale as part of Cloud Pak for Data",
@@ -595,7 +600,6 @@ db2ArgGroup.add_argument(
595
600
  help="Customize Db2 storage capacity"
596
601
  )
597
602
 
598
-
599
603
  # Kafka - Common
600
604
  # -----------------------------------------------------------------------------
601
605
  kafkaCommonArgGroup = installArgParser.add_argument_group("Kafka - Common")
@@ -684,23 +688,39 @@ mskArgGroup.add_argument(
684
688
 
685
689
  # Kafka - Event Streams
686
690
  # -----------------------------------------------------------------------------
687
- mskArgGroup = installArgParser.add_argument_group("Kafka - Event Streams")
688
- mskArgGroup.add_argument(
691
+ eventstreamsArgGroup = installArgParser.add_argument_group("Kafka - Event Streams")
692
+ eventstreamsArgGroup.add_argument(
689
693
  "--eventstreams-resource-group",
690
694
  required=False,
691
695
  help="Set IBM Cloud resource group to target the Event Streams instance provisioning"
692
696
  )
693
- mskArgGroup.add_argument(
697
+ eventstreamsArgGroup.add_argument(
694
698
  "--eventstreams-instance-name",
695
699
  required=False,
696
700
  help="Set IBM Event Streams instance name"
697
701
  )
698
- mskArgGroup.add_argument(
702
+ eventstreamsArgGroup.add_argument(
699
703
  "--eventstreams-instance-location",
700
704
  required=False,
701
705
  help="Set IBM Event Streams instance location"
702
706
  )
703
707
 
708
+ # COS
709
+ # -----------------------------------------------------------------------------
710
+ cosArgGroup = installArgParser.add_argument_group("Cloud Object Storage")
711
+ cosArgGroup.add_argument(
712
+ "--cos",
713
+ dest="cos_type",
714
+ required=False,
715
+ help="Set cloud object storage provider. Supported options are `ibm` and `ocs`",
716
+ choices=["ibm", "ocs"]
717
+ )
718
+ cosArgGroup.add_argument(
719
+ "--cos-resourcegroup",
720
+ required=False,
721
+ help="When using IBM COS, set the resource group where the instance will run"
722
+ )
723
+
704
724
  # Turbonomic Integration
705
725
  # -----------------------------------------------------------------------------
706
726
  turboArgGroup = installArgParser.add_argument_group("Turbonomic Integration")
@@ -161,16 +161,16 @@ class AdditionalConfigsMixin():
161
161
  },
162
162
  "mas_app_channel_optimizer": {
163
163
  "dir": self.getParam("mas_manual_cert_dir") + "/optimizer/",
164
- "keyPrefix": "optimizer."
164
+ "keyPrefix": "optimizer."
165
165
  }
166
166
  }
167
-
167
+
168
168
  for file in ["ca.crt", "tls.crt", "tls.key"]:
169
169
  if file not in map(path.basename, glob(f'{self.getParam("mas_manual_cert_dir")}/core/*')):
170
170
  self.fatalError(f'{file} is not present in {self.getParam("mas_manual_cert_dir")}/core/')
171
171
  for ext in extensions:
172
172
  certsSecret = self.addFilesToSecret(certsSecret, self.getParam("mas_manual_cert_dir")+'/core/', ext, "core.")
173
-
173
+
174
174
  for app in apps:
175
175
  if self.getParam(app) != "":
176
176
  for file in ["ca.crt", "tls.crt", "tls.key"]:
@@ -181,7 +181,6 @@ class AdditionalConfigsMixin():
181
181
 
182
182
  self.certsSecret = certsSecret
183
183
 
184
-
185
184
  def addFilesToSecret(self, secretDict: dict, configPath: str, extension: str, keyPrefix: str='') -> dict:
186
185
  """
187
186
  Add file (or files) to pipeline-additional-configs
@@ -52,13 +52,21 @@ class ManageSettingsMixin():
52
52
  self.manageSettingsCustomizationArchive()
53
53
  self.manageSettingsOther()
54
54
 
55
- self.setParam("mas_app_settings_doclinks_pvc_storage_class", self.getParam("storage_class_rwx"))
56
- self.setParam("mas_app_settings_bim_pvc_storage_class", self.getParam("storage_class_rwx"))
57
- self.setParam("mas_app_settings_jms_queue_pvc_storage_class", self.getParam("storage_class_rwx"))
58
-
59
- self.setParam("mas_app_settings_doclinks_pvc_accessmode", "ReadWriteMany")
60
- self.setParam("mas_app_settings_bim_pvc_accessmode", "ReadWriteMany")
61
- self.setParam("mas_app_settings_jms_queue_pvc_accessmode", "ReadWriteMany")
55
+ # Default to RWX storage classes, but fall back to RWO in SNO or when user
56
+ # has chosen not to provide a RWX storage class
57
+ storageClass = self.getParam("storage_class_rwx")
58
+ accessMode = "ReadWriteMany"
59
+ if self.isSNO() or self.getParam("storage_class_rwx") == "none":
60
+ storageClass = self.getParam("storage_class_rwo")
61
+ accessMode = "ReadWriteOnce"
62
+
63
+ self.setParam("mas_app_settings_doclinks_pvc_storage_class", storageClass)
64
+ self.setParam("mas_app_settings_bim_pvc_storage_class", storageClass)
65
+ self.setParam("mas_app_settings_jms_queue_pvc_storage_class", storageClass)
66
+
67
+ self.setParam("mas_app_settings_doclinks_pvc_accessmode", accessMode)
68
+ self.setParam("mas_app_settings_bim_pvc_accessmode", accessMode)
69
+ self.setParam("mas_app_settings_jms_queue_pvc_accessmode", accessMode)
62
70
 
63
71
  def manageSettingsComponents(self) -> None:
64
72
  self.printH2("Maximo Manage Components")
@@ -103,8 +111,8 @@ class ManageSettingsMixin():
103
111
 
104
112
  if self.yesOrNo("Customize database settings"):
105
113
  self.promptForString("Schema", "mas_app_settings_db2_schema", default="maximo")
106
- self.promptForString("Tablespace", "mas_app_settings_db2_tablespace", default="MAXDATA")
107
- self.promptForString("Indexspace", "mas_app_settings_db2_indexspace", default="MAXINDEX")
114
+ self.promptForString("Tablespace", "mas_app_settings_tablespace", default="MAXDATA")
115
+ self.promptForString("Indexspace", "mas_app_settings_indexspace", default="MAXINDEX")
108
116
 
109
117
  if self.yesOrNo("Customize database encryption settings"):
110
118
  self.promptForString("MXE_SECURITY_CRYPTO_KEY", "mas_app_settings_crypto_key")
@@ -8,6 +8,8 @@
8
8
  #
9
9
  # *****************************************************************************
10
10
 
11
+ from mas.devops.mas import isAirgapInstall
12
+
11
13
  class TurbonomicSettingsMixin():
12
14
 
13
15
  def configTurbonomic(self) -> None:
@@ -17,7 +19,9 @@ class TurbonomicSettingsMixin():
17
19
  " - Learn more: <u>https://www.ibm.com/products/turbonomic</u>"
18
20
  ])
19
21
 
20
- if self.yesOrNo("Configure IBM Turbonomic integration"):
22
+ if isAirgapInstall(self.dynamicClient):
23
+ self.printHighlight("The Turbonomic Kubernetes Operator does not support disconnected installation at this time")
24
+ elif self.yesOrNo("Configure IBM Turbonomic integration"):
21
25
  self.promptForString("Turbonomic Target Name", "turbonomic_target_name")
22
26
  self.promptForString("Turbonomic Server URL", "turbonomic_server_url")
23
27
  self.promptForString("Turbonomic Server Version", "turbonomic_server_version")
@@ -86,6 +86,9 @@ class InstallSummarizerMixin():
86
86
 
87
87
  print()
88
88
  self.printParamSummary("Catalog Version", "mas_catalog_version")
89
+ # We only list the digest if it's specified (primary use case is when running development builds in airgap environments)
90
+ if self.getParam("mas_catalog_digest" != ""):
91
+ self.printParamSummary("Catalog Digest", "mas_catalog_digest")
89
92
  self.printParamSummary("Subscription Channel", "mas_channel")
90
93
 
91
94
  print()
@@ -246,6 +249,15 @@ class InstallSummarizerMixin():
246
249
  self.printSummary("License File", self.slsLicenseFileLocal)
247
250
  self.printParamSummary("IBM Open Registry", "sls_icr_cpopen")
248
251
 
252
+ def cosSummary(self) -> None:
253
+ self.printH2("Cloud Object Storage")
254
+ if self.getParam("cos_type") != "":
255
+ self.printParamSummary("Type", "cos_type")
256
+ if self.getParam("cos_resourcegroup") != "":
257
+ self.printParamSummary("Resource Group", "cos_resourcegroup")
258
+ else:
259
+ self.printSummary("Type", "None")
260
+
249
261
  def eckSummary(self) -> None:
250
262
  self.printH2("Elastic Cloud on Kubernetes")
251
263
  if self.getParam("eck_action") == "install":
@@ -333,6 +345,7 @@ class InstallSummarizerMixin():
333
345
  # Application Dependencies
334
346
  self.mongoSummary()
335
347
  self.db2Summary()
348
+ self.cosSummary()
336
349
  self.kafkaSummary()
337
350
  self.cp4dSummary()
338
351
  self.grafanaSummary()