mas-cli 15.1.13__py3-none-any.whl → 15.2.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/app.py +63 -122
- mas/cli/aiservice/install/argBuilder.py +3 -2
- mas/cli/aiservice/install/argParser.py +19 -15
- mas/cli/aiservice/install/params.py +2 -1
- mas/cli/aiservice/install/summarizer.py +18 -21
- mas/cli/cli.py +1 -1
- mas/cli/install/catalogs.py +3 -2
- mas/cli/templates/ibm-mas-tekton.yaml +221 -162
- mas/cli/update/app.py +7 -6
- mas/cli/validators.py +11 -0
- {mas_cli-15.1.13.dist-info → mas_cli-15.2.0.dist-info}/METADATA +1 -1
- {mas_cli-15.1.13.dist-info → mas_cli-15.2.0.dist-info}/RECORD +16 -16
- {mas_cli-15.1.13.data → mas_cli-15.2.0.data}/scripts/mas-cli +0 -0
- {mas_cli-15.1.13.dist-info → mas_cli-15.2.0.dist-info}/WHEEL +0 -0
- {mas_cli-15.1.13.dist-info → mas_cli-15.2.0.dist-info}/top_level.txt +0 -0
mas/cli/__init__.py
CHANGED
mas/cli/aiservice/install/app.py
CHANGED
|
@@ -10,18 +10,17 @@
|
|
|
10
10
|
# *****************************************************************************
|
|
11
11
|
|
|
12
12
|
import logging
|
|
13
|
-
from sys import exit
|
|
14
|
-
from os import path, getenv
|
|
15
13
|
import re
|
|
16
14
|
import calendar
|
|
17
15
|
|
|
16
|
+
from datetime import datetime
|
|
17
|
+
from dateutil.relativedelta import relativedelta
|
|
18
|
+
from sys import exit
|
|
19
|
+
from os import path, getenv
|
|
18
20
|
from openshift.dynamic.exceptions import NotFoundError
|
|
19
|
-
|
|
20
21
|
from prompt_toolkit import prompt, print_formatted_text, HTML
|
|
21
22
|
from prompt_toolkit.completion import WordCompleter
|
|
22
|
-
|
|
23
23
|
from tabulate import tabulate
|
|
24
|
-
|
|
25
24
|
from halo import Halo
|
|
26
25
|
|
|
27
26
|
from ...cli import BaseApp
|
|
@@ -43,7 +42,8 @@ from ...install.settings.additionalConfigs import AdditionalConfigsMixin
|
|
|
43
42
|
|
|
44
43
|
from mas.cli.validators import (
|
|
45
44
|
InstanceIDFormatValidator,
|
|
46
|
-
StorageClassValidator
|
|
45
|
+
StorageClassValidator,
|
|
46
|
+
BucketPrefixValidator
|
|
47
47
|
)
|
|
48
48
|
|
|
49
49
|
from mas.devops.ocp import createNamespace, getStorageClasses
|
|
@@ -80,42 +80,29 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
80
80
|
self.catalogDigest = self.chosenCatalog["catalog_digest"]
|
|
81
81
|
self.catalogMongoDbVersion = self.chosenCatalog["mongo_extras_version_default"]
|
|
82
82
|
applications = {
|
|
83
|
-
"
|
|
83
|
+
"AI Service": "aiservice_version",
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
self.catalogReleases = {}
|
|
87
87
|
self.catalogTable = []
|
|
88
88
|
|
|
89
89
|
# Dynamically fetch the channels from the chosen catalog
|
|
90
|
-
|
|
91
|
-
for channel in self.chosenCatalog["mas_core_version"]:
|
|
92
|
-
# {"9.1-feature": "9.1.x-feature"}
|
|
90
|
+
for channel in self.chosenCatalog["aiservice_version"]:
|
|
93
91
|
self.catalogReleases.update({channel.replace('.x', ''): channel})
|
|
94
92
|
|
|
95
93
|
# Generate catalogTable
|
|
96
94
|
for application, key in applications.items():
|
|
97
|
-
# Add 9.1-feature channel based off 9.0 to those apps that have not onboarded yet
|
|
98
95
|
tempChosenCatalog = self.chosenCatalog[key].copy()
|
|
99
96
|
self.catalogTable.append({"": application} | {key.replace(".x", ""): value for key, value in sorted(tempChosenCatalog.items(), reverse=True)})
|
|
100
97
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
]
|
|
110
|
-
else:
|
|
111
|
-
summary = [
|
|
112
|
-
"",
|
|
113
|
-
"<u>Catalog Details</u>",
|
|
114
|
-
f"Catalog Image: icr.io/cpopen/ibm-maximo-operator-catalog:{self.getParam('mas_catalog_version')}",
|
|
115
|
-
f"Catalog Digest: {self.catalogDigest}",
|
|
116
|
-
f"MAS Releases: {', '.join(sorted(self.catalogReleases, reverse=True))}",
|
|
117
|
-
f"MongoDb: {self.catalogMongoDbVersion}",
|
|
118
|
-
]
|
|
98
|
+
summary = [
|
|
99
|
+
"",
|
|
100
|
+
"<u>Catalog Details</u>",
|
|
101
|
+
f"Catalog Image: icr.io/cpopen/ibm-maximo-operator-catalog:{self.getParam('mas_catalog_version')}",
|
|
102
|
+
f"Catalog Digest: {self.catalogDigest}",
|
|
103
|
+
f"AI Service Releases: {', '.join(sorted(self.catalogReleases, reverse=True))}",
|
|
104
|
+
f"MongoDb: {self.catalogMongoDbVersion}",
|
|
105
|
+
]
|
|
119
106
|
|
|
120
107
|
return summary
|
|
121
108
|
|
|
@@ -204,19 +191,13 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
204
191
|
|
|
205
192
|
elif key == "install_minio_aiservice":
|
|
206
193
|
incompatibleWithMinioInstall = [
|
|
207
|
-
# "aiservice_s3_provider",
|
|
208
194
|
"aiservice_s3_accesskey",
|
|
209
195
|
"aiservice_s3_secretkey",
|
|
210
196
|
"aiservice_s3_host",
|
|
211
197
|
"aiservice_s3_port",
|
|
212
198
|
"aiservice_s3_ssl",
|
|
213
199
|
"aiservice_s3_bucket_prefix",
|
|
214
|
-
|
|
215
|
-
"aiservice_s3_region",
|
|
216
|
-
# "aiservice_tenant_s3_access_key",
|
|
217
|
-
# "aiservice_tenant_s3_secret_key",
|
|
218
|
-
# "aiservice_tenant_s3_endpoint_url",
|
|
219
|
-
# "aiservice_tenant_s3_region"
|
|
200
|
+
"aiservice_s3_region"
|
|
220
201
|
]
|
|
221
202
|
if value is None:
|
|
222
203
|
for uKey in incompatibleWithMinioInstall:
|
|
@@ -241,25 +222,25 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
241
222
|
self.setParam("aiservice_s3_host", "minio-service.minio.svc.cluster.local")
|
|
242
223
|
self.setParam("aiservice_s3_port", "9000")
|
|
243
224
|
self.setParam("aiservice_s3_ssl", "false")
|
|
244
|
-
# self.setParam("aiservice_s3_endpoint_url", "http://minio-service.minio.svc.cluster.local:9000")
|
|
245
225
|
self.setParam("aiservice_s3_region", "none")
|
|
246
|
-
self.setParam("aiservice_s3_bucket_prefix", "
|
|
247
|
-
|
|
248
|
-
# self.setParam("aiservice_tenant_s3_access_key", self.args.minio_root_user)
|
|
249
|
-
# self.setParam("aiservice_tenant_s3_secret_key", self.args.minio_root_password)
|
|
250
|
-
# self.setParam("aiservice_tenant_s3_endpoint_url", "http://minio-service.minio.svc.cluster.local:9000")
|
|
251
|
-
# self.setParam("aiservice_tenant_s3_region", "none")
|
|
226
|
+
self.setParam("aiservice_s3_bucket_prefix", "s3-")
|
|
252
227
|
else:
|
|
253
228
|
self.fatalError(f"Unsupported value for --install-minio: {value}")
|
|
254
229
|
|
|
230
|
+
elif key == "aiservice_s3_bucket_prefix":
|
|
231
|
+
if len(value) == 0 or len(value) > 4:
|
|
232
|
+
self.fatalError(f"Unsupported value for --s3-bucket-prefix(Must be 1-4 characters long): {value}")
|
|
233
|
+
|
|
255
234
|
elif key == "non_prod":
|
|
256
235
|
if not value:
|
|
257
236
|
self.operationalMode = 1
|
|
258
237
|
self.setParam("environment_type", "production")
|
|
238
|
+
self.setParam("aiservice_odh_model_deployment_type", "raw")
|
|
259
239
|
else:
|
|
260
240
|
self.operationalMode = 2
|
|
261
241
|
self.setParam("mas_annotations", "mas.ibm.com/operationalMode=nonproduction")
|
|
262
242
|
self.setParam("environment_type", "non-production")
|
|
243
|
+
self.setParam("aiservice_odh_model_deployment_type", "serverless")
|
|
263
244
|
|
|
264
245
|
elif key == "additional_configs":
|
|
265
246
|
self.localConfigDir = value
|
|
@@ -383,14 +364,6 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
383
364
|
"Note: Maximo AI Service 9.1 includes a limited-use license to watsonx.ai and incurs an additional AppPoint cost"
|
|
384
365
|
])
|
|
385
366
|
|
|
386
|
-
if not self.devMode:
|
|
387
|
-
self.printDescription([
|
|
388
|
-
"",
|
|
389
|
-
"<ForestGreen>Coming Soon! We are busy putting the finishing touches on Maximo AI Service 9.1 ahead of a re-launch planned for the 28 August 2025 catalog update</ForestGreen>",
|
|
390
|
-
""
|
|
391
|
-
])
|
|
392
|
-
exit(1)
|
|
393
|
-
|
|
394
367
|
# Set image_pull_policy of the CLI in interactive mode
|
|
395
368
|
if args.image_pull_policy and args.image_pull_policy != "":
|
|
396
369
|
self.setParam("image_pull_policy", args.image_pull_policy)
|
|
@@ -421,7 +394,14 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
421
394
|
self.isAirgap()
|
|
422
395
|
|
|
423
396
|
# Configure the installOptions for the appropriate architecture
|
|
424
|
-
self.catalogOptions = supportedCatalogs[self.architecture]
|
|
397
|
+
# self.catalogOptions = supportedCatalogs[self.architecture]
|
|
398
|
+
|
|
399
|
+
# Once AI Service is supported by all supported catalogs we can remove this
|
|
400
|
+
# In the meantime we will need to update this as we go
|
|
401
|
+
self.catalogOptions = []
|
|
402
|
+
for option in supportedCatalogs[self.architecture]:
|
|
403
|
+
if option >= "v9-250828-amd64":
|
|
404
|
+
self.catalogOptions.append(option)
|
|
425
405
|
|
|
426
406
|
# Basic settings before the user provides any input
|
|
427
407
|
self.configICR()
|
|
@@ -546,69 +526,32 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
546
526
|
else:
|
|
547
527
|
# Ask for external storage configuration
|
|
548
528
|
self.printDescription(["Configure your external object storage (S3-compatible) connection details:"])
|
|
549
|
-
# s3_completer = WordCompleter(["aws", "minio"])
|
|
550
|
-
# s3_provider = self.promptForString("Storage provider", completer=s3_completer)
|
|
551
|
-
# self.setParam("aiservice_s3_provider", s3_provider)
|
|
552
529
|
self.promptForString("Storage access key", "aiservice_s3_accesskey")
|
|
553
530
|
self.promptForString("Storage secret key", "aiservice_s3_secretkey", isPassword=True)
|
|
554
531
|
self.promptForString("Storage host", "aiservice_s3_host")
|
|
555
532
|
self.promptForString("Storage port", "aiservice_s3_port")
|
|
556
533
|
self.promptForString("Storage ssl", "aiservice_s3_ssl")
|
|
557
534
|
self.promptForString("Storage region", "aiservice_s3_region")
|
|
558
|
-
self.
|
|
535
|
+
self.printDescription([
|
|
536
|
+
"",
|
|
537
|
+
"Storage bucket prefix restrictions:",
|
|
538
|
+
" - Must be 1-4 characters long"
|
|
539
|
+
])
|
|
540
|
+
self.promptForString("Storage bucket prefix", "aiservice_s3_bucket_prefix", validator=BucketPrefixValidator())
|
|
559
541
|
self.promptForString("Storage tenants bucket", "aiservice_s3_tenants_bucket")
|
|
560
542
|
self.promptForString("Storage templates bucket", "aiservice_s3_templates_bucket")
|
|
561
543
|
|
|
562
|
-
# S3 parameters are now auto-derived from storage configuration
|
|
563
|
-
# self._deriveS3ParametersFromStorage()
|
|
564
|
-
|
|
565
544
|
def aiServiceTenantSettings(self) -> None:
|
|
566
545
|
self.printH1("AI Service Tenant Settings")
|
|
567
|
-
self.
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
# storage_provider = self.getParam("aiservice_s3_provider")
|
|
577
|
-
# storage_host = self.getParam("aiservice_s3_host")
|
|
578
|
-
# storage_port = self.getParam("aiservice_s3_port")
|
|
579
|
-
# storage_ssl = self.getParam("aiservice_s3_ssl")
|
|
580
|
-
# storage_region = self.getParam("aiservice_s3_region")
|
|
581
|
-
# storage_bucket_prefix = self.getParam("aiservice_s3_bucket_prefix")
|
|
582
|
-
# storage_accesskey = self.getParam("aiservice_s3_accesskey")
|
|
583
|
-
# storage_secretkey = self.getParam("aiservice_s3_secretkey")
|
|
584
|
-
|
|
585
|
-
# # Build endpoint URL from storage configuration
|
|
586
|
-
# protocol = "https" if storage_ssl == "true" else "http"
|
|
587
|
-
|
|
588
|
-
# if storage_provider == "minio":
|
|
589
|
-
# endpoint_url = f"{protocol}://{storage_host}:{storage_port}"
|
|
590
|
-
# elif storage_provider == "aws":
|
|
591
|
-
# # For AWS S3, construct proper endpoint
|
|
592
|
-
# if storage_region and storage_region != "none":
|
|
593
|
-
# endpoint_url = f"{protocol}://s3.{storage_region}.amazonaws.com"
|
|
594
|
-
# else:
|
|
595
|
-
# endpoint_url = f"{protocol}://s3.amazonaws.com"
|
|
596
|
-
# else:
|
|
597
|
-
# # For other providers, construct basic endpoint
|
|
598
|
-
# endpoint_url = f"{protocol}://{storage_host}:{storage_port}" if storage_port else f"{protocol}://{storage_host}"
|
|
599
|
-
|
|
600
|
-
# # Set S3 parameters (reusing storage configuration)
|
|
601
|
-
# if endpoint_url:
|
|
602
|
-
# self.setParam("aiservice_s3_endpoint_url", endpoint_url)
|
|
603
|
-
# self.setParam("aiservice_s3_region", storage_region if storage_region else "none")
|
|
604
|
-
|
|
605
|
-
# # Set tenant S3 parameters (reusing same storage configuration)
|
|
606
|
-
# self.setParam("aiservice_tenant_s3_bucket_prefix", "tenant") # Default tenant prefix
|
|
607
|
-
# self.setParam("aiservice_tenant_s3_access_key", storage_accesskey)
|
|
608
|
-
# self.setParam("aiservice_tenant_s3_secret_key", storage_secretkey)
|
|
609
|
-
# if endpoint_url:
|
|
610
|
-
# self.setParam("aiservice_tenant_s3_endpoint_url", endpoint_url)
|
|
611
|
-
# self.setParam("aiservice_tenant_s3_region", storage_region if storage_region else "none")
|
|
546
|
+
self.printDescription([
|
|
547
|
+
"AI Service will reserve AppPoints for a fixed period of time based on the values you enter:"
|
|
548
|
+
])
|
|
549
|
+
|
|
550
|
+
today = datetime.today()
|
|
551
|
+
oneyear = datetime.today() + relativedelta(years=1)
|
|
552
|
+
self.setParam("tenant_entitlement_type", "standard")
|
|
553
|
+
self.setParam("tenant_entitlement_start_date", today.strftime('%Y-%m-%d'))
|
|
554
|
+
self.promptForString("Entitlement end date (YYYY-MM-DD)", "tenant_entitlement_end_date", default=oneyear.strftime('%Y-%m-%d'))
|
|
612
555
|
|
|
613
556
|
def _setMinioStorageDefaults(self) -> None:
|
|
614
557
|
"""
|
|
@@ -622,7 +565,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
622
565
|
self.setParam("aiservice_s3_port", "9000")
|
|
623
566
|
self.setParam("aiservice_s3_ssl", "false")
|
|
624
567
|
self.setParam("aiservice_s3_region", "none")
|
|
625
|
-
self.setParam("aiservice_s3_bucket_prefix", "
|
|
568
|
+
self.setParam("aiservice_s3_bucket_prefix", "s3-")
|
|
626
569
|
|
|
627
570
|
# Set default bucket names
|
|
628
571
|
self.setParam("aiservice_s3_tenants_bucket", "km-tenants")
|
|
@@ -662,7 +605,10 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
662
605
|
])
|
|
663
606
|
self.promptForString("RSL url", "rsl_url")
|
|
664
607
|
self.promptForString("ORG Id of RSL", "rsl_org_id")
|
|
665
|
-
self.promptForString("Token for RSL",
|
|
608
|
+
rslToken = self.promptForString("Token for RSL", isPassword=True)
|
|
609
|
+
if not rslToken.startswith("Bearer "):
|
|
610
|
+
rslToken = "Bearer " + rslToken
|
|
611
|
+
self.setParam("rsl_token", rslToken)
|
|
666
612
|
if self.yesOrNo("Does the RSL API use a self-signed certificate?"):
|
|
667
613
|
self.promptForString("RSL CA certificate (PEM format)", "rsl_ca_crt")
|
|
668
614
|
|
|
@@ -734,20 +680,13 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
734
680
|
self.chosenCatalog = getCatalog(self.getParam("mas_catalog_version"))
|
|
735
681
|
catalogSummary = self.processCatalogChoice()
|
|
736
682
|
self.printDescription(catalogSummary)
|
|
737
|
-
self.printDescription([
|
|
738
|
-
"",
|
|
739
|
-
"Two types of release are available:",
|
|
740
|
-
" - GA releases of Maximo Application Suite are supported under IBM's standard 3+1+3 support lifecycle policy.",
|
|
741
|
-
" - 'Feature' releases allow early access to new features for evaluation in non-production environments and are only supported through to the next GA release.",
|
|
742
|
-
""
|
|
743
|
-
])
|
|
744
|
-
|
|
745
683
|
print(tabulate(self.catalogTable, headers="keys", tablefmt="simple_grid"))
|
|
746
684
|
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
self.setParam("aiservice_channel", self.catalogReleases[releaseSelection])
|
|
685
|
+
# There's only one release channel, the user doesn't need to be prompted!!
|
|
686
|
+
# releaseCompleter = WordCompleter(sorted(self.catalogReleases, reverse=True))
|
|
687
|
+
# releaseSelection = self.promptForString("Select release", completer=releaseCompleter)
|
|
688
|
+
# self.setParam("aiservice_channel", self.catalogReleases[releaseSelection])
|
|
689
|
+
self.setParam("aiservice_channel", "9.1.x")
|
|
751
690
|
|
|
752
691
|
@logMethodCall
|
|
753
692
|
def validateCatalogSource(self):
|
|
@@ -837,7 +776,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
837
776
|
self.printH1("Configure AppPoint Licensing")
|
|
838
777
|
self.printDescription(
|
|
839
778
|
[
|
|
840
|
-
"By default the
|
|
779
|
+
"By default the AI Service instance will be configured to use a cluster-shared License, this provides a shared pool of AppPoints available to all MAS & AI Service instances on the cluster.",
|
|
841
780
|
"",
|
|
842
781
|
]
|
|
843
782
|
)
|
|
@@ -848,9 +787,9 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
848
787
|
if self.showAdvancedOptions:
|
|
849
788
|
self.printDescription(
|
|
850
789
|
[
|
|
851
|
-
"Alternatively you may choose to install using a dedicated license only available to this
|
|
852
|
-
" 1. Install
|
|
853
|
-
" 2. Install
|
|
790
|
+
"Alternatively you may choose to install using a dedicated license only available to this AI Service instance.",
|
|
791
|
+
" 1. Install AI Service with Cluster-Shared License (AppPoints)",
|
|
792
|
+
" 2. Install AI Service with Dedicated License (AppPoints)",
|
|
854
793
|
]
|
|
855
794
|
)
|
|
856
795
|
self.slsMode = self.promptForInt("SLS Mode", default=1)
|
|
@@ -897,5 +836,7 @@ class AiServiceInstallApp(BaseApp, aiServiceInstallArgBuilderMixin, aiServiceIns
|
|
|
897
836
|
self.operationalMode = self.promptForInt("Operational Mode", default=1)
|
|
898
837
|
if self.operationalMode == 1:
|
|
899
838
|
self.setParam("environment_type", "production")
|
|
839
|
+
self.setParam("aiservice_odh_model_deployment_type", "raw")
|
|
900
840
|
else:
|
|
901
841
|
self.setParam("environment_type", "non-production")
|
|
842
|
+
self.setParam("aiservice_odh_model_deployment_type", "serverless")
|
|
@@ -105,8 +105,6 @@ class aiServiceInstallArgBuilderMixin():
|
|
|
105
105
|
|
|
106
106
|
# AI Service Advanced Settings
|
|
107
107
|
# -----------------------------------------------------------------------------
|
|
108
|
-
# if self.getParam('aiservice_s3_provider') != "":
|
|
109
|
-
# command += f" --s3-provider \"{self.getParam('aiservice_s3_provider')}\"{newline}"
|
|
110
108
|
if self.getParam('aiservice_s3_accesskey') != "":
|
|
111
109
|
command += f" --s3-accesskey \"{self.getParam('aiservice_s3_accesskey')}\"{newline}"
|
|
112
110
|
if self.getParam('aiservice_s3_secretkey') != "":
|
|
@@ -126,6 +124,9 @@ class aiServiceInstallArgBuilderMixin():
|
|
|
126
124
|
if self.getParam('aiservice_s3_templates_bucket') != "":
|
|
127
125
|
command += f" --s3-templates-bucket \"{self.getParam('aiservice_s3_templates_bucket')}\"{newline}"
|
|
128
126
|
|
|
127
|
+
if self.getParam('aiservice_odh_model_deployment_type') != "":
|
|
128
|
+
command += f" --odh-model-deployment-type \"{self.getParam('aiservice_odh_model_deployment_type')}\"{newline}"
|
|
129
|
+
|
|
129
130
|
if self.getParam('aiservice_watsonxai_apikey') != "":
|
|
130
131
|
command += f" --watsonxai-apikey \"{self.getParam('aiservice_watsonxai_apikey')}\"{newline}"
|
|
131
132
|
if self.getParam('aiservice_watsonxai_url') != "":
|
|
@@ -54,13 +54,13 @@ catArgGroup.add_argument(
|
|
|
54
54
|
help="IBM entitlement key"
|
|
55
55
|
)
|
|
56
56
|
|
|
57
|
-
#
|
|
57
|
+
# AI Service Basic Configuration
|
|
58
58
|
# -----------------------------------------------------------------------------
|
|
59
|
-
masArgGroup = aiServiceinstallArgParser.add_argument_group("
|
|
59
|
+
masArgGroup = aiServiceinstallArgParser.add_argument_group("AI Service Basic Configuration")
|
|
60
60
|
masArgGroup.add_argument(
|
|
61
61
|
"-i", "--aiservice-instance-id",
|
|
62
62
|
required=False,
|
|
63
|
-
help="
|
|
63
|
+
help="AI Service Instance ID"
|
|
64
64
|
)
|
|
65
65
|
|
|
66
66
|
# MAS Advanced Configuration
|
|
@@ -171,21 +171,22 @@ masAppsArgGroup.add_argument(
|
|
|
171
171
|
help="Subscription channel for Maximo AI Service"
|
|
172
172
|
)
|
|
173
173
|
|
|
174
|
-
#
|
|
174
|
+
# ODH
|
|
175
175
|
# -----------------------------------------------------------------------------
|
|
176
|
-
|
|
176
|
+
odhArgGroup = aiServiceinstallArgParser.add_argument_group("Opendatahub")
|
|
177
|
+
|
|
178
|
+
odhArgGroup.add_argument(
|
|
179
|
+
"--odh-model-deployment-type",
|
|
180
|
+
dest="aiservice_odh_model_deployment_type",
|
|
181
|
+
required=False,
|
|
182
|
+
default="raw",
|
|
183
|
+
help="Model deployment type for ODH"
|
|
184
|
+
)
|
|
177
185
|
|
|
178
186
|
# S3 - General
|
|
179
187
|
# -----------------------------------------------------------------------------
|
|
180
188
|
s3ArgGroup = aiServiceinstallArgParser.add_argument_group("S3 Storage")
|
|
181
189
|
|
|
182
|
-
# s3ArgGroup.add_argument(
|
|
183
|
-
# "--s3-provider",
|
|
184
|
-
# dest="aiservice_s3_provider",
|
|
185
|
-
# required=False,
|
|
186
|
-
# help="S3 storage provider type (e.g., minio, aws)"
|
|
187
|
-
# )
|
|
188
|
-
|
|
189
190
|
# S3 - Minio
|
|
190
191
|
# -----------------------------------------------------------------------------
|
|
191
192
|
s3ArgGroup.add_argument(
|
|
@@ -304,23 +305,26 @@ watsonxArgGroup.add_argument(
|
|
|
304
305
|
|
|
305
306
|
# AI Service
|
|
306
307
|
# -----------------------------------------------------------------------------
|
|
308
|
+
aiServiceArgGroup = aiServiceinstallArgParser.add_argument_group("Maximo AI Service")
|
|
309
|
+
|
|
307
310
|
aiServiceArgGroup.add_argument(
|
|
308
311
|
"--tenant-entitlement-type",
|
|
309
312
|
dest="tenant_entitlement_type",
|
|
310
313
|
required=False,
|
|
311
|
-
|
|
314
|
+
default="standard",
|
|
315
|
+
help="Entitlement type for AI Service tenant"
|
|
312
316
|
)
|
|
313
317
|
aiServiceArgGroup.add_argument(
|
|
314
318
|
"--tenant-entitlement-start-date",
|
|
315
319
|
dest="tenant_entitlement_start_date",
|
|
316
320
|
required=False,
|
|
317
|
-
help="Start date for
|
|
321
|
+
help="Start date for AI Service tenant"
|
|
318
322
|
)
|
|
319
323
|
aiServiceArgGroup.add_argument(
|
|
320
324
|
"--tenant-entitlement-end-date",
|
|
321
325
|
dest="tenant_entitlement_end_date",
|
|
322
326
|
required=False,
|
|
323
|
-
help="End date for
|
|
327
|
+
help="End date for AI Service tenant"
|
|
324
328
|
)
|
|
325
329
|
aiServiceArgGroup.add_argument(
|
|
326
330
|
"--rsl-url",
|
|
@@ -57,8 +57,9 @@ optionalParams = [
|
|
|
57
57
|
# Dev Mode
|
|
58
58
|
"artifactory_username",
|
|
59
59
|
"artifactory_token",
|
|
60
|
+
# ODH
|
|
61
|
+
"aiservice_odh_model_deployment_type",
|
|
60
62
|
# AI Service
|
|
61
|
-
# "aiservice_s3_provider",
|
|
62
63
|
"aiservice_s3_accesskey",
|
|
63
64
|
"aiservice_s3_secretkey",
|
|
64
65
|
"aiservice_s3_host",
|
|
@@ -45,36 +45,33 @@ class aiServiceInstallSummarizerMixin():
|
|
|
45
45
|
self.printH2("AI Service")
|
|
46
46
|
self.printParamSummary("Release", "aiservice_channel")
|
|
47
47
|
self.printParamSummary("Instance ID", "aiservice_instance_id")
|
|
48
|
-
self.printParamSummary("Environment
|
|
48
|
+
self.printParamSummary("Environment Type", "environment_type")
|
|
49
|
+
|
|
50
|
+
self.printH2("AI Service Tenant Entitlement")
|
|
51
|
+
self.printParamSummary("Entitlement Type", "tenant_entitlement_type")
|
|
52
|
+
self.printParamSummary("Start Date", "tenant_entitlement_start_date")
|
|
53
|
+
self.printParamSummary("End Date", "tenant_entitlement_end_date")
|
|
49
54
|
|
|
50
55
|
self.printH2("S3 Configuration")
|
|
51
56
|
# self.printParamSummary("Storage provider", "aiservice_s3_provider")
|
|
52
57
|
if self.getParam("minio_root_user") is not None and self.getParam("minio_root_user") != "":
|
|
53
|
-
self.printParamSummary("
|
|
54
|
-
print()
|
|
55
|
-
self.printParamSummary("Storage access key", "aiservice_s3_accesskey")
|
|
56
|
-
self.printParamSummary("Storage host", "aiservice_s3_host")
|
|
57
|
-
self.printParamSummary("Storage port", "aiservice_s3_port")
|
|
58
|
-
self.printParamSummary("Storage ssl", "aiservice_s3_ssl")
|
|
59
|
-
self.printParamSummary("Storage region", "aiservice_s3_region")
|
|
60
|
-
self.printParamSummary("S3 bucket prefix", "aiservice_s3_bucket_prefix")
|
|
61
|
-
self.printParamSummary("Storage tenants bucket", "aiservice_s3_tenants_bucket")
|
|
62
|
-
self.printParamSummary("Storage templates bucket", "aiservice_s3_templates_bucket")
|
|
58
|
+
self.printParamSummary("Minio Root Username", "minio_root_user")
|
|
63
59
|
print()
|
|
60
|
+
self.printParamSummary("Host", "aiservice_s3_host")
|
|
61
|
+
self.printParamSummary("Port", "aiservice_s3_port")
|
|
62
|
+
self.printParamSummary("SSL Enabled", "aiservice_s3_ssl")
|
|
63
|
+
self.printParamSummary("Region", "aiservice_s3_region")
|
|
64
|
+
self.printParamSummary("Bucket Prefix", "aiservice_s3_bucket_prefix")
|
|
65
|
+
self.printParamSummary("Templates Bucket Name", "aiservice_s3_templates_bucket")
|
|
66
|
+
self.printParamSummary("Tenants Bucket Name", "aiservice_s3_tenants_bucket")
|
|
64
67
|
|
|
65
68
|
self.printH2("IBM WatsonX")
|
|
66
|
-
self.printParamSummary("
|
|
67
|
-
self.printParamSummary("
|
|
68
|
-
|
|
69
|
-
self.printH2("AI Service Tenant")
|
|
70
|
-
self.printParamSummary("Tenant entitlement type", "tenant_entitlement_type")
|
|
71
|
-
self.printParamSummary("Tenant start date", "tenant_entitlement_start_date")
|
|
72
|
-
self.printParamSummary("Tenant end date", "tenant_entitlement_end_date")
|
|
69
|
+
self.printParamSummary("URL", "aiservice_watsonxai_url")
|
|
70
|
+
self.printParamSummary("Project ID", "aiservice_watsonxai_project_id")
|
|
73
71
|
|
|
74
72
|
self.printH2("RSL")
|
|
75
|
-
self.printParamSummary("
|
|
76
|
-
self.printParamSummary("
|
|
77
|
-
self.printParamSummary("Token for RSL", "rsl_token")
|
|
73
|
+
self.printParamSummary("URL", "rsl_url")
|
|
74
|
+
self.printParamSummary("Organization ID", "rsl_org_id")
|
|
78
75
|
|
|
79
76
|
def db2Summary(self) -> None:
|
|
80
77
|
self.printH2("IBM Db2 Univeral Operator Configuration")
|
mas/cli/cli.py
CHANGED
|
@@ -117,7 +117,7 @@ class BaseApp(PrintMixin, PromptMixin):
|
|
|
117
117
|
logging.getLogger('asyncio').setLevel(logging.INFO)
|
|
118
118
|
|
|
119
119
|
# Supports extended semver, unlike mas.cli.__version__
|
|
120
|
-
self.version = "15.
|
|
120
|
+
self.version = "15.2.0"
|
|
121
121
|
self.h1count = 0
|
|
122
122
|
self.h2count = 0
|
|
123
123
|
|
mas/cli/install/catalogs.py
CHANGED
|
@@ -9,18 +9,19 @@
|
|
|
9
9
|
# *****************************************************************************
|
|
10
10
|
supportedCatalogs = {
|
|
11
11
|
"amd64": [
|
|
12
|
+
"v9-250828-amd64",
|
|
12
13
|
"v9-250731-amd64",
|
|
13
14
|
"v9-250624-amd64",
|
|
14
15
|
"v9-250501-amd64",
|
|
15
|
-
"v9-250403-amd64",
|
|
16
16
|
],
|
|
17
17
|
"s390x": [
|
|
18
|
+
"v9-250828-s390x",
|
|
18
19
|
"v9-250731-s390x",
|
|
19
20
|
"v9-250624-s390x",
|
|
20
21
|
"v9-250501-s390x",
|
|
21
|
-
"v9-250403-s390x",
|
|
22
22
|
],
|
|
23
23
|
"ppc64le": [
|
|
24
|
+
"v9-250828-ppc64le",
|
|
24
25
|
"v9-250731-ppc64le",
|
|
25
26
|
"v9-250624-ppc64le",
|
|
26
27
|
],
|