mas-cli 10.8.0__py3-none-any.whl → 10.9.1__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.
- mas/cli/__init__.py +1 -1
- mas/cli/cli.py +89 -3
- mas/cli/install/app.py +72 -43
- mas/cli/install/argBuilder.py +367 -0
- mas/cli/install/argParser.py +26 -6
- mas/cli/install/settings/additionalConfigs.py +3 -4
- mas/cli/install/settings/manageSettings.py +17 -9
- mas/cli/install/settings/turbonomicSettings.py +5 -1
- mas/cli/install/summarizer.py +13 -0
- mas/cli/templates/ibm-mas-tekton.yaml +126 -729
- mas/cli/uninstall/app.py +2 -0
- mas/cli/update/app.py +11 -8
- mas/cli/upgrade/app.py +2 -0
- {mas_cli-10.8.0.dist-info → mas_cli-10.9.1.dist-info}/METADATA +1 -1
- {mas_cli-10.8.0.dist-info → mas_cli-10.9.1.dist-info}/RECORD +18 -17
- {mas_cli-10.8.0.dist-info → mas_cli-10.9.1.dist-info}/WHEEL +1 -1
- {mas_cli-10.8.0.data → mas_cli-10.9.1.data}/scripts/mas-cli +0 -0
- {mas_cli-10.8.0.dist-info → mas_cli-10.9.1.dist-info}/top_level.txt +0 -0
|
@@ -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
|
mas/cli/install/argParser.py
CHANGED
|
@@ -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-
|
|
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
|
-
|
|
688
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
self.
|
|
60
|
-
|
|
61
|
-
|
|
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", "
|
|
107
|
-
self.promptForString("Indexspace", "
|
|
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.
|
|
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")
|
mas/cli/install/summarizer.py
CHANGED
|
@@ -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()
|