mas-cli 12.1.0__py3-none-any.whl → 12.27.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.
- mas/cli/__init__.py +1 -1
- mas/cli/aiservice/install/__init__.py +11 -0
- mas/cli/aiservice/install/app.py +810 -0
- mas/cli/aiservice/install/argBuilder.py +232 -0
- mas/cli/aiservice/install/argParser.py +742 -0
- mas/cli/aiservice/install/params.py +120 -0
- mas/cli/aiservice/install/summarizer.py +193 -0
- mas/cli/cli.py +36 -9
- mas/cli/gencfg.py +23 -0
- mas/cli/install/app.py +295 -85
- mas/cli/install/argBuilder.py +92 -14
- mas/cli/install/argParser.py +200 -147
- mas/cli/install/catalogs.py +11 -6
- mas/cli/install/params.py +32 -6
- mas/cli/install/settings/additionalConfigs.py +18 -1
- mas/cli/install/settings/db2Settings.py +121 -72
- mas/cli/install/settings/kafkaSettings.py +2 -2
- mas/cli/install/settings/manageSettings.py +154 -159
- mas/cli/install/settings/mongodbSettings.py +1 -1
- mas/cli/install/settings/turbonomicSettings.py +1 -3
- mas/cli/install/summarizer.py +85 -68
- mas/cli/templates/facilities-configs.yml.j2 +25 -0
- mas/cli/templates/ibm-mas-tekton.yaml +13428 -4725
- mas/cli/update/app.py +42 -8
- mas/cli/upgrade/app.py +52 -15
- mas/cli/upgrade/argParser.py +7 -0
- mas/cli/upgrade/settings/__init__.py +19 -0
- mas/cli/validators.py +13 -0
- {mas_cli-12.1.0.data → mas_cli-12.27.0.data}/scripts/mas-cli +5 -1
- {mas_cli-12.1.0.dist-info → mas_cli-12.27.0.dist-info}/METADATA +12 -3
- {mas_cli-12.1.0.dist-info → mas_cli-12.27.0.dist-info}/RECORD +33 -25
- {mas_cli-12.1.0.dist-info → mas_cli-12.27.0.dist-info}/WHEEL +1 -1
- {mas_cli-12.1.0.dist-info → mas_cli-12.27.0.dist-info}/top_level.txt +0 -0
mas/cli/install/params.py
CHANGED
|
@@ -29,6 +29,7 @@ requiredParams = [
|
|
|
29
29
|
optionalParams = [
|
|
30
30
|
# Pipeline
|
|
31
31
|
"image_pull_policy",
|
|
32
|
+
"service_account_name",
|
|
32
33
|
# OpenShift
|
|
33
34
|
"ocp_ingress_tls_secret_name",
|
|
34
35
|
# MAS
|
|
@@ -37,6 +38,7 @@ optionalParams = [
|
|
|
37
38
|
"mas_superuser_password",
|
|
38
39
|
"mas_trust_default_cas",
|
|
39
40
|
"mas_app_settings_server_bundles_size",
|
|
41
|
+
"is_full_manage",
|
|
40
42
|
"mas_app_settings_default_jms",
|
|
41
43
|
"mas_app_settings_persistent_volumes_flag",
|
|
42
44
|
"mas_app_settings_demodata",
|
|
@@ -57,7 +59,10 @@ optionalParams = [
|
|
|
57
59
|
"mas_app_settings_server_timezone",
|
|
58
60
|
"mas_appws_bindings_jdbc_manage",
|
|
59
61
|
"mas_appws_components",
|
|
62
|
+
"mas_appws_bindings_health_wsl_flag",
|
|
60
63
|
"mas_domain",
|
|
64
|
+
# IPV6
|
|
65
|
+
"enable_ipv6",
|
|
61
66
|
# SLS
|
|
62
67
|
"sls_namespace",
|
|
63
68
|
# DNS Providers
|
|
@@ -67,13 +72,13 @@ optionalParams = [
|
|
|
67
72
|
"cis_apikey",
|
|
68
73
|
"cis_crn",
|
|
69
74
|
"cis_subdomain",
|
|
75
|
+
"mas_cluster_issuer",
|
|
70
76
|
# DRO
|
|
71
77
|
"dro_namespace",
|
|
72
|
-
# MongoDb
|
|
73
|
-
"mongodb_namespace",
|
|
74
78
|
# Db2
|
|
75
79
|
"db2_action_system",
|
|
76
80
|
"db2_action_manage",
|
|
81
|
+
"db2_action_facilities",
|
|
77
82
|
"db2_type",
|
|
78
83
|
"db2_timezone",
|
|
79
84
|
"db2_namespace",
|
|
@@ -95,8 +100,10 @@ optionalParams = [
|
|
|
95
100
|
# CP4D
|
|
96
101
|
"cpd_product_version",
|
|
97
102
|
"cpd_install_cognos",
|
|
98
|
-
"cpd_install_openscale",
|
|
99
103
|
"cpd_install_spss",
|
|
104
|
+
"cpd_install_ws",
|
|
105
|
+
"cpd_install_wml",
|
|
106
|
+
"cpd_install_ae",
|
|
100
107
|
# Kafka
|
|
101
108
|
"kafka_namespace",
|
|
102
109
|
"kafka_version",
|
|
@@ -108,13 +115,18 @@ optionalParams = [
|
|
|
108
115
|
"aws_msk_cidr_az3",
|
|
109
116
|
"aws_msk_egress_cidr",
|
|
110
117
|
"aws_msk_ingress_cidr",
|
|
111
|
-
"
|
|
112
|
-
"
|
|
113
|
-
"
|
|
118
|
+
"eventstreams_resourcegroup",
|
|
119
|
+
"eventstreams_name",
|
|
120
|
+
"eventstreams_location",
|
|
114
121
|
# COS
|
|
115
122
|
"cos_type",
|
|
116
123
|
"cos_resourcegroup",
|
|
117
124
|
"cos_apikey",
|
|
125
|
+
"cos_instance_name",
|
|
126
|
+
"cos_bucket_name",
|
|
127
|
+
# Attachments
|
|
128
|
+
"mas_manage_attachments_provider",
|
|
129
|
+
"mas_manage_attachment_configuration_mode",
|
|
118
130
|
# ECK
|
|
119
131
|
"eck_action",
|
|
120
132
|
"eck_enable_logstash",
|
|
@@ -164,6 +176,20 @@ optionalParams = [
|
|
|
164
176
|
"mas_aibroker_db_secret_name",
|
|
165
177
|
"mas_aibroker_db_secret_key",
|
|
166
178
|
"mas_aibroker_db_secret_value",
|
|
179
|
+
# Facilities
|
|
180
|
+
"mas_ws_facilities_size",
|
|
181
|
+
"mas_ws_facilities_routes_timeout",
|
|
182
|
+
"mas_ws_facilities_liberty_extension_XML",
|
|
183
|
+
"mas_ws_facilities_vault_secret",
|
|
184
|
+
"mas_ws_facilities_pull_policy",
|
|
185
|
+
"mas_ws_facilities_storage_log_class",
|
|
186
|
+
"mas_ws_facilities_storage_log_mode",
|
|
187
|
+
"mas_ws_facilities_storage_log_size",
|
|
188
|
+
"mas_ws_facilities_storage_userfiles_class",
|
|
189
|
+
"mas_ws_facilities_storage_userfiles_mode",
|
|
190
|
+
"mas_ws_facilities_storage_userfiles_size",
|
|
191
|
+
"mas_ws_facilities_dwfagents",
|
|
192
|
+
"mas_ws_facilities_db_maxconnpoolsize",
|
|
167
193
|
# Special chars
|
|
168
194
|
"mas_special_characters"
|
|
169
195
|
]
|
|
@@ -89,7 +89,7 @@ class AdditionalConfigsMixin():
|
|
|
89
89
|
elif podTemplateChoice == 2:
|
|
90
90
|
self.setParam("mas_pod_templates_dir", path.join(self.templatesDir, "pod-templates", "best-effort"))
|
|
91
91
|
elif podTemplateChoice == 3:
|
|
92
|
-
self.promptForDir("Pod templates directory",
|
|
92
|
+
self.setParam("mas_pod_templates_dir", self.promptForDir("Pod templates directory", mustExist=True))
|
|
93
93
|
else:
|
|
94
94
|
self.fatalError(f"Invalid selection: {podTemplateChoice}")
|
|
95
95
|
|
|
@@ -163,6 +163,10 @@ class AdditionalConfigsMixin():
|
|
|
163
163
|
"mas_app_channel_optimizer": {
|
|
164
164
|
"dir": self.manualCertsDir + "/optimizer/",
|
|
165
165
|
"keyPrefix": "optimizer."
|
|
166
|
+
},
|
|
167
|
+
"mas_app_channel_facilities": {
|
|
168
|
+
"dir": self.manualCertsDir + "/facilities/",
|
|
169
|
+
"keyPrefix": "facilities."
|
|
166
170
|
}
|
|
167
171
|
}
|
|
168
172
|
|
|
@@ -182,6 +186,19 @@ class AdditionalConfigsMixin():
|
|
|
182
186
|
|
|
183
187
|
self.certsSecret = certsSecret
|
|
184
188
|
|
|
189
|
+
def slsLicenseFile(self) -> None:
|
|
190
|
+
if self.slsLicenseFileLocal:
|
|
191
|
+
slsLicenseFileSecret = {
|
|
192
|
+
"apiVersion": "v1",
|
|
193
|
+
"kind": "Secret",
|
|
194
|
+
"type": "Opaque",
|
|
195
|
+
"metadata": {
|
|
196
|
+
"name": "pipeline-sls-entitlement"
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
self.setParam("sls_entitlement_file", f"/workspace/entitlement/{path.basename(self.slsLicenseFileLocal)}")
|
|
200
|
+
self.slsLicenseFileSecret = self.addFilesToSecret(slsLicenseFileSecret, self.slsLicenseFileLocal, '')
|
|
201
|
+
|
|
185
202
|
def addFilesToSecret(self, secretDict: dict, configPath: str, extension: str, keyPrefix: str = '') -> dict:
|
|
186
203
|
"""
|
|
187
204
|
Add file (or files) to pipeline-additional-configs
|
|
@@ -13,23 +13,28 @@ from prompt_toolkit import print_formatted_text
|
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
class Db2SettingsMixin():
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
# In silentMode, no prompts will show up for "happy path" DB2 configuration scenarios. Prompts will still show up when an input is absolutely required
|
|
17
|
+
# Settings under showAdvancedOptions are always prompted
|
|
18
|
+
def configDb2(self, silentMode=False) -> None:
|
|
19
|
+
if not silentMode:
|
|
20
|
+
self.printH1("Configure Databases")
|
|
18
21
|
# The channel used for Db2 used has not changed since the January 2024 catalog update
|
|
19
22
|
self.params["db2_channel"] = "v110509.0"
|
|
20
23
|
|
|
21
|
-
# If neither Iot or
|
|
22
|
-
if not self.installIoT and not self.installManage:
|
|
24
|
+
# If neither Iot, Manage or Facilities is being installed, we have nothing to do
|
|
25
|
+
if not self.installIoT and not self.installManage and not self.installFacilities:
|
|
23
26
|
print_formatted_text("No applications have been selected that require a Db2 installation")
|
|
24
27
|
self.setParam("db2_action_system", "none")
|
|
25
28
|
self.setParam("db2_action_manage", "none")
|
|
29
|
+
self.setParam("db2_action_facilities", "none")
|
|
26
30
|
return
|
|
27
31
|
|
|
28
|
-
# For now we are limiting users to bring your own database for Manage on s390x
|
|
29
|
-
# Eventually we will be able to remove this clause and allow the standard logic to work for
|
|
30
|
-
if self.architecture == "s390x" and self.installManage:
|
|
32
|
+
# For now we are limiting users to bring your own database for Manage on s390x & ppc64le
|
|
33
|
+
# Eventually we will be able to remove this clause and allow the standard logic to work for s390x, ppc64le and amd64
|
|
34
|
+
if (self.architecture == "s390x" or self.architecture == "ppc64le") and self.installManage:
|
|
35
|
+
# silentMode does not apply for s390x/ppc64le because it requires interaction when selecting local config directory
|
|
31
36
|
self.printDescription([
|
|
32
|
-
"Installation of a Db2 instance using the IBM Db2 Universal Operator is not currently supported on s390x, please provide configuration details for the database you wish to use.",
|
|
37
|
+
"Installation of a Db2 instance using the IBM Db2 Universal Operator is not currently supported on s390x /ppc64le, please provide configuration details for the database you wish to use.",
|
|
33
38
|
])
|
|
34
39
|
instanceId = self.getParam('mas_instance_id')
|
|
35
40
|
workspaceId = self.getParam("mas_workspace_id")
|
|
@@ -40,58 +45,37 @@ class Db2SettingsMixin():
|
|
|
40
45
|
|
|
41
46
|
# Check if a configuration already exists before creating a new one
|
|
42
47
|
jdbcCfgFile = path.join(self.localConfigDir, f"jdbc-{instanceId}-manage.yaml")
|
|
43
|
-
print_formatted_text(f"Searching for
|
|
48
|
+
print_formatted_text(f"Searching for {self.manageAppName} database configuration file in {jdbcCfgFile} ...")
|
|
44
49
|
if path.exists(jdbcCfgFile):
|
|
45
|
-
if self.yesOrNo(f"
|
|
50
|
+
if self.yesOrNo(f"{self.manageAppName} database configuration file 'jdbc-{instanceId}-manage.yaml' already exists. Do you want to generate a new one"):
|
|
46
51
|
self.generateJDBCCfg(instanceId=instanceId, scope="workspace-application", workspaceId=workspaceId, appId="manage", destination=jdbcCfgFile)
|
|
47
52
|
else:
|
|
48
|
-
print_formatted_text(f"Expected file ({jdbcCfgFile}) was not found, generating a valid
|
|
53
|
+
print_formatted_text(f"Expected file ({jdbcCfgFile}) was not found, generating a valid {self.manageAppName} database configuration file now ...")
|
|
49
54
|
self.generateJDBCCfg(instanceId=instanceId, scope="workspace-application", workspaceId=workspaceId, appId="manage", destination=jdbcCfgFile)
|
|
50
55
|
return
|
|
51
56
|
|
|
52
57
|
# Proceed as normal
|
|
53
|
-
# We know we are installing either IoT or
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
self.setParam("db2_cpu_requests", "4000m")
|
|
59
|
-
self.setParam("db2_cpu_limits", "6000m")
|
|
60
|
-
self.setParam("db2_memory_requests", "8Gi")
|
|
61
|
-
self.setParam("db2_memory_limits", "12Gi")
|
|
62
|
-
|
|
63
|
-
if self.isSNO():
|
|
64
|
-
# Set smaller defaults for SNO deployments
|
|
65
|
-
self.setParam("db2_meta_storage_size", "10Gi")
|
|
66
|
-
self.setParam("db2_backup_storage_size", "10Gi")
|
|
67
|
-
self.setParam("db2_logs_storage_size", "10Gi")
|
|
68
|
-
self.setParam("db2_temp_storage_size", "10Gi")
|
|
69
|
-
self.setParam("db2_data_storage_size", "20Gi")
|
|
70
|
-
|
|
71
|
-
# Configure the access mode to RWO
|
|
72
|
-
self.params["db2_meta_storage_accessmode"] = "ReadWriteOnce"
|
|
73
|
-
self.params["db2_backup_storage_accessmode"] = "ReadWriteOnce"
|
|
74
|
-
self.params["db2_logs_storage_accessmode"] = "ReadWriteOnce"
|
|
75
|
-
self.params["db2_data_storage_accessmode"] = "ReadWriteOnce"
|
|
58
|
+
# We know we are installing either IoT, Manage or Facilities, and on amd64 target architecture
|
|
59
|
+
if not silentMode:
|
|
60
|
+
self.printDescription([
|
|
61
|
+
f"The installer can setup one or more IBM Db2 instances in your OpenShift cluster for the use of applications that require a JDBC datasource (IoT, {self.manageAppName}, Monitor, & Predict, Real Estate and Facilities) or you may choose to configure MAS to use an existing database"
|
|
62
|
+
])
|
|
76
63
|
|
|
77
|
-
|
|
78
|
-
self.params["db2_cpu_requests"] = "300m"
|
|
79
|
-
else:
|
|
80
|
-
self.setParam("db2_meta_storage_size", "20Gi")
|
|
81
|
-
self.setParam("db2_backup_storage_size", "100Gi")
|
|
82
|
-
self.setParam("db2_logs_storage_size", "100Gi")
|
|
83
|
-
self.setParam("db2_temp_storage_size", "100Gi")
|
|
84
|
-
self.setParam("db2_data_storage_size", "100Gi")
|
|
64
|
+
self.setDB2DefaultSettings()
|
|
85
65
|
|
|
86
66
|
instanceId = self.getParam('mas_instance_id')
|
|
87
67
|
# Do we need to set up an IoT database?
|
|
88
68
|
if self.installIoT:
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
69
|
+
if not silentMode:
|
|
70
|
+
self.printH2("Database Configuration for Maximo IoT")
|
|
71
|
+
self.printDescription([
|
|
72
|
+
"Maximo IoT requires a shared system-scope Db2 instance because others application in the suite require access to the same database source",
|
|
73
|
+
" - Only IBM Db2 is supported for this database"
|
|
74
|
+
])
|
|
75
|
+
createSystemDb2UsingUniversalOperator = True
|
|
76
|
+
if not silentMode:
|
|
77
|
+
createSystemDb2UsingUniversalOperator = self.yesOrNo("Create system Db2 instance using the IBM Db2 Universal Operator")
|
|
78
|
+
if createSystemDb2UsingUniversalOperator:
|
|
95
79
|
self.setParam("db2_action_system", "install")
|
|
96
80
|
else:
|
|
97
81
|
self.setParam("db2_action_system", "byo")
|
|
@@ -111,28 +95,39 @@ class Db2SettingsMixin():
|
|
|
111
95
|
self.setParam("db2_action_system", "none")
|
|
112
96
|
|
|
113
97
|
if self.installManage:
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
98
|
+
if not silentMode:
|
|
99
|
+
self.printH2(f"Database Configuration for Maximo {self.manageAppName}")
|
|
100
|
+
self.printDescription([
|
|
101
|
+
f"Maximo {self.manageAppName} can be configured to share the system Db2 instance or use it's own dedicated database:",
|
|
102
|
+
" - Use of a shared instance has a significant footprint reduction but is only recommended for development/test/demo installs",
|
|
103
|
+
" - In most production systems you will want to use a dedicated database",
|
|
104
|
+
" - IBM Db2, Oracle Database, & Microsoft SQL Server are all supported database options"
|
|
105
|
+
])
|
|
121
106
|
# Determine whether to use the system or a dedicated database
|
|
122
|
-
|
|
107
|
+
reuseSystemDb2 = False
|
|
108
|
+
if self.installIoT:
|
|
109
|
+
if not silentMode:
|
|
110
|
+
reuseSystemDb2 = self.yesOrNo(f"Re-use System Db2 instance for {self.manageAppName} application")
|
|
111
|
+
if reuseSystemDb2:
|
|
123
112
|
# We are going to bind Manage to the system database, which has already been set up in the previous step
|
|
124
113
|
self.setParam("mas_appws_bindings_jdbc_manage", "system")
|
|
125
114
|
self.setParam("db2_action_manage", "none")
|
|
126
115
|
else:
|
|
127
116
|
self.setParam("mas_appws_bindings_jdbc_manage", "workspace-application")
|
|
128
|
-
|
|
117
|
+
createSystemDb2UsingUniversalOperator = True
|
|
118
|
+
if not silentMode:
|
|
119
|
+
createSystemDb2UsingUniversalOperator = self.yesOrNo(f"Create {self.manageAppName} dedicated Db2 instance using the IBM Db2 Universal Operator")
|
|
120
|
+
if createSystemDb2UsingUniversalOperator:
|
|
129
121
|
self.setParam("db2_action_manage", "install")
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
122
|
+
if not silentMode:
|
|
123
|
+
self.printDescription([
|
|
124
|
+
f"Available Db2 instance types for {self.manageAppName}:",
|
|
125
|
+
" 1. DB2 Warehouse (Default option)",
|
|
126
|
+
" 2. DB2 Online Transactional Processing (OLTP)"
|
|
127
|
+
])
|
|
128
|
+
self.promptForListSelect(message=f"Select the {self.manageAppName} dedicated DB2 instance type", options=["db2wh", "db2oltp"], param="db2_type", default="1")
|
|
129
|
+
else:
|
|
130
|
+
self.setParam("db2_type", "db2wh")
|
|
136
131
|
else:
|
|
137
132
|
workspaceId = self.getParam("mas_workspace_id")
|
|
138
133
|
self.setParam("db2_action_manage", "byo")
|
|
@@ -141,18 +136,41 @@ class Db2SettingsMixin():
|
|
|
141
136
|
|
|
142
137
|
# Check if a configuration already exists before creating a new one
|
|
143
138
|
jdbcCfgFile = path.join(self.localConfigDir, f"jdbc-{instanceId}-manage.yaml")
|
|
144
|
-
print_formatted_text(f"Searching for
|
|
139
|
+
print_formatted_text(f"Searching for {self.manageAppName} database configuration file in {jdbcCfgFile} ...")
|
|
145
140
|
if path.exists(jdbcCfgFile):
|
|
146
|
-
if self.yesOrNo(f"
|
|
141
|
+
if self.yesOrNo(f"{self.manageAppName} database configuration file 'jdbc-{instanceId}-manage.yaml' already exists. Do you want to generate a new one"):
|
|
147
142
|
self.generateJDBCCfg(instanceId=instanceId, scope="workspace-application", workspaceId=workspaceId, appId="manage", destination=jdbcCfgFile)
|
|
148
143
|
else:
|
|
149
|
-
print_formatted_text(f"Expected file ({jdbcCfgFile}) was not found, generating a valid
|
|
144
|
+
print_formatted_text(f"Expected file ({jdbcCfgFile}) was not found, generating a valid {self.manageAppName} database configuration file now ...")
|
|
150
145
|
self.generateJDBCCfg(instanceId=instanceId, scope="workspace-application", workspaceId=workspaceId, appId="manage", destination=jdbcCfgFile)
|
|
151
146
|
else:
|
|
152
147
|
self.setParam("db2_action_manage", "none")
|
|
153
148
|
|
|
149
|
+
# Do we need to create and configure a Db2 for Facilities ?
|
|
150
|
+
if self.installFacilities:
|
|
151
|
+
self.printH2("Database Configuration for Maximo Real Estate and Facilities")
|
|
152
|
+
if self.yesOrNo("Create Real Estate and Facilities dedicated Db2 instance using the IBM Db2 Universal Operator"):
|
|
153
|
+
self.setParam("db2_action_facilities", "install")
|
|
154
|
+
else:
|
|
155
|
+
self.setParam("db2_action_facilities", "none")
|
|
156
|
+
instanceId = self.getParam('mas_instance_id')
|
|
157
|
+
workspaceId = self.getParam("mas_workspace_id")
|
|
158
|
+
self.selectLocalConfigDir()
|
|
159
|
+
|
|
160
|
+
# Check if a configuration already exists before creating a new one
|
|
161
|
+
jdbcCfgFile = path.join(self.localConfigDir, f"jdbc-{instanceId}-facilities.yaml")
|
|
162
|
+
print_formatted_text(f"Searching for Real Estate and Facilities database configuration file in {jdbcCfgFile} ...")
|
|
163
|
+
if path.exists(jdbcCfgFile):
|
|
164
|
+
if self.yesOrNo(f"Real Estate and Facilities database configuration file 'jdbc-{instanceId}-facilities.yaml' already exists. Do you want to generate a new one"):
|
|
165
|
+
self.generateJDBCCfg(instanceId=instanceId, scope="workspace-application", workspaceId=workspaceId, appId="facilities", destination=jdbcCfgFile)
|
|
166
|
+
else:
|
|
167
|
+
print_formatted_text(f"Expected file ({jdbcCfgFile}) was not found, generating a valid Real Estate and Facilities database configuration file now ...")
|
|
168
|
+
self.generateJDBCCfg(instanceId=instanceId, scope="workspace-application", workspaceId=workspaceId, appId="facilities", destination=jdbcCfgFile)
|
|
169
|
+
else:
|
|
170
|
+
self.setParam("db2_action_facilities", "none")
|
|
171
|
+
|
|
154
172
|
# Do we need to configure Db2u?
|
|
155
|
-
if self.getParam("db2_action_system") == "install" or self.getParam("db2_action_manage") == "install":
|
|
173
|
+
if self.getParam("db2_action_system") == "install" or self.getParam("db2_action_manage") == "install" or self.getParam("db2_action_facilities") == "install":
|
|
156
174
|
if self.showAdvancedOptions:
|
|
157
175
|
self.printH2("Installation Namespace")
|
|
158
176
|
self.promptForString("Install namespace", "db2_namespace", default="db2u")
|
|
@@ -161,11 +179,13 @@ class Db2SettingsMixin():
|
|
|
161
179
|
# -------------------------------------------------------------------------
|
|
162
180
|
self.printH2("Node Affinity and Tolerations")
|
|
163
181
|
self.printDescription([
|
|
164
|
-
"Note that the same settings are applied to both the IoT and
|
|
182
|
+
f"Note that the same settings are applied to both the IoT and {self.manageAppName} Db2 instances",
|
|
165
183
|
"Use existing node labels and taints to control scheduling of the Db2 workload in your cluster",
|
|
166
184
|
"For more information refer to the Red Hat documentation:",
|
|
167
|
-
" - <Orange><u>https://docs.openshift.com/container-platform/4.
|
|
168
|
-
" - <Orange><u>https://docs.openshift.com/container-platform/4.
|
|
185
|
+
" - <Orange><u>https://docs.openshift.com/container-platform/4.18/nodes/scheduling/nodes-scheduler-node-affinity.html</u></Orange>",
|
|
186
|
+
" - <Orange><u>https://docs.openshift.com/container-platform/4.18/nodes/scheduling/nodes-scheduler-taints-tolerations.html</u></Orange>",
|
|
187
|
+
" - <Orange><u>https://docs.openshift.com/container-platform/4.17/nodes/scheduling/nodes-scheduler-node-affinity.html</u></Orange>",
|
|
188
|
+
" - <Orange><u>https://docs.openshift.com/container-platform/4.17/nodes/scheduling/nodes-scheduler-taints-tolerations.html</u></Orange>"
|
|
169
189
|
])
|
|
170
190
|
|
|
171
191
|
if self.yesOrNo("Configure node affinity"):
|
|
@@ -179,7 +199,7 @@ class Db2SettingsMixin():
|
|
|
179
199
|
|
|
180
200
|
self.printH2("Database CPU & Memory")
|
|
181
201
|
self.printDescription([
|
|
182
|
-
"Note that the same settings are applied to both the IoT and
|
|
202
|
+
f"Note that the same settings are applied to both the IoT and {self.manageAppName} Db2 instances"
|
|
183
203
|
])
|
|
184
204
|
|
|
185
205
|
if self.yesOrNo("Customize CPU and memory request/limit"):
|
|
@@ -190,7 +210,7 @@ class Db2SettingsMixin():
|
|
|
190
210
|
|
|
191
211
|
self.printH2("Database Storage Capacity")
|
|
192
212
|
self.printDescription([
|
|
193
|
-
"Note that the same settings are applied to both the IoT and
|
|
213
|
+
f"Note that the same settings are applied to both the IoT and {self.manageAppName} Db2 instances"
|
|
194
214
|
])
|
|
195
215
|
|
|
196
216
|
if self.yesOrNo("Customize storage capacity"):
|
|
@@ -201,3 +221,32 @@ class Db2SettingsMixin():
|
|
|
201
221
|
self.promptForString(" + Backup Volume", "db2_backup_storage_size", default=self.getParam("db2_backup_storage_size"))
|
|
202
222
|
else:
|
|
203
223
|
self.setParam("db2_namespace", "db2u")
|
|
224
|
+
|
|
225
|
+
def setDB2DefaultSettings(self) -> None:
|
|
226
|
+
|
|
227
|
+
self.setParam("db2_cpu_requests", "4000m")
|
|
228
|
+
self.setParam("db2_cpu_limits", "6000m")
|
|
229
|
+
self.setParam("db2_memory_requests", "8Gi")
|
|
230
|
+
self.setParam("db2_memory_limits", "12Gi")
|
|
231
|
+
|
|
232
|
+
if self.isSNO():
|
|
233
|
+
# Set smaller defaults for SNO deployments
|
|
234
|
+
self.setParam("db2_meta_storage_size", "10Gi")
|
|
235
|
+
self.setParam("db2_backup_storage_size", "10Gi")
|
|
236
|
+
self.setParam("db2_logs_storage_size", "10Gi")
|
|
237
|
+
self.setParam("db2_temp_storage_size", "10Gi")
|
|
238
|
+
self.setParam("db2_data_storage_size", "20Gi")
|
|
239
|
+
|
|
240
|
+
# Configure the access mode to RWO
|
|
241
|
+
self.params["db2_meta_storage_accessmode"] = "ReadWriteOnce"
|
|
242
|
+
self.params["db2_backup_storage_accessmode"] = "ReadWriteOnce"
|
|
243
|
+
self.params["db2_logs_storage_accessmode"] = "ReadWriteOnce"
|
|
244
|
+
self.params["db2_data_storage_accessmode"] = "ReadWriteOnce"
|
|
245
|
+
self.params["db2_cpu_requests"] = "300m"
|
|
246
|
+
|
|
247
|
+
else:
|
|
248
|
+
self.setParam("db2_meta_storage_size", "20Gi")
|
|
249
|
+
self.setParam("db2_backup_storage_size", "100Gi")
|
|
250
|
+
self.setParam("db2_logs_storage_size", "100Gi")
|
|
251
|
+
self.setParam("db2_temp_storage_size", "100Gi")
|
|
252
|
+
self.setParam("db2_data_storage_size", "100Gi")
|
|
@@ -47,7 +47,7 @@ class KafkaSettingsMixin():
|
|
|
47
47
|
])
|
|
48
48
|
if self.showAdvancedOptions:
|
|
49
49
|
self.promptForString("Strimzi namespace", "kafka_namespace", default="strimzi")
|
|
50
|
-
self.promptForString("Kafka version", "kafka_version", default="3.
|
|
50
|
+
self.promptForString("Kafka version", "kafka_version", default="3.9.0")
|
|
51
51
|
|
|
52
52
|
elif self.getParam("kafka_provider") == "redhat":
|
|
53
53
|
self.printDescription([
|
|
@@ -58,7 +58,7 @@ class KafkaSettingsMixin():
|
|
|
58
58
|
" - If you are using older operator catalogs (e.g. in a disconnected install) you should confirm the supported versions in your OperatorHub"
|
|
59
59
|
])
|
|
60
60
|
self.promptForString("Install namespace", "kafka_namespace", default="amq-streams")
|
|
61
|
-
self.promptForString("Kafka version", "kafka_version", default="3.
|
|
61
|
+
self.promptForString("Kafka version", "kafka_version", default="3.8.0")
|
|
62
62
|
|
|
63
63
|
elif self.getParam("kafka_provider") == "ibm":
|
|
64
64
|
print()
|