mas-cli 13.16.0__py3-none-any.whl → 13.17.2__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.

@@ -170,7 +170,6 @@ masAdvancedArgGroup.add_argument(
170
170
  required=False,
171
171
  help="Configure MAS with a custom domain"
172
172
  )
173
-
174
173
  masAdvancedArgGroup.add_argument(
175
174
  "--disable-walkme",
176
175
  dest="mas_enable_walkme",
@@ -195,6 +194,15 @@ masAdvancedArgGroup.add_argument(
195
194
  help="Provide the name of the ClusterIssuer to configure MAS to issue certificates",
196
195
  )
197
196
 
197
+ masAdvancedArgGroup.add_argument(
198
+ "--enable-ipv6",
199
+ dest="enable_ipv6",
200
+ required=False,
201
+ help="Configure MAS to run in IP version 6. Before setting this option, be sure your cluster is configured in IP version 6",
202
+ action="store_const",
203
+ const="true"
204
+ )
205
+
198
206
  # DNS Configuration - IBM CIS
199
207
  # -----------------------------------------------------------------------------
200
208
  cisArgGroup = installArgParser.add_argument_group("DNS Configuration - CIS")
@@ -365,145 +373,9 @@ masAppsArgGroup.add_argument(
365
373
  help="Install plan for Maximo Optimizer"
366
374
  )
367
375
  masAppsArgGroup.add_argument(
368
- "--aibroker-channel",
369
- required=False,
370
- help="Subscription channel for Maximo Ai Broker"
371
- )
372
-
373
- # AI Broker
374
- # -----------------------------------------------------------------------------
375
- aibrokerArgGroup = installArgParser.add_argument_group("Maximo AI Broker")
376
- aibrokerArgGroup.add_argument(
377
- "--mas-aibroker-storage-provider",
378
- dest="mas_aibroker_storage_provider",
379
- required=False,
380
- help="Customize Manage database encryption keys"
381
- )
382
- aibrokerArgGroup.add_argument(
383
- "--mas-aibroker-storage-accesskey",
384
- dest="mas_aibroker_storage_accesskey",
385
- required=False,
386
- help="Customize Manage database encryption keys"
387
- )
388
- aibrokerArgGroup.add_argument(
389
- "--mas-aibroker-storage-secretkey",
390
- dest="mas_aibroker_storage_secretkey",
391
- required=False,
392
- help="Customize Manage database encryption keys"
393
- )
394
- aibrokerArgGroup.add_argument(
395
- "--mas-aibroker-storage-host",
396
- dest="mas_aibroker_storage_host",
397
- required=False,
398
- help="Customize Manage database encryption keys"
399
- )
400
- aibrokerArgGroup.add_argument(
401
- "--mas-aibroker-storage-port",
402
- dest="mas_aibroker_storage_port",
403
- required=False,
404
- help="Customize Manage database encryption keys"
405
- )
406
- aibrokerArgGroup.add_argument(
407
- "--mas-aibroker-storage-ssl",
408
- dest="mas_aibroker_storage_ssl",
409
- required=False,
410
- help="Customize Manage database encryption keys"
411
- )
412
- aibrokerArgGroup.add_argument(
413
- "--mas-aibroker-storage-region",
414
- dest="mas_aibroker_storage_region",
415
- required=False,
416
- help="Customize Manage database encryption keys"
417
- )
418
- aibrokerArgGroup.add_argument(
419
- "--mas-aibroker-storage-pipelines-bucket",
420
- dest="mas_aibroker_storage_pipelines_bucket",
421
- required=False,
422
- help="Customize Manage database encryption keys"
423
- )
424
- aibrokerArgGroup.add_argument(
425
- "--mas-aibroker-storage-tenants-bucket",
426
- dest="mas_aibroker_storage_tenants_bucket",
427
- required=False,
428
- help="Customize Manage database encryption keys"
429
- )
430
- aibrokerArgGroup.add_argument(
431
- "--mas-aibroker-storage-templates-bucket",
432
- dest="mas_aibroker_storage_templates_bucket",
433
- required=False,
434
- help="Customize Manage database encryption keys"
435
- )
436
- aibrokerArgGroup.add_argument(
437
- "--mas-aibroker-tenant-name",
438
- dest="mas_aibroker_tenant_name",
439
- required=False,
440
- help="Customize Manage database encryption keys"
441
- )
442
- aibrokerArgGroup.add_argument(
443
- "--mas-aibroker-watsonxai-apikey",
444
- dest="mas_aibroker_watsonxai_apikey",
445
- required=False,
446
- help="Customize Manage database encryption keys"
447
- )
448
- aibrokerArgGroup.add_argument(
449
- "--mas-aibroker-watsonxai-url",
450
- dest="mas_aibroker_watsonxai_url",
451
- required=False,
452
- help="Customize Manage database encryption keys"
453
- )
454
- aibrokerArgGroup.add_argument(
455
- "--mas-aibroker-watsonxai-project-id",
456
- dest="mas_aibroker_watsonxai_project_id",
457
- required=False,
458
- help="Customize Manage database encryption keys"
459
- )
460
- aibrokerArgGroup.add_argument(
461
- "--mas-aibroker-watsonx-action",
462
- dest="mas_aibroker_watsonx_action",
463
- required=False,
464
- help="Customize Manage database encryption keys"
465
- )
466
- aibrokerArgGroup.add_argument(
467
- "--mas-aibroker-db-host",
468
- dest="mas_aibroker_db_host",
469
- required=False,
470
- help="Customize Manage database encryption keys"
471
- )
472
- aibrokerArgGroup.add_argument(
473
- "--mas-aibroker-db-port",
474
- dest="mas_aibroker_db_port",
475
- required=False,
476
- help="Customize Manage database encryption keys"
477
- )
478
- aibrokerArgGroup.add_argument(
479
- "--mas-aibroker-db-user",
480
- dest="mas_aibroker_db_user",
481
- required=False,
482
- help="Customize Manage database encryption keys"
483
- )
484
- aibrokerArgGroup.add_argument(
485
- "--mas-aibroker-db-database",
486
- dest="mas_aibroker_db_database",
487
- required=False,
488
- help="Customize Manage database encryption keys"
489
- )
490
- aibrokerArgGroup.add_argument(
491
- "--mas-aibroker-db-secret-name",
492
- dest="mas_aibroker_db_secret_name",
493
- required=False,
494
- help="Customize Manage database encryption keys"
495
- )
496
- aibrokerArgGroup.add_argument(
497
- "--mas-aibroker-db-secret-key",
498
- dest="mas_aibroker_db_secret_key",
376
+ "--facilities-channel",
499
377
  required=False,
500
- help="Customize Manage database encryption keys"
501
- )
502
- aibrokerArgGroup.add_argument(
503
- "--mas-aibroker-db-secret-value",
504
- dest="mas_aibroker_db_secret_value",
505
- required=False,
506
- help="Customize Manage database encryption keys"
378
+ help="Subscription channel for Maximo Real Estate and Facilities"
507
379
  )
508
380
 
509
381
  # Arcgis
@@ -684,7 +556,8 @@ manageArgGroup.add_argument(
684
556
  "--manage-attachments-provider",
685
557
  dest="mas_manage_attachments_provider",
686
558
  required=False,
687
- help="Defines the storage provider type to be used to store attachments in Maximo Manage"
559
+ help="Defines the storage provider type to be used to store attachments in Maximo Manage. Supported options are `filestorage`, `ibm` and `aws`.",
560
+ choices=["filestorage", "ibm", "aws"]
688
561
  )
689
562
  manageArgGroup.add_argument(
690
563
  "--manage-attachments-mode",
@@ -694,6 +567,93 @@ manageArgGroup.add_argument(
694
567
  choices=["cr", "db"]
695
568
  )
696
569
 
570
+ # Facilities Advanced Settings
571
+ # TODO: Fix type for storage sizes and max conn pool size
572
+ facilitiesArgGroup = installArgParser.add_argument_group("Facilities Advanced Configuration")
573
+ facilitiesArgGroup.add_argument(
574
+ "--facilities-size",
575
+ dest="mas_ws_facilities_size",
576
+ required=False,
577
+ help="Defines the size of Facilities deployment",
578
+ choices=['small', 'medium', 'large'],
579
+ )
580
+ facilitiesArgGroup.add_argument(
581
+ "--facilities-pull-policy",
582
+ dest="mas_ws_facilities_pull_policy",
583
+ required=False,
584
+ help="Defines the pull policy for the images",
585
+ choices=["IfNotPresent", "Always"],
586
+ )
587
+ facilitiesArgGroup.add_argument(
588
+ "--facilities-routes-timeout",
589
+ dest="mas_ws_facilities_routes_timeout",
590
+ required=False,
591
+ help="Defines the timeout for the routes",
592
+ default="600s",
593
+ )
594
+ facilitiesArgGroup.add_argument(
595
+ "--facilities-xml-extension",
596
+ dest="mas_ws_facilities_liberty_extension_XML",
597
+ required=False,
598
+ help="Defines the name of the secret that holds the extensions for Liberty server",
599
+ )
600
+ facilitiesArgGroup.add_argument(
601
+ "--facilities-vault-secret",
602
+ dest="mas_ws_facilities_vault_secret",
603
+ required=False,
604
+ help="Defines the name of the secret that holds the AES Encryption password",
605
+ )
606
+ facilitiesArgGroup.add_argument(
607
+ "--facilities-dwfagent",
608
+ dest="mas_ws_facilities_dwfagents",
609
+ required=False,
610
+ help="Defines the list of dedicates workflow agents",
611
+ type=str
612
+ )
613
+ facilitiesArgGroup.add_argument(
614
+ "--facilities-maxconnpoolsize",
615
+ dest="mas_ws_facilities_db_maxconnpoolsize",
616
+ required=False,
617
+ help="Defines the maximum connection pool size",
618
+ default=200,
619
+ )
620
+ facilitiesArgGroup.add_argument(
621
+ "--facilities-log-storage-class",
622
+ dest="mas_ws_facilities_storage_log_class",
623
+ required=False,
624
+ help="Defines the log storage class",
625
+ )
626
+ facilitiesArgGroup.add_argument(
627
+ "--facilities-log-storage-mode",
628
+ dest="mas_ws_facilities_storage_log_mode",
629
+ required=False,
630
+ help="Defines the log storage mode",
631
+ )
632
+ facilitiesArgGroup.add_argument(
633
+ "--facilities-log-storage-size",
634
+ dest="mas_ws_facilities_storage_log_size",
635
+ required=False,
636
+ help="Defines the logs storage size",
637
+ )
638
+ facilitiesArgGroup.add_argument(
639
+ "--facilities-userfiles-storage-class",
640
+ dest="mas_ws_facilities_storage_userfiles_class",
641
+ required=False,
642
+ help="Defines the user files storage class",
643
+ )
644
+ facilitiesArgGroup.add_argument(
645
+ "--facilities-userfiles-storage-mode",
646
+ dest="mas_ws_facilities_storage_userfiles_mode",
647
+ required=False,
648
+ help="Defines the user files storage mode",
649
+ )
650
+ facilitiesArgGroup.add_argument(
651
+ "--facilities-userfiles-storage-size",
652
+ dest="mas_ws_facilities_storage_userfiles_size",
653
+ required=False,
654
+ help="Defines the user files storage size",
655
+ )
656
+
697
657
  # IBM Cloud Pak for Data
698
658
  # -----------------------------------------------------------------------------
699
659
  cpdAppsArgGroup = installArgParser.add_argument_group("IBM Cloud Pak for Data")
@@ -773,6 +733,14 @@ db2ArgGroup.add_argument(
773
733
  action="store_const",
774
734
  const="install"
775
735
  )
736
+ db2ArgGroup.add_argument(
737
+ "--db2-facilities",
738
+ dest="db2_action_facilities",
739
+ required=False,
740
+ help="Install a dedicated Db2u instance for Maximo Real Estate and Facilities (supported by Facilities)",
741
+ action="store_const",
742
+ const="install"
743
+ )
776
744
  db2ArgGroup.add_argument(
777
745
  "--db2-type",
778
746
  required=False,
@@ -950,16 +918,19 @@ mskArgGroup.add_argument(
950
918
  eventstreamsArgGroup = installArgParser.add_argument_group("Kafka - Event Streams")
951
919
  eventstreamsArgGroup.add_argument(
952
920
  "--eventstreams-resource-group",
921
+ dest="eventstreams_resourcegroup",
953
922
  required=False,
954
923
  help="Set IBM Cloud resource group to target the Event Streams instance provisioning"
955
924
  )
956
925
  eventstreamsArgGroup.add_argument(
957
926
  "--eventstreams-instance-name",
927
+ dest="eventstreams_name",
958
928
  required=False,
959
929
  help="Set IBM Event Streams instance name"
960
930
  )
961
931
  eventstreamsArgGroup.add_argument(
962
932
  "--eventstreams-instance-location",
933
+ dest="eventstreams_location",
963
934
  required=False,
964
935
  help="Set IBM Event Streams instance location"
965
936
  )
@@ -1119,6 +1090,11 @@ approvalsGroup.add_argument(
1119
1090
  default="",
1120
1091
  help="Require approval after the Maximo Visual Inspection workspace has been configured"
1121
1092
  )
1093
+ approvalsGroup.add_argument(
1094
+ "--approval-facilities",
1095
+ default="",
1096
+ help="Require approval after the Maximo Real Estate and Facilities workspace has been configured"
1097
+ )
1122
1098
 
1123
1099
 
1124
1100
  # More Options
@@ -9,15 +9,18 @@
9
9
  # *****************************************************************************
10
10
  supportedCatalogs = {
11
11
  "amd64": [
12
+ "v9-250624-amd64",
13
+ "v9-250501-amd64",
12
14
  "v9-250403-amd64",
13
15
  "v9-250306-amd64",
14
- "v9-250206-amd64",
15
- "v9-250109-amd64",
16
16
  ],
17
17
  "s390x": [
18
+ "v9-250624-s390x",
19
+ "v9-250501-s390x",
18
20
  "v9-250403-s390x",
19
21
  "v9-250306-s390x",
20
- "v9-250206-s390x",
21
- "v9-250109-s390x",
22
+ ],
23
+ "ppc64le": [
24
+ "v9-250624-ppc64le",
22
25
  ],
23
26
  }
mas/cli/install/params.py CHANGED
@@ -61,6 +61,8 @@ optionalParams = [
61
61
  "mas_appws_components",
62
62
  "mas_appws_bindings_health_wsl_flag",
63
63
  "mas_domain",
64
+ # IPV6
65
+ "enable_ipv6",
64
66
  # SLS
65
67
  "sls_namespace",
66
68
  # DNS Providers
@@ -76,6 +78,7 @@ optionalParams = [
76
78
  # Db2
77
79
  "db2_action_system",
78
80
  "db2_action_manage",
81
+ "db2_action_facilities",
79
82
  "db2_type",
80
83
  "db2_timezone",
81
84
  "db2_namespace",
@@ -112,9 +115,9 @@ optionalParams = [
112
115
  "aws_msk_cidr_az3",
113
116
  "aws_msk_egress_cidr",
114
117
  "aws_msk_ingress_cidr",
115
- "eventstreams_resource_group",
116
- "eventstreams_instance_name",
117
- "eventstreams_instance_location",
118
+ "eventstreams_resourcegroup",
119
+ "eventstreams_name",
120
+ "eventstreams_location",
118
121
  # COS
119
122
  "cos_type",
120
123
  "cos_resourcegroup",
@@ -173,6 +176,20 @@ optionalParams = [
173
176
  "mas_aibroker_db_secret_name",
174
177
  "mas_aibroker_db_secret_key",
175
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",
176
193
  # Special chars
177
194
  "mas_special_characters"
178
195
  ]
@@ -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
 
@@ -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")
@@ -50,22 +55,27 @@ class Db2SettingsMixin():
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
- 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) or you may choose to configure MAS to use an existing database"
56
- ])
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
+ ])
57
63
 
58
64
  self.setDB2DefaultSettings()
59
65
 
60
66
  instanceId = self.getParam('mas_instance_id')
61
67
  # Do we need to set up an IoT database?
62
68
  if self.installIoT:
63
- self.printH2("Database Configuration for Maximo IoT")
64
- self.printDescription([
65
- "Maximo IoT requires a shared system-scope Db2 instance because others application in the suite require access to the same database source",
66
- " - Only IBM Db2 is supported for this database"
67
- ])
68
- 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:
69
79
  self.setParam("db2_action_system", "install")
70
80
  else:
71
81
  self.setParam("db2_action_system", "byo")
@@ -85,28 +95,39 @@ class Db2SettingsMixin():
85
95
  self.setParam("db2_action_system", "none")
86
96
 
87
97
  if self.installManage:
88
- self.printH2(f"Database Configuration for Maximo {self.manageAppName}")
89
- self.printDescription([
90
- f"Maximo {self.manageAppName} can be configured to share the system Db2 instance or use it's own dedicated database:",
91
- " - Use of a shared instance has a significant footprint reduction but is only recommended for development/test/demo installs",
92
- " - In most production systems you will want to use a dedicated database",
93
- " - IBM Db2, Oracle Database, & Microsoft SQL Server are all supported database options"
94
- ])
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
+ ])
95
106
  # Determine whether to use the system or a dedicated database
