diff --git a/instance-applications/112-ibm-odh/README.md b/instance-applications/112-ibm-odh/README.md index 1f2faa46d..a36d0bdd2 100644 --- a/instance-applications/112-ibm-odh/README.md +++ b/instance-applications/112-ibm-odh/README.md @@ -4,6 +4,11 @@ Deploy and configure ODH with configurable version +## Migration to RHOAI + +**Note**: OpenDataHub (ODH) is being replaced by Red Hat OpenShift AI (RHOAI). To migrate to RHOAI, see the [RHOAI Migration Guide](../116-ibm-rhoai/README.md#migration-from-odh-to-rhoai). + +Shared resources (aiservice namespace, ServiceMesh, Authorino, Serverless operators, and NetworkPolicies) have ArgoCD protection annotations that prevent deletion during ODH uninstallation, ensuring a safe migration path to RHOAI. ## Resources Created @@ -25,6 +30,7 @@ This chart accepts the following configuration values in the ArgoCD Application ```yaml ibm_odh: + install: string # Set to "true" to enable ODH installation openshift_namespace: string odh_pipeline_channel: string odh_pipeline_installplan: string diff --git a/instance-applications/112-ibm-odh/templates/01-odh-serverless-subscription.yaml b/instance-applications/112-ibm-odh/templates/01-odh-serverless-subscription.yaml index 387de9a04..3e7d67dbb 100644 --- a/instance-applications/112-ibm-odh/templates/01-odh-serverless-subscription.yaml +++ b/instance-applications/112-ibm-odh/templates/01-odh-serverless-subscription.yaml @@ -6,6 +6,9 @@ metadata: name: {{ .Values.serverless_namespace}} annotations: argocd.argoproj.io/sync-wave: "117" + # Prevent ArgoCD from deleting this namespace during ODH to RHOAI migration + # This namespace is shared between ODH and RHOAI + argocd.argoproj.io/sync-options: Prune=false,Delete=false --- apiVersion: operators.coreos.com/v1 @@ -24,6 +27,9 @@ metadata: namespace: {{ .Values.serverless_namespace}} annotations: argocd.argoproj.io/sync-wave: "118" + # Prevent ArgoCD from deleting this subscription during ODH to RHOAI migration + # This subscription is shared between ODH and RHOAI + argocd.argoproj.io/sync-options: Prune=false,Delete=false spec: channel: stable installPlanApproval: Automatic diff --git a/instance-applications/112-ibm-odh/templates/02-odh-servicemesh-operator-sa.yaml b/instance-applications/112-ibm-odh/templates/02-odh-servicemesh-operator-sa.yaml index eb924915a..7a3a7a59f 100644 --- a/instance-applications/112-ibm-odh/templates/02-odh-servicemesh-operator-sa.yaml +++ b/instance-applications/112-ibm-odh/templates/02-odh-servicemesh-operator-sa.yaml @@ -7,6 +7,9 @@ metadata: namespace: openshift-operators annotations: argocd.argoproj.io/sync-wave: "118" + # Prevent ArgoCD from deleting this subscription during ODH to RHOAI migration + # This subscription is shared between ODH and RHOAI + argocd.argoproj.io/sync-options: Prune=false,Delete=false spec: channel: stable installPlanApproval: Automatic diff --git a/instance-applications/112-ibm-odh/templates/03-odh-authorino-operator.yaml b/instance-applications/112-ibm-odh/templates/03-odh-authorino-operator.yaml index 85bd7cdbd..05f2f1494 100644 --- a/instance-applications/112-ibm-odh/templates/03-odh-authorino-operator.yaml +++ b/instance-applications/112-ibm-odh/templates/03-odh-authorino-operator.yaml @@ -7,6 +7,9 @@ metadata: namespace: openshift-operators annotations: argocd.argoproj.io/sync-wave: "121" + # Prevent ArgoCD from deleting this subscription during ODH to RHOAI migration + # This subscription is shared between ODH and RHOAI + argocd.argoproj.io/sync-options: Prune=false,Delete=false spec: channel: stable name: authorino-operator diff --git a/instance-applications/112-ibm-odh/templates/05-odh-namespace.yaml b/instance-applications/112-ibm-odh/templates/05-odh-namespace.yaml index 9ecbeba77..bd5bc1e44 100644 --- a/instance-applications/112-ibm-odh/templates/05-odh-namespace.yaml +++ b/instance-applications/112-ibm-odh/templates/05-odh-namespace.yaml @@ -6,5 +6,8 @@ metadata: name: "{{ .Values.aiservice_namespace }}" annotations: argocd.argoproj.io/sync-wave: "128" + # Prevent ArgoCD from deleting this namespace during ODH uninstall + # This namespace is shared with RHOAI and must persist during migration + argocd.argoproj.io/sync-options: Prune=false,Delete=false {{- end }} diff --git a/instance-applications/116-ibm-rhoai/Chart.yaml b/instance-applications/116-ibm-rhoai/Chart.yaml new file mode 100644 index 000000000..006105617 --- /dev/null +++ b/instance-applications/116-ibm-rhoai/Chart.yaml @@ -0,0 +1,11 @@ +apiVersion: v2 +name: ibm-rhoai +description: IBM RHOAI (Red Hat OpenShift AI) +type: application +version: 1.0.0 + +dependencies: +- name: junitreporter + version: 1.0.0 + repository: "file://../../sub-charts/junitreporter/" + condition: junitreporter.devops_mongo_uri != "" diff --git a/instance-applications/116-ibm-rhoai/README.md b/instance-applications/116-ibm-rhoai/README.md new file mode 100644 index 000000000..c51f8c751 --- /dev/null +++ b/instance-applications/116-ibm-rhoai/README.md @@ -0,0 +1,112 @@ +IBM RHOAI (Red Hat OpenShift AI) +=============================================================================== +Deploy and configure Red Hat OpenShift AI with configurable version + + + +## Migration from ODH to RHOAI + +To migrate from OpenDataHub (ODH) to Red Hat OpenShift AI (RHOAI): + +1. **Disable ODH**: Set `ibm_odh.install: "false"` in your configuration +2. **Sync with Prune**: Sync the ODH application in ArgoCD with the prune option enabled +3. **Wait for Uninstallation**: Wait for ODH resources to be removed (shared resources like namespaces, operators, and NetworkPolicies are protected and will not be deleted) +4. **Enable RHOAI**: Set `ibm_rhoai.install: "true"` in your configuration +5. **Sync RHOAI**: Sync the RHOAI application in ArgoCD + +**Note**: The migration is safe because shared resources (aiservice namespace, ServiceMesh, Authorino, Serverless operators, and NetworkPolicies) have ArgoCD protection annotations (`Prune=false,Delete=false`) that prevent deletion during ODH uninstallation. RHOAI will reuse these existing resources. + +## Resources Created + +| Resource Type | Resource Name | Namespace | Condition | Installed By | +|--------------|---------------|-----------|-----------|--------------| +| `Namespace` | RHOAI and serverless namespaces | RHOAI-related namespaces | Always | `application_admin_role` | +| `OperatorGroup` | RHOAI operator groups | RHOAI-related namespaces | Always | `application_admin_role` | +| `Subscription` | RHOAI/operator subscriptions | RHOAI-related namespaces | Always | `application_admin_role` | +| `ServiceAccount` | RHOAI service mesh service account | RHOAI-related namespaces | Always | `application_admin_role` | +| `DSCInitialization` | RHOAI DSC initialization CR | RHOAI namespace | Always | `application_admin_role` | +| `DataScienceCluster` | RHOAI data science cluster CR | RHOAI namespace | Always | `application_admin_role` | +| `PeerAuthentication` | Istio peer authentication for RHOAI | RHOAI namespace | Always | `application_admin_role` | +| `DestinationRule` | Istio destination rule for RHOAI | RHOAI namespace | Always | `application_admin_role` | +| `NetworkPolicy` | RHOAI network policy | RHOAI namespace | Always | `application_admin_role` | + +## Configuration + +This chart accepts the following configuration values in the ArgoCD Application values: + +```yaml +ibm_rhoai: + install: string # Set to "true" to enable RHOAI installation + openshift_namespace: string + rhoai_pipeline_name: string + rhoai_pipeline_namespace: string + rhoai_pipeline_operatorName: string + rhoai_pipeline_source: string + rhoai_pipeline_sourceNamespace: string + serverless_namespace: string + serverless_operator_name: string + serverless_operator_source: string + serverless_operator_sourceNamespace: string + rhoai_OperatorGroup_name: string + rhoai_name: string + rhoai_channel: string + rhoai_namespace: string + rhoai_applications_namespace: string + rhoai_monitoring_namespace: string + rhoai_installPlanApproval: string + rhoai_source: string + rhoai_sourceNamespace: string + rhoai_pipeline_channel: string + rhoai_pipeline_installplan: string + service_mesh_namespace: string + service_mesh_channel: string + service_mesh_catalog_source: string + serverless_channel: string + authorino_catalog_source: string + rhoai_catalog_source: string + rhoai_operator_version: string + + aiservice_namespace: string + pull_secret_name: string (secret reference) + + mas_aiservice_storage_provider: string + mas_aiservice_storage_accesskey: string (secret reference) + mas_aiservice_storage_secretkey: string (secret reference) + mas_aiservice_storage_host: string + mas_aiservice_storage_port: string + mas_aiservice_storage_ssl: string + mas_aiservice_storage_region: string + mas_aiservice_storage_pipelines_bucket: string + primary_storage_class: string + aiservice_rhoai_model_deployment_type: string +``` + +**Note**: Values marked with "(secret reference)" should use the format `` to reference secrets stored in the Secrets Vault. + +## Base Instance Values + +This chart inherits common instance configuration values. The most frequently used base values are: + +```yaml +account: + id: string # Account identifier + name: string # Account name + +region: + id: string # Region identifier + name: string # Region name + +cluster: + id: string # Cluster identifier + name: string # Cluster name + +instance: + id: string # MAS instance identifier + +sm: # Secrets Manager configuration + aws_secret_region: string + aws_access_key_id: string (secret reference) + aws_secret_access_key: string (secret reference) +``` + +For complete documentation of all base instance values including optional fields like `custom_labels`, `argocluster_instance`, `application_admin_service_account`, `mas_wipe_mongo_data`, `allow_list`, `additional_vpn`, `application_configuration`, `use_postdelete_hooks`, `additional_resources`, `extensions`, `enhanced_dr`, and `cli_image_repo`, see the [Instance Base Values Reference](../../docs/reference/instance-base-values.md). diff --git a/instance-applications/116-ibm-rhoai/templates/01-rhoai-serverless-subscription.yaml b/instance-applications/116-ibm-rhoai/templates/01-rhoai-serverless-subscription.yaml new file mode 100644 index 000000000..387de9a04 --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/01-rhoai-serverless-subscription.yaml @@ -0,0 +1,33 @@ +{{- if .Values.cluster_admin_role }} +--- +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.serverless_namespace}} + annotations: + argocd.argoproj.io/sync-wave: "117" + +--- +apiVersion: operators.coreos.com/v1 +kind: OperatorGroup +metadata: + name: operatorgroup + namespace: {{ .Values.serverless_namespace}} + annotations: + argocd.argoproj.io/sync-wave: "117" + +--- +apiVersion: operators.coreos.com/v1alpha1 +kind: Subscription +metadata: + name: {{ .Values.serverless_operator_name}} + namespace: {{ .Values.serverless_namespace}} + annotations: + argocd.argoproj.io/sync-wave: "118" +spec: + channel: stable + installPlanApproval: Automatic + name: {{ .Values.serverless_operator_name}} + source: {{ .Values.serverless_operator_source}} + sourceNamespace: {{ .Values.serverless_operator_sourceNamespace}} +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/02-rhoai-servicemesh-operator-sa.yaml b/instance-applications/116-ibm-rhoai/templates/02-rhoai-servicemesh-operator-sa.yaml new file mode 100644 index 000000000..eb924915a --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/02-rhoai-servicemesh-operator-sa.yaml @@ -0,0 +1,26 @@ +{{- if .Values.cluster_admin_role }} +--- +apiVersion: operators.coreos.com/v1alpha1 +kind: Subscription +metadata: + name: servicemeshoperator + namespace: openshift-operators + annotations: + argocd.argoproj.io/sync-wave: "118" +spec: + channel: stable + installPlanApproval: Automatic + name: servicemeshoperator + source: redhat-operators + sourceNamespace: openshift-marketplace + +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: istio-operator + namespace: openshift-operators + annotations: + argocd.argoproj.io/sync-wave: "119" + +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/03-rhoai-authorino-operator.yaml b/instance-applications/116-ibm-rhoai/templates/03-rhoai-authorino-operator.yaml new file mode 100644 index 000000000..85bd7cdbd --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/03-rhoai-authorino-operator.yaml @@ -0,0 +1,15 @@ +{{- if .Values.cluster_admin_role }} +--- +apiVersion: operators.coreos.com/v1alpha1 +kind: Subscription +metadata: + name: authorino-operator + namespace: openshift-operators + annotations: + argocd.argoproj.io/sync-wave: "121" +spec: + channel: stable + name: authorino-operator + source: community-operators + sourceNamespace: openshift-marketplace +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/04-rhoai-operator-subscription.yaml b/instance-applications/116-ibm-rhoai/templates/04-rhoai-operator-subscription.yaml new file mode 100644 index 000000000..d3c3a1e53 --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/04-rhoai-operator-subscription.yaml @@ -0,0 +1,33 @@ +{{- if .Values.cluster_admin_role }} +--- +apiVersion: v1 +kind: Namespace +metadata: + name: {{ .Values.rhoai_namespace }} + annotations: + argocd.argoproj.io/sync-wave: "125" +--- +apiVersion: operators.coreos.com/v1 +kind: OperatorGroup +metadata: + name: {{ .Values.rhoai_OperatorGroup_name}} + namespace: {{ .Values.rhoai_namespace}} + annotations: + argocd.argoproj.io/sync-wave: "126" + +--- +apiVersion: operators.coreos.com/v1alpha1 +kind: Subscription +metadata: + name: {{ .Values.rhoai_name}} + namespace: {{ .Values.rhoai_namespace}} + annotations: + argocd.argoproj.io/sync-wave: "127" +spec: + channel: {{ .Values.rhoai_channel}} + installPlanApproval: {{ .Values.rhoai_installPlanApproval}} + name: {{ .Values.rhoai_name}} + source: {{ .Values.rhoai_source}} + sourceNamespace: {{ .Values.rhoai_sourceNamespace}} + startingCSV: {{ .Values.rhoai_operator_version }} +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/05-rhoai-namespace.yaml b/instance-applications/116-ibm-rhoai/templates/05-rhoai-namespace.yaml new file mode 100644 index 000000000..8ed2e5dae --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/05-rhoai-namespace.yaml @@ -0,0 +1,13 @@ +{{- if .Values.cluster_admin_role }} +--- +apiVersion: v1 +kind: Namespace +metadata: + name: "{{ .Values.aiservice_namespace }}" + annotations: + argocd.argoproj.io/sync-wave: "128" + # Prevent ArgoCD from deleting this namespace during RHOAI uninstall + # This namespace is shared with ODH and must persist during migration + argocd.argoproj.io/sync-options: Prune=false,Delete=false + +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/06-rhoai-dsc-init.yaml b/instance-applications/116-ibm-rhoai/templates/06-rhoai-dsc-init.yaml new file mode 100644 index 000000000..96e825953 --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/06-rhoai-dsc-init.yaml @@ -0,0 +1,39 @@ +{{- if .Values.application_admin_role }} +--- +apiVersion: dscinitialization.opendatahub.io/v1 +kind: DSCInitialization +metadata: + annotations: + argocd.argoproj.io/sync-wave: "130" + argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true + finalizers: + - dscinitialization.opendatahub.io/finalizer + labels: + app.kubernetes.io/created-by: rhods-operator + app.kubernetes.io/instance: default + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/name: dscinitialization + app.kubernetes.io/part-of: rhods-operator + name: default-dsci +spec: + applicationsNamespace: "{{ .Values.rhoai_applications_namespace }}" + monitoring: + managementState: Managed + namespace: "{{ .Values.rhoai_monitoring_namespace }}" + serviceMesh: + auth: + audiences: + - 'https://kubernetes.default.svc' + controlPlane: + metricsCollection: Istio + name: data-science-smcp + namespace: istio-system +{{- if eq .Values.aiservice_rhoai_model_deployment_type "raw" }} + managementState: Removed +{{- else }} + managementState: Managed +{{- end }} + trustedCABundle: + customCABundle: '' + managementState: Managed +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/07-rhoai-data-science-cluster.yaml b/instance-applications/116-ibm-rhoai/templates/07-rhoai-data-science-cluster.yaml new file mode 100644 index 000000000..9b0782cbc --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/07-rhoai-data-science-cluster.yaml @@ -0,0 +1,33 @@ +{{- if .Values.application_admin_role }} +--- +kind: DataScienceCluster +apiVersion: datasciencecluster.opendatahub.io/v1 +metadata: + annotations: + argocd.argoproj.io/sync-wave: "131" + argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true + labels: + app.kubernetes.io/created-by: rhods-operator + app.kubernetes.io/instance: default + app.kubernetes.io/managed-by: kustomize + app.kubernetes.io/name: datasciencecluster + app.kubernetes.io/part-of: rhods-operator + name: default-dsc +spec: + components: + datasciencepipelines: + managementState: Removed + kserve: + managementState: Managed + serving: + name: knative-serving + ingressGateway: + certificate: + type: SelfSigned +{{- if eq .Values.aiservice_rhoai_model_deployment_type "raw" }} + managementState: Removed + defaultDeploymentMode: RawDeployment +{{- else }} + managementState: Managed +{{- end }} +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/08-rhoai-istio-auth.yaml b/instance-applications/116-ibm-rhoai/templates/08-rhoai-istio-auth.yaml new file mode 100644 index 000000000..b2460a09b --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/08-rhoai-istio-auth.yaml @@ -0,0 +1,31 @@ +{{- if .Values.application_admin_role }} +--- +apiVersion: security.istio.io/v1beta1 +kind: PeerAuthentication +metadata: + name: default + namespace: {{ .Values.rhoai_applications_namespace }} + annotations: + argocd.argoproj.io/sync-wave: "132" + argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true +spec: + mtls: + mode: PERMISSIVE +--- +apiVersion: networking.istio.io/v1beta1 +kind: DestinationRule +metadata: + name: ds-pipeline-instance + namespace: {{ .Values.rhoai_applications_namespace }} + annotations: + argocd.argoproj.io/sync-wave: "133" + argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true +spec: + host: ds-pipeline-instance.{{ .Values.rhoai_applications_namespace }}.svc.cluster.local + trafficPolicy: + portLevelSettings: + - port: + number: 8888 + tls: + mode: ISTIO_MUTUAL +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/templates/09-rhoai-networkpolicy.yaml b/instance-applications/116-ibm-rhoai/templates/09-rhoai-networkpolicy.yaml new file mode 100644 index 000000000..b191e97bc --- /dev/null +++ b/instance-applications/116-ibm-rhoai/templates/09-rhoai-networkpolicy.yaml @@ -0,0 +1,21 @@ +{{- if .Values.application_admin_role }} +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + annotations: + argocd.argoproj.io/sync-wave: "135" + argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true + name: allow-rhods-model-controller + namespace: {{ .Values.rhoai_applications_namespace }} +spec: + podSelector: + matchLabels: + control-plane: odh-model-controller + ingress: + - from: + - namespaceSelector: {} + policyTypes: + - Ingress + +{{- end }} diff --git a/instance-applications/116-ibm-rhoai/values.yaml b/instance-applications/116-ibm-rhoai/values.yaml new file mode 100644 index 000000000..2d8d1c325 --- /dev/null +++ b/instance-applications/116-ibm-rhoai/values.yaml @@ -0,0 +1,59 @@ +--- +openshift_namespace: "openshift-operators" +rhoai_pipeline_channel: "latest" +rhoai_pipeline_installplan: "Automatic" +rhoai_namespace: "redhat-ods-operator" +rhoai_applications_namespace: "redhat-ods-applications" +rhoai_monitoring_namespace: "redhat-ods-monitoring" +service_mesh_namespace: "openshift-operators" +service_mesh_channel: "stable" +service_mesh_catalog_source: "redhat-operators" +service_mesh_sourceNamespace: "openshift-marketplace" +serverless_channel: "stable" +authorino_catalog_source: "community-operators" +rhoai_channel: "stable" +rhoai_catalog_source: "redhat-operators" +rhoai_operator_version: "rhods-operator.2.25.4" + +#RHOAI_Pipeline_operator +rhoai_pipeline_name: "openshift-pipelines-operator" +rhoai_pipeline_namespace: "openshift-operators" +rhoai_pipeline_operatorName: "openshift-pipelines-operator-rh" +rhoai_pipeline_source: "redhat-operators" +rhoai_pipeline_sourceNamespace: "openshift-marketplace" + +#Serverless Operator +serverless_namespace: "openshift-serverless" +serverless_operator_name: "serverless-operator" +serverless_operator_source: "redhat-operators" +serverless_operator_sourceNamespace: "openshift-marketplace" + +#RHOAI Operator +rhoai_OperatorGroup_name: "redhat-ods-operator-group" +rhoai_name: "rhods-operator" +rhoai_installPlanApproval: "Automatic" +rhoai_source: "redhat-operators" +rhoai_sourceNamespace: "openshift-marketplace" + +namespace: "openshift-operators" +channel: "latest" +operatorName: "openshift-pipelines-operator-rh" +source: "redhat-operators" +sourceNamespace: "openshift-marketplace" + +aiservice_namespace: "mas-sremat-aiservice" +pull_secret_name: "ibm_entitlement" + +# RHOAI deployment mode: "raw" or "serverless" +aiservice_rhoai_model_deployment_type: "raw" + +# Storage vars +mas_aiservice_storage_provider: "aws" +mas_aiservice_storage_accesskey: "aiservice_storage_accesskey" +mas_aiservice_storage_secretkey: "aiservice_storage_secretkey" +mas_aiservice_storage_host: "mas_aiservice_storage_host" +mas_aiservice_storage_port: "mas_aiservice_storage_port" +mas_aiservice_storage_ssl: "mas_aiservice_storage_ssl" +mas_aiservice_storage_region: "mas_aiservice_storage_region" +mas_aiservice_storage_pipelines_bucket: "mas_aiservice_storage_pipelines_bucket" +primary_storage_class: "defaultStorageClasses" diff --git a/root-applications/ibm-aiservice-instance-root/README.md b/root-applications/ibm-aiservice-instance-root/README.md index 0ec473222..102dc473a 100644 --- a/root-applications/ibm-aiservice-instance-root/README.md +++ b/root-applications/ibm-aiservice-instance-root/README.md @@ -181,6 +181,7 @@ The following table lists all ArgoCD applications defined in the templates folde | Template File | Application Name | Cluster Admin Role | Application Admin Role | Both Roles | |--------------|------------------|-------------------|----------------------|------------| | [`030-ibm-odh-app.yaml`](templates/030-ibm-odh-app.yaml) | odh | - | - | ✓ | +| [`031-ibm-rhoai-app.yaml`](templates/031-ibm-rhoai-app.yaml) | rhoai | - | - | ✓ | | [`040-ibm-aiservice-app.yaml`](templates/040-ibm-aiservice-app.yaml) | aiservice | - | - | ✓ | | [`070-aiservice-tenant-appset.yaml`](templates/070-aiservice-tenant-appset.yaml) | ai-tenant-appset (ApplicationSet) | - | - | ✓ | diff --git a/root-applications/ibm-aiservice-instance-root/templates/030-ibm-odh-app.yaml b/root-applications/ibm-aiservice-instance-root/templates/030-ibm-odh-app.yaml index a74e04772..c7ddcffda 100644 --- a/root-applications/ibm-aiservice-instance-root/templates/030-ibm-odh-app.yaml +++ b/root-applications/ibm-aiservice-instance-root/templates/030-ibm-odh-app.yaml @@ -1,4 +1,4 @@ -{{- if not (empty .Values.ibm_odh) }} +{{- if and (not (empty .Values.ibm_odh)) (eq .Values.ibm_odh.action "install") }} --- # IBM Maximo ODH apiVersion: argoproj.io/v1alpha1 diff --git a/root-applications/ibm-aiservice-instance-root/templates/031-ibm-rhoai-app.yaml b/root-applications/ibm-aiservice-instance-root/templates/031-ibm-rhoai-app.yaml new file mode 100644 index 000000000..a22f43a36 --- /dev/null +++ b/root-applications/ibm-aiservice-instance-root/templates/031-ibm-rhoai-app.yaml @@ -0,0 +1,120 @@ +{{- if and (not (empty .Values.ibm_rhoai)) (eq .Values.ibm_rhoai.action "install") }} +--- +# IBM Maximo RHOAI (Red Hat OpenShift AI) +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: rhoai.{{ .Values.cluster.id }}.{{ .Values.instance.id }} + namespace: {{ .Values.argo.namespace }} + labels: + environment: '{{ .Values.account.id }}' + region: '{{ .Values.region.id }}' + cluster: '{{ .Values.cluster.id }}' + {{- if .Values.argo.instance }} + argocd.argoproj.io/instance: '{{ .Values.argo.instance }}' + {{- end }} + instance: '{{ .Values.instance.id }}' + annotations: + argocd.argoproj.io/sync-wave: "031" + healthCheckTimeout: "1800" + {{- if and .Values.notifications .Values.notifications.slack_channel_id }} + notifications.argoproj.io/subscribe.on-sync-failed.workspace1: {{ .Values.notifications.slack_channel_id }} + notifications.argoproj.io/subscribe.on-sync-succeeded.workspace1: {{ .Values.notifications.slack_channel_id }} + {{- end }} + finalizers: + - resources-finalizer.argocd.argoproj.io +spec: + project: "{{ .Values.argo.projects.apps }}" + destination: + server: {{ .Values.cluster.url }} + namespace: "{{ .Values.ibm_rhoai.openshift_namespace }}" + source: + repoURL: "{{ .Values.source.repo_url }}" + path: instance-applications/116-ibm-rhoai + targetRevision: "{{ .Values.source.revision }}" + plugin: + name: {{ .Values.avp.name }} + env: + - name: {{ .Values.avp.values_varname }} + value: | + openshift_namespace: "{{ .Values.ibm_rhoai.openshift_namespace }}" + cluster_admin_role: {{ .Values.cluster_admin_role }} + application_admin_role: {{ .Values.application_admin_role }} + rhoai_pipeline_name: "{{ .Values.ibm_rhoai.rhoai_pipeline_name }}" + rhoai_pipeline_namespace: "{{ .Values.ibm_rhoai.rhoai_pipeline_namespace }}" + rhoai_pipeline_operatorName: "{{ .Values.ibm_rhoai.rhoai_pipeline_operatorName }}" + rhoai_pipeline_source: "{{ .Values.ibm_rhoai.rhoai_pipeline_source }}" + rhoai_pipeline_sourceNamespace: "{{ .Values.ibm_rhoai.rhoai_pipeline_sourceNamespace }}" + serverless_namespace: "{{ .Values.ibm_rhoai.serverless_namespace }}" + serverless_operator_name: "{{ .Values.ibm_rhoai.serverless_operator_name }}" + serverless_operator_source: "{{ .Values.ibm_rhoai.serverless_operator_source }}" + serverless_operator_sourceNamespace: "{{ .Values.ibm_rhoai.serverless_operator_sourceNamespace }}" + rhoai_OperatorGroup_name: "{{ .Values.ibm_rhoai.rhoai_OperatorGroup_name }}" + rhoai_name: "{{ .Values.ibm_rhoai.rhoai_name }}" + rhoai_channel: "{{ .Values.ibm_rhoai.rhoai_channel }}" + rhoai_namespace: "{{ .Values.ibm_rhoai.rhoai_namespace }}" + rhoai_applications_namespace: "{{ .Values.ibm_rhoai.rhoai_applications_namespace }}" + rhoai_monitoring_namespace: "{{ .Values.ibm_rhoai.rhoai_monitoring_namespace }}" + rhoai_installPlanApproval: "{{ .Values.ibm_rhoai.rhoai_installPlanApproval }}" + rhoai_source: "{{ .Values.ibm_rhoai.rhoai_source }}" + rhoai_sourceNamespace: "{{ .Values.ibm_rhoai.rhoai_sourceNamespace }}" + + rhoai_pipeline_channel: "{{ .Values.ibm_rhoai.rhoai_pipeline_channel }}" + rhoai_pipeline_installplan: "{{ .Values.ibm_rhoai.rhoai_pipeline_installplan }}" + service_mesh_namespace: "{{ .Values.ibm_rhoai.service_mesh_namespace }}" + service_mesh_channel: "{{ .Values.ibm_rhoai.service_mesh_channel }}" + service_mesh_catalog_source: "{{ .Values.ibm_rhoai.service_mesh_catalog_source }}" + serverless_channel: "{{ .Values.ibm_rhoai.serverless_channel }}" + authorino_catalog_source: "{{ .Values.ibm_rhoai.authorino_catalog_source }}" + rhoai_catalog_source: "{{ .Values.ibm_rhoai.rhoai_catalog_source }}" + rhoai_operator_version: "{{ .Values.ibm_rhoai.rhoai_operator_version }}" + aiservice_namespace: "{{ .Values.ibm_rhoai.aiservice_namespace }}" + pull_secret_name: "{{ .Values.ibm_rhoai.pull_secret_name }}" + mas_aiservice_storage_provider: "{{ .Values.ibm_rhoai.mas_aiservice_storage_provider }}" + mas_aiservice_storage_accesskey: "{{ .Values.ibm_rhoai.mas_aiservice_storage_accesskey }}" + mas_aiservice_storage_secretkey: "{{ .Values.ibm_rhoai.mas_aiservice_storage_secretkey }}" + mas_aiservice_storage_host: "{{ .Values.ibm_rhoai.mas_aiservice_storage_host }}" + mas_aiservice_storage_port: "{{ .Values.ibm_rhoai.mas_aiservice_storage_port }}" + mas_aiservice_storage_ssl: "{{ .Values.ibm_rhoai.mas_aiservice_storage_ssl }}" + mas_aiservice_storage_region: "{{ .Values.ibm_rhoai.mas_aiservice_storage_region }}" + mas_aiservice_storage_pipelines_bucket: "{{ .Values.ibm_rhoai.mas_aiservice_storage_pipelines_bucket }}" + primary_storage_class: "{{ .Values.ibm_rhoai.primary_storage_class }}" + aiservice_rhoai_model_deployment_type: "{{ .Values.aiservice_rhoai_model_deployment_type }}" + {{- if .Values.custom_labels }} + custom_labels: {{ .Values.custom_labels | toYaml | nindent 14 }} + {{- end }} + junitreporter: + reporter_name: "ibm-rhoai-{{ .Values.instance.id }}" + cluster_id: "{{ .Values.cluster.id }}" + devops_mongo_uri: "{{ .Values.devops.mongo_uri }}" + devops_build_number: "{{ .Values.devops.build_number }}" + gitops_version: "{{ .Values.source.revision }}" + - name: ARGOCD_APP_NAME + value: rhoai + {{- if not (empty .Values.avp.secret) }} + - name: AVP_SECRET + value: {{ .Values.avp.secret }} + {{- end }} + syncPolicy: + automated: + {{- if .Values.auto_delete }} + prune: true + {{- end }} + selfHeal: true + retry: + limit: 20 + syncOptions: + {{- if .Values.cluster_admin_role }} + - CreateNamespace=true + {{- end }} +{{- if or .Values.custom_labels .Values.argocluster_instance }} + managedNamespaceMetadata: + labels: + {{- if .Values.argocluster_instance }} + argocd.argoproj.io/managed-by: {{ .Values.argocluster_instance }} + {{- end }} + {{- if .Values.custom_labels }} +{{ .Values.custom_labels | toYaml | indent 8 }} + {{- end }} +{{- end }} +{{- end }} diff --git a/root-applications/ibm-aiservice-instance-root/values.yaml b/root-applications/ibm-aiservice-instance-root/values.yaml index 0e92a8b2e..12af058a4 100644 --- a/root-applications/ibm-aiservice-instance-root/values.yaml +++ b/root-applications/ibm-aiservice-instance-root/values.yaml @@ -65,6 +65,7 @@ ibm_minio: ibm_odh: + action: "uninstall" openshift_namespace: "openshift-operators" odh_pipeline_channel: "latest" odh_pipeline_installplan: "Automatic" @@ -108,16 +109,52 @@ ibm_odh: mas_aiservice_storage_ssl: "mas_aiservice_storage_ssl" mas_aiservice_storage_region: "mas_aiservice_storage_region" - # MariaDB - mas_aiservice_db_host: "mas_aiservice_db_host" - mas_aiservice_db_port: "mas_aiservice_db_port" - mas_aiservice_db_user: "mas_aiservice_db_user" - mas_aiservice_db_database: "mas_aiservice_db_database" +ibm_rhoai: + action: "uninstall" + openshift_namespace: "openshift-operators" + rhoai_pipeline_channel: "latest" + rhoai_pipeline_installplan: "Automatic" + rhoai_namespace: "redhat-ods-operator" + rhoai_applications_namespace: "redhat-ods-applications" + rhoai_monitoring_namespace: "redhat-ods-monitoring" + service_mesh_namespace: "openshift-operators" + service_mesh_channel: "stable" + service_mesh_catalog_source: "redhat-operators" + serverless_channel: "stable" + authorino_catalog_source: "community-operators" + rhoai_channel: "stable" + rhoai_catalog_source: "redhat-operators" + rhoai_operator_version: "rhods-operator.2.25.4" + #RHOAI_Pipeline_operator + rhoai_pipeline_name: "openshift-pipelines-operator" + rhoai_pipeline_namespace: "openshift-operators" + rhoai_pipeline_operatorName: "openshift-pipelines-operator-rh" + rhoai_pipeline_source: "redhat-operators" + rhoai_pipeline_sourceNamespace: "openshift-marketplace" + openshiftai_installPlanApproval: "Automatic" - mas_aiservice_db_secret_key: "mas_aiservice_db_secret_key" - mas_aiservice_db_secret_name: "mas_aiservice_db_secret_name" - mas_aiservice_db_secret_value: "mas_aiservice_db_secret_value" + #Serverless Operator + serverless_namespace: "openshift-serverless" + serverless_operator_name: "serverless-operator" + serverless_operator_source: "redhat-operators" + serverless_operator_sourceNamespace: "openshift-marketplace" + + #RHOAI Operator + rhoai_OperatorGroup_name: "redhat-ods-operator-group" + rhoai_name: "rhods-operator" + rhoai_installPlanApproval: "Automatic" + rhoai_source: "redhat-operators" + rhoai_sourceNamespace: "openshift-marketplace" + aiservice_namespace: "mas-sremat-aiservice" + pull_secret_name: "ibm_entitlement" + mas_aiservice_storage_provider: "minio" + mas_aiservice_storage_accesskey: "" + mas_aiservice_storage_secretkey: "" + mas_aiservice_storage_host: "mas_aiservice_storage_host" + mas_aiservice_storage_port: "mas_aiservice_storage_port" + mas_aiservice_storage_ssl: "mas_aiservice_storage_ssl" + mas_aiservice_storage_region: "mas_aiservice_storage_region" mas_aiservice_storage_pipelines_bucket: "mas_aiservice_storage_pipelines_bucket" primary_storage_class: "nfs-client" diff --git a/root-applications/ibm-mas-cluster-root/templates/099-aiservice-instance-appset.yaml b/root-applications/ibm-mas-cluster-root/templates/099-aiservice-instance-appset.yaml index d4259f978..23310d15f 100644 --- a/root-applications/ibm-mas-cluster-root/templates/099-aiservice-instance-appset.yaml +++ b/root-applications/ibm-mas-cluster-root/templates/099-aiservice-instance-appset.yaml @@ -36,7 +36,12 @@ spec: repoURL: "{{ .Values.generator.repo_url }}" revision: "{{ .Values.generator.revision }}" files: - - path: "{{ .Values.account.id }}/{{ .Values.cluster.id }}/*/ibm-mas-odh-install.yaml" + - path: "{{ .Values.account.id }}/{{ .Values.cluster.id }}/*/ibm-mas-odh-install.yaml" + - git: + repoURL: "{{ .Values.generator.repo_url }}" + revision: "{{ .Values.generator.revision }}" + files: + - path: "{{ .Values.account.id }}/{{ .Values.cluster.id }}/*/ibm-mas-rhoai-install.yaml" - git: repoURL: "{{ .Values.generator.repo_url }}" revision: "{{ .Values.generator.revision }}"