mas-cli 12.0.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.

Files changed (33) hide show
  1. mas/cli/__init__.py +1 -1
  2. mas/cli/aiservice/install/__init__.py +11 -0
  3. mas/cli/aiservice/install/app.py +810 -0
  4. mas/cli/aiservice/install/argBuilder.py +232 -0
  5. mas/cli/aiservice/install/argParser.py +742 -0
  6. mas/cli/aiservice/install/params.py +120 -0
  7. mas/cli/aiservice/install/summarizer.py +193 -0
  8. mas/cli/cli.py +36 -9
  9. mas/cli/gencfg.py +23 -0
  10. mas/cli/install/app.py +295 -85
  11. mas/cli/install/argBuilder.py +92 -14
  12. mas/cli/install/argParser.py +200 -147
  13. mas/cli/install/catalogs.py +11 -6
  14. mas/cli/install/params.py +32 -6
  15. mas/cli/install/settings/additionalConfigs.py +18 -1
  16. mas/cli/install/settings/db2Settings.py +121 -72
  17. mas/cli/install/settings/kafkaSettings.py +2 -2
  18. mas/cli/install/settings/manageSettings.py +154 -159
  19. mas/cli/install/settings/mongodbSettings.py +1 -1
  20. mas/cli/install/settings/turbonomicSettings.py +1 -3
  21. mas/cli/install/summarizer.py +85 -68
  22. mas/cli/templates/facilities-configs.yml.j2 +25 -0
  23. mas/cli/templates/ibm-mas-tekton.yaml +16683 -7870
  24. mas/cli/update/app.py +43 -9
  25. mas/cli/upgrade/app.py +52 -20
  26. mas/cli/upgrade/argParser.py +7 -0
  27. mas/cli/upgrade/settings/__init__.py +19 -0
  28. mas/cli/validators.py +13 -0
  29. {mas_cli-12.0.0.data → mas_cli-12.27.0.data}/scripts/mas-cli +5 -1
  30. {mas_cli-12.0.0.dist-info → mas_cli-12.27.0.dist-info}/METADATA +12 -3
  31. {mas_cli-12.0.0.dist-info → mas_cli-12.27.0.dist-info}/RECORD +33 -25
  32. {mas_cli-12.0.0.dist-info → mas_cli-12.27.0.dist-info}/WHEEL +1 -1
  33. {mas_cli-12.0.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
- "eventstreams_resource_group",
112
- "eventstreams_instance_name",
113
- "eventstreams_instance_location",
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", "mas_pod_templates_dir", mustExist=True)
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
- def configDb2(self) -> None:
17
- self.printH1("Configure Databases")
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 Manage is being installed, we have nothing to do
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 both s390x and amd64
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 Manage database configuration file in {jdbcCfgFile} ...")
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"Manage database configuration file 'jdbc-{instanceId}-manage.yaml' already exists. Do you want to generate a new one"):
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 Manage database configuration file now ...")
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 Manage, and on amd64 target architecture
54
- self.printDescription([
55
- "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, Manage, Monitor, & Predict) or you may choose to configure MAS to use an existing database"
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
- # Also reduce the CPU requests
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
- self.printH2("Database Configuration for Maximo IoT")
90
- self.printDescription([
91
- "Maximo IoT requires a shared system-scope Db2 instance because others application in the suite require access to the same database source",
92
- " - Only IBM Db2 is supported for this database"
93
- ])
94
- if self.yesOrNo("Create system Db2 instance using the IBM Db2 Universal Operator"):
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
- self.printH2("Database Configuration for Maximo Manage")
115
- self.printDescription([
116
- "Maximo Manage can be configured to share the system Db2 instance or use it's own dedicated database:",
117
- " - Use of a shared instance has a significant footprint reduction but is only recommended for development/test/demo installs",
118
- " - In most production systems you will want to use a dedicated database",
119
- " - IBM Db2, Oracle Database, & Microsoft SQL Server are all supported database options"
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
- if self.installIoT and self.yesOrNo("Re-use System Db2 instance for Manage application"):
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
- if self.yesOrNo("Create manage dedicated Db2 instance using the IBM Db2 Universal Operator"):
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
- self.printDescription([
131
- "Available Db2 instance types for Manage:",
132
- " 1. DB2 Warehouse (Default option)",
133
- " 2. DB2 Online Transactional Processing (OLTP)"
134
- ])
135
- self.promptForListSelect(message="Select the Manage dedicated DB2 instance type", options=["db2wh", "db2oltp"], param="db2_type", default="1")
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 Manage database configuration file in {jdbcCfgFile} ...")
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"Manage database configuration file 'jdbc-{instanceId}-manage.yaml' already exists. Do you want to generate a new one"):
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 Manage database configuration file now ...")
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 Manage Db2 instances",
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.16/nodes/scheduling/nodes-scheduler-node-affinity.html</u></Orange>",
168
- " - <Orange><u>https://docs.openshift.com/container-platform/4.16/nodes/scheduling/nodes-scheduler-taints-tolerations.html</u></Orange>"
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 Manage Db2 instances"
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 Manage Db2 instances"
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.7.0")
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.5.0")
61
+ self.promptForString("Kafka version", "kafka_version", default="3.8.0")
62
62
 
63
63
  elif self.getParam("kafka_provider") == "ibm":
64
64
  print()