96
- if self.installIoT and self.yesOrNo(f"Re-use System Db2 instance for {self.manageAppName} 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:
97
112
  # We are going to bind Manage to the system database, which has already been set up in the previous step
98
113
  self.setParam("mas_appws_bindings_jdbc_manage", "system")
99
114
  self.setParam("db2_action_manage", "none")
100
115
  else:
101
116
  self.setParam("mas_appws_bindings_jdbc_manage", "workspace-application")
102
- if self.yesOrNo(f"Create {self.manageAppName} 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:
103
121
  self.setParam("db2_action_manage", "install")
104
- self.printDescription([
105
- f"Available Db2 instance types for {self.manageAppName}:",
106
- " 1. DB2 Warehouse (Default option)",
107
- " 2. DB2 Online Transactional Processing (OLTP)"
108
- ])
109
- self.promptForListSelect(message=f"Select the {self.manageAppName} 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")
110
131
  else:
111
132
  workspaceId = self.getParam("mas_workspace_id")
112
133
  self.setParam("db2_action_manage", "byo")
@@ -125,8 +146,31 @@ class Db2SettingsMixin():
125
146
  else:
126
147
  self.setParam("db2_action_manage", "none")
127
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
+
128
172
  # Do we need to configure Db2u?
129
- 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":
130
174
  if self.showAdvancedOptions:
131
175
  self.printH2("Installation Namespace")
132
176
  self.promptForString("Install namespace", "db2_namespace", default="db2u")
@@ -138,8 +182,10 @@ class Db2SettingsMixin():
138
182
  f"Note that the same settings are applied to both the IoT and {self.manageAppName} Db2 instances",
139
183
  "Use existing node labels and taints to control scheduling of the Db2 workload in your cluster",
140
184
  "For more information refer to the Red Hat documentation:",
141
- " - <Orange><u>https://docs.openshift.com/container-platform/4.16/nodes/scheduling/nodes-scheduler-node-affinity.html</u></Orange>",
142
- " - <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>"
143
189
  ])
