diff --git a/files/default-primary-install-config.json b/files/default-primary-install-config.json deleted file mode 100644 index 32c6e78..0000000 --- a/files/default-primary-install-config.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "apiVersion": "v1", - "baseDomain": "cluster.example.com", - "metadata": { - "name": "ocp-primary" - }, - "controlPlane": { - "name": "master", - "replicas": 3, - "platform": { - "aws": { - "type": "m5.4xlarge" - } - } - }, - "compute": [ - { - "name": "worker", - "replicas": 3, - "platform": { - "aws": { - "type": "m5.metal" - } - } - } - ], - "networking": { - "clusterNetwork": [ - { - "cidr": "10.132.0.0/14", - "hostPrefix": 23 - } - ], - "machineNetwork": [ - { - "cidr": "10.1.0.0/16" - } - ], - "networkType": "OVNKubernetes", - "serviceNetwork": ["172.20.0.0/16"] - }, - "platform": { - "aws": { - "region": "us-west-1", - "userTags": { - "project": "ValidatedPatterns" - } - } - }, - "publish": "External", - "sshKey": "", - "pullSecret": "" -} diff --git a/files/default-secondary-install-config.json b/files/default-secondary-install-config.json deleted file mode 100644 index f3a4636..0000000 --- a/files/default-secondary-install-config.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "apiVersion": "v1", - "baseDomain": "cluster.example.com", - "metadata": { - "name": "ocp-secondary" - }, - "controlPlane": { - "name": "master", - "replicas": 3, - "platform": { - "aws": { - "type": "m5.4xlarge" - } - } - }, - "compute": [ - { - "name": "worker", - "replicas": 3, - "platform": { - "aws": { - "type": "m5.metal" - } - } - } - ], - "networking": { - "clusterNetwork": [ - { - "cidr": "10.136.0.0/14", - "hostPrefix": 23 - } - ], - "machineNetwork": [ - { - "cidr": "10.2.0.0/16" - } - ], - "networkType": "OVNKubernetes", - "serviceNetwork": ["172.21.0.0/16"] - }, - "platform": { - "aws": { - "region": "us-east-1", - "userTags": { - "project": "ValidatedPatterns" - } - } - }, - "publish": "External", - "sshKey": "", - "pullSecret": "" -} diff --git a/templates/_helpers.tpl b/templates/_helpers.tpl index 87a7e29..7059140 100644 --- a/templates/_helpers.tpl +++ b/templates/_helpers.tpl @@ -1,138 +1,17 @@ -{{/* - Sanitize install_config for OpenShift installer: ensure apiVersion, pass through all - install-config fields (including full platform.aws: region, subnets, userTags, amiID, - defaultMachinePlatform, serviceEndpoints, etc.) so regionalDR and clusterOverrides - can override platform/region effectively. Only strip keys known invalid for the - installer (e.g. vpc in platform.aws). -*/}} -{{- define "rdr.sanitizeInstallConfig" -}} -{{- $raw := . -}} -{{- $withVersion := merge (dict "apiVersion" "v1") $raw -}} -{{- $platform := index $withVersion "platform" | default dict -}} -{{- $aws := index $platform "aws" | default dict -}} -{{- $awsSafe := ternary (omit $aws "vpc") $aws (and (kindIs "map" $aws) (hasKey $aws "vpc")) -}} -{{- $platformSafe := merge (dict "aws" $awsSafe) $platform -}} -{{- $allowed := dict "apiVersion" (index $withVersion "apiVersion") "baseDomain" (index $withVersion "baseDomain") "metadata" (index $withVersion "metadata") "controlPlane" (index $withVersion "controlPlane") "compute" (index $withVersion "compute") "networking" (index $withVersion "networking") "platform" $platformSafe "publish" (index $withVersion "publish") "pullSecret" (index $withVersion "pullSecret") "sshKey" (index $withVersion "sshKey") -}} -{{- $allowed | toJson -}} -{{- end -}} - -{{/* - Deep-merge install_config so clusterOverrides can override only platform/region, - metadata, or any subset without replacing the rest of base install_config. - Call with dict "base" "over" . -*/}} -{{- define "rdr.mergeInstallConfig" -}} -{{- $base := .base | default dict -}} -{{- $over := .over | default dict -}} -{{- $merged := merge $over $base -}} -{{- $metadataMerged := merge (index $over "metadata" | default dict) (index $base "metadata" | default dict) -}} -{{- $merged := merge (dict "metadata" $metadataMerged) $merged -}} -{{- $platformBase := index $base "platform" | default dict -}} -{{- $platformOver := index $over "platform" | default dict -}} -{{- $awsBase := index $platformBase "aws" | default dict -}} -{{- $awsOver := index $platformOver "aws" | default dict -}} -{{- $awsMerged := merge $awsOver $awsBase -}} -{{- $platformFinal := merge (dict "aws" $awsMerged) $platformBase -}} -{{- merge (dict "platform" $platformFinal) $merged | toJson -}} -{{- end -}} - -{{/* - Effective primary cluster: merge of regionalDR[0].clusters.primary and clusterOverrides.primary. - Use when clusterOverrides is set to avoid replacing full regionalDR in override file. -*/}} -{{- define "rdr.effectivePrimaryCluster" -}} -{{- $dr := index .Values.regionalDR 0 -}} -{{- $over := index (.Values.clusterOverrides | default dict) "primary" | default dict -}} -{{- $base := $dr.clusters.primary -}} -{{- $baseIC := $base.install_config | default dict -}} -{{- if and (index . "Files") (not (hasKey $baseIC "controlPlane")) -}} -{{- $baseIC = fromJson ((index . "Files").Get "files/default-primary-install-config.json") | default dict -}} -{{- end -}} -{{- $overIC := index . "primaryOverrideInstallConfig" | default $over.install_config | default dict -}} -{{- $merged := merge $overIC $baseIC -}} -{{- $metadataMerged := merge (index $overIC "metadata" | default dict) (index $baseIC "metadata" | default dict) -}} -{{- $merged := merge (dict "metadata" $metadataMerged) $merged -}} -{{- $platformBase := index $baseIC "platform" | default dict -}} -{{- $awsBase := index $platformBase "aws" | default dict -}} -{{- $awsOver := index (index $overIC "platform" | default dict) "aws" | default dict -}} -{{- $awsMerged := merge $awsOver $awsBase -}} -{{- $platformFinal := merge (dict "aws" $awsMerged) $platformBase -}} -{{- $merged := merge (dict "platform" $platformFinal) $merged -}} -{{- $cpBase := index $baseIC "controlPlane" | default dict -}} -{{- $cpOver := index $overIC "controlPlane" | default dict -}} -{{- $cpMerged := merge $cpOver $cpBase -}} -{{- $cpPlatformBase := index $cpBase "platform" | default dict -}} -{{- $cpPlatformOver := index $cpOver "platform" | default dict -}} -{{- $cpAwsBase := index $cpPlatformBase "aws" | default dict -}} -{{- $cpAwsOver := index $cpPlatformOver "aws" | default dict -}} -{{- $cpAwsMerged := merge $cpAwsOver $cpAwsBase -}} -{{- $cpPlatformFinal := merge (dict "aws" $cpAwsMerged) $cpPlatformBase -}} -{{- $controlPlaneFinal := merge (dict "platform" $cpPlatformFinal) $cpMerged -}} -{{- $merged := merge (dict "controlPlane" $controlPlaneFinal) $merged -}} -{{- $computeBase := index $baseIC "compute" | default list -}} -{{- $computeOver := index $overIC "compute" | default list -}} -{{- $computeFinal := ternary $computeOver $computeBase (gt (len $computeOver) 0) -}} -{{- $installConfig := merge (dict "compute" $computeFinal) $merged -}} -{{- $installConfigSafe := fromJson (include "rdr.sanitizeInstallConfig" $installConfig) -}} -{{- $defaultBaseDomain := join "." (slice (splitList "." (.Values.global.clusterDomain | default "cluster.example.com")) 1) -}} -{{- $installConfigWithBase := merge (dict "baseDomain" ($defaultBaseDomain | default (index $installConfigSafe "baseDomain"))) $installConfigSafe -}} -{{- $clusterGroup := index $over "clusterGroup" | default $base.clusterGroup | default $dr.name -}} -{{- dict "name" (index $over "name" | default $base.name) "version" (index $over "version" | default $base.version) "clusterGroup" $clusterGroup "install_config" $installConfigWithBase | toJson -}} -{{- end -}} - -{{/* - Effective secondary cluster: merge of regionalDR[0].clusters.secondary and clusterOverrides.secondary. -*/}} -{{- define "rdr.effectiveSecondaryCluster" -}} -{{- $dr := index .Values.regionalDR 0 -}} -{{- $over := index (.Values.clusterOverrides | default dict) "secondary" | default dict -}} -{{- $base := $dr.clusters.secondary -}} -{{- $baseIC := $base.install_config | default dict -}} -{{- if and (index . "Files") (not (hasKey $baseIC "controlPlane")) -}} -{{- $baseIC = fromJson ((index . "Files").Get "files/default-secondary-install-config.json") | default dict -}} -{{- end -}} -{{- $overIC := index . "secondaryOverrideInstallConfig" | default $over.install_config | default dict -}} -{{- $merged := merge $overIC $baseIC -}} -{{- $metadataMerged := merge (index $overIC "metadata" | default dict) (index $baseIC "metadata" | default dict) -}} -{{- $merged := merge (dict "metadata" $metadataMerged) $merged -}} -{{- $platformBase := index $baseIC "platform" | default dict -}} -{{- $awsBase := index $platformBase "aws" | default dict -}} -{{- $awsOver := index (index $overIC "platform" | default dict) "aws" | default dict -}} -{{- $awsMerged := merge $awsOver $awsBase -}} -{{- $platformFinal := merge (dict "aws" $awsMerged) $platformBase -}} -{{- $merged := merge (dict "platform" $platformFinal) $merged -}} -{{- $cpBase := index $baseIC "controlPlane" | default dict -}} -{{- $cpOver := index $overIC "controlPlane" | default dict -}} -{{- $cpMerged := merge $cpOver $cpBase -}} -{{- $cpPlatformBase := index $cpBase "platform" | default dict -}} -{{- $cpPlatformOver := index $cpOver "platform" | default dict -}} -{{- $cpAwsBase := index $cpPlatformBase "aws" | default dict -}} -{{- $cpAwsOver := index $cpPlatformOver "aws" | default dict -}} -{{- $cpAwsMerged := merge $cpAwsOver $cpAwsBase -}} -{{- $cpPlatformFinal := merge (dict "aws" $cpAwsMerged) $cpPlatformBase -}} -{{- $controlPlaneFinal := merge (dict "platform" $cpPlatformFinal) $cpMerged -}} -{{- $merged := merge (dict "controlPlane" $controlPlaneFinal) $merged -}} -{{- $computeBase := index $baseIC "compute" | default list -}} -{{- $computeOver := index $overIC "compute" | default list -}} -{{- $computeFinal := ternary $computeOver $computeBase (gt (len $computeOver) 0) -}} -{{- $installConfig := merge (dict "compute" $computeFinal) $merged -}} -{{- $installConfigSafe := fromJson (include "rdr.sanitizeInstallConfig" $installConfig) -}} -{{- $defaultBaseDomain := join "." (slice (splitList "." (.Values.global.clusterDomain | default "cluster.example.com")) 1) -}} -{{- $installConfigWithBase := merge (dict "baseDomain" ($defaultBaseDomain | default (index $installConfigSafe "baseDomain"))) $installConfigSafe -}} -{{- $clusterGroup := index $over "clusterGroup" | default $base.clusterGroup | default $dr.name -}} -{{- dict "name" (index $over "name" | default $base.name) "version" (index $over "version" | default $base.version) "clusterGroup" $clusterGroup "install_config" $installConfigWithBase | toJson -}} -{{- end -}} - {{/* Primary cluster name for use in jobs, MirrorPeer, DRPC, etc. */}} {{- define "rdr.primaryClusterName" -}} {{- $dr := index .Values.regionalDR 0 -}} -{{- index (index (.Values.clusterOverrides | default dict) "primary" | default dict) "name" | default $dr.clusters.primary.name -}} +{{- $override := index (index (.Values.clusterOverrides | default dict) "primary" | default dict) "name" -}} +{{- $fallback := index (index ($dr.clusters | default dict) "primary" | default dict) "name" -}} +{{- $override | default $fallback -}} {{- end -}} {{/* Secondary cluster name */}} {{- define "rdr.secondaryClusterName" -}} {{- $dr := index .Values.regionalDR 0 -}} -{{- index (index (.Values.clusterOverrides | default dict) "secondary" | default dict) "name" | default $dr.clusters.secondary.name -}} +{{- $override := index (index (.Values.clusterOverrides | default dict) "secondary" | default dict) "name" -}} +{{- $fallback := index (index ($dr.clusters | default dict) "secondary" | default dict) "name" -}} +{{- $override | default $fallback -}} {{- end -}} {{/* regionalDR[0].name (ClusterSet); Submariner broker namespace = name + "-broker" */}} diff --git a/templates/submariner_addon_install.yaml b/templates/submariner_addon_install.yaml index 6e0093a..d40a170 100644 --- a/templates/submariner_addon_install.yaml +++ b/templates/submariner_addon_install.yaml @@ -22,9 +22,9 @@ spec: globalnetEnabled: {{ $globalnetEnabled | default false }} -{{- $effectivePrimary := include "rdr.effectivePrimaryCluster" . | fromJson }} -{{- $effectiveSecondary := include "rdr.effectiveSecondaryCluster" . | fromJson }} -{{- range list $effectivePrimary $effectiveSecondary }} +{{- $primaryName := include "rdr.primaryClusterName" . | trim }} +{{- $secondaryName := include "rdr.secondaryClusterName" . | trim }} +{{- range list (dict "name" $primaryName) (dict "name" $secondaryName) }} {{- $cluster := . }} {{- $awsPlat := eq "1" (include "rdr.clusterPlatformAws" $ | trim) }} --- diff --git a/values.yaml b/values.yaml index 51b8bf5..604cecf 100644 --- a/values.yaml +++ b/values.yaml @@ -30,110 +30,6 @@ regionalDR: name: resilient # -- Enable Submariner Globalnet. Required when primary and secondary cluster CIDRs overlap. globalnetEnabled: false - clusters: - primary: - # -- ACM ManagedCluster metadata.name for the primary cluster. - name: ocp-primary - # -- Cluster group label for the primary cluster. - clusterGroup: resilient - # -- OCP version for the primary cluster (used by Hive ClusterDeployment). - version: 4.18.7 - install_config: - apiVersion: v1 - baseDomain: '{{ join "." (slice (splitList "." $.Values.global.clusterDomain) 1) }}' - metadata: - name: ocp-primary - controlPlane: - name: master - replicas: 3 - platform: - aws: - type: m5.4xlarge - compute: - - name: worker - replicas: 3 - platform: - aws: - type: m5.metal - networking: - clusterNetwork: - - cidr: 10.132.0.0/14 - hostPrefix: 23 - machineNetwork: - - cidr: 10.1.0.0/16 - networkType: OVNKubernetes - serviceNetwork: - - 172.20.0.0/16 - platform: - aws: - # -- AWS region for the primary cluster. - region: us-west-1 - userTags: - project: ValidatedPatterns - publish: External - # -- SSH public key injected into cluster nodes. Leave empty to use the hub's default. - sshKey: "" - # -- OpenShift pull secret (base64-encoded JSON). Leave empty to inherit from hub. - pullSecret: "" - secondary: - # -- ACM ManagedCluster metadata.name for the secondary cluster. - name: ocp-secondary - # -- Cluster group label for the secondary cluster. - clusterGroup: resilient - # -- OCP version for the secondary cluster (used by Hive ClusterDeployment). - version: 4.18.7 - install_config: - apiVersion: v1 - baseDomain: '{{ join "." (slice (splitList "." $.Values.global.clusterDomain) 1) }}' - metadata: - name: ocp-secondary - controlPlane: - name: master - replicas: 3 - platform: - aws: - type: m5.4xlarge - compute: - - name: worker - replicas: 3 - platform: - aws: - type: m5.metal - networking: - clusterNetwork: - - cidr: 10.136.0.0/14 - hostPrefix: 23 - machineNetwork: - - cidr: 10.2.0.0/16 - networkType: OVNKubernetes - serviceNetwork: - - 172.21.0.0/16 - platform: - aws: - # -- AWS region for the secondary cluster. - region: us-east-1 - userTags: - project: ValidatedPatterns - publish: External - # -- SSH public key injected into cluster nodes. Leave empty to use the hub's default. - sshKey: "" - # -- OpenShift pull secret (base64-encoded JSON). Leave empty to inherit from hub. - pullSecret: "" - -# Minimal cluster name/region overrides — used instead of replacing full regionalDR. -# clusterOverrides: -# primary: -# name: ocp-primary -# version: 4.18.7 -# install_config: -# metadata: -# name: ocp-primary -# platform: -# aws: -# region: us-west-1 -# secondary: -# name: ocp-secondary -# ... submariner: # -- EC2 instance type for Submariner gateway nodes.