144
190
 
145
191
  if self.yesOrNo("Configure node affinity"):
@@ -63,13 +63,13 @@ class ManageSettingsMixin():
63
63
  storageClass = self.getParam("storage_class_rwo")
64
64
  accessMode = "ReadWriteOnce"
65
65
 
66
- self.setParam("mas_app_settings_doclinks_pvc_storage_class", storageClass)
67
- self.setParam("mas_app_settings_bim_pvc_storage_class", storageClass)
68
- self.setParam("mas_app_settings_jms_queue_pvc_storage_class", storageClass)
66
+ self.setParam("mas_app_settings_doclinks_pvc_storage_class", storageClass)
67
+ self.setParam("mas_app_settings_bim_pvc_storage_class", storageClass)
68
+ self.setParam("mas_app_settings_jms_queue_pvc_storage_class", storageClass)
69
69
 
70
- self.setParam("mas_app_settings_doclinks_pvc_accessmode", accessMode)
71
- self.setParam("mas_app_settings_bim_pvc_accessmode", accessMode)
72
- self.setParam("mas_app_settings_jms_queue_pvc_accessmode", accessMode)
70
+ self.setParam("mas_app_settings_doclinks_pvc_accessmode", accessMode)
71
+ self.setParam("mas_app_settings_bim_pvc_accessmode", accessMode)
72
+ self.setParam("mas_app_settings_jms_queue_pvc_accessmode", accessMode)
73
73
 
74
74
  def manageSettingsComponents(self) -> None:
75
75
  # Only ask to install Manage components if this is a full Manage installation
@@ -119,6 +119,8 @@ class ManageSettingsMixin():
119
119
  self.params["mas_appws_components"] += ",utilities=latest"
120
120
  if self.yesOrNo(" - Workday Applications"):
121
121
  self.params["mas_appws_components"] += ",workday=latest"
122
+ if self.yesOrNo(" - AIP"):
123
+ self.params["mas_appws_components"] += ",aip=latest"
122
124
  logger.debug(f"Generated mas_appws_components = {self.params['mas_appws_components']}")
123
125
 
124
126
  if ",icd=" in self.params["mas_appws_components"]:
@@ -207,7 +209,7 @@ class ManageSettingsMixin():
207
209
  self.promptForString("Customization archive path/url", "mas_app_settings_customization_archive_url")
208
210
  if self.yesOrNo("Provide authentication to access customization archive URL"):
209
211
  self.promptForString("Username", "mas_app_settings_customization_archive_username")
210
- self.promptForString("Password", "mas_app_settings_customization_archive_password", isPassword=True)
212
+ self.promptForString("Password", "mas_app_settings_customization_archive_password", isPassword=True) # pragma: allowlist secret
211
213
 
212
214
  def manageSettingsDemodata(self) -> None:
213
215
  self.yesOrNo("Create demo data", "mas_app_settings_demodata")
@@ -269,29 +271,3 @@ class ManageSettingsMixin():
269
271
  self.manageSettingsTimezone()
270
272
  self.manageSettingsLanguages()
271
273
  self.manageSettingsCP4D()
272
-
273
- def aibrokerSettings(self) -> None:
274
- if self.installAiBroker:
275
- self.printH2("Maximo AI Broker Settings - Storage, WatsonX, MariaDB details")
276
- self.printDescription(["Customise AI Broker details"])
277
- self.promptForString("Storage provider", "mas_aibroker_storage_provider")
278
- self.promptForString("Storage access key", "mas_aibroker_storage_accesskey")
279
- self.promptForString("Storage secret key", "mas_aibroker_storage_secretkey")
280
- self.promptForString("Storage host", "mas_aibroker_storage_host")
281
- self.promptForString("Storage port", "mas_aibroker_storage_port")
282
- self.promptForString("Storage ssl", "mas_aibroker_storage_ssl")
283
- self.promptForString("Storage region", "mas_aibroker_storage_region")
284
- self.promptForString("Storage pipelines bucket", "mas_aibroker_storage_pipelines_bucket")
285
- self.promptForString("Storage tenants bucket", "mas_aibroker_storage_tenants_bucket")
286
- self.promptForString("Storage templates bucket", "mas_aibroker_storage_templates_bucket")
287
-
288
- self.promptForString("Watsonxai api key", "mas_aibroker_watsonxai_apikey")
289
- self.promptForString("Watsonxai machine learning url", "mas_aibroker_watsonxai_url")
290
- self.promptForString("Watsonxai project id", "mas_aibroker_watsonxai_project_id")
291
-
292
- self.promptForString("Database host", "mas_aibroker_db_host")
293
- self.promptForString("Database port", "mas_aibroker_db_port")
294
- self.promptForString("Database user", "mas_aibroker_db_user")
295
- self.promptForString("Database name", "mas_aibroker_db_database")
296
- self.promptForString("Database Secretname", "mas_aibroker_db_secret_name")
297
- self.promptForString("Database password", "mas_aibroker_db_secret_value")
@@ -19,7 +19,7 @@ class MongoDbSettingsMixin():
19
19
  "The installer can setup mongoce in your OpenShift cluster (available only for amd64) or you may choose to configure MAS to use an existing mongodb"
20
20
  ])
21
21
 
22
- if self.architecture != "s390x" and self.yesOrNo("Create MongoDb cluster using MongoDb Community Edition Operator"):
22
+ if (self.architecture != "s390x" and self.architecture != "ppc64le") and self.yesOrNo("Create MongoDb cluster using MongoDb Community Edition Operator"):
23
23
  if self.showAdvancedOptions:
24
24
  self.promptForString("MongoDb namespace", "mongodb_namespace", default="mongoce")
25
25
  else: