|
1 | 1 | # ACM (Advanced Cluster Management) installation targets for OpenShift |
2 | 2 | # This file is specific to downstream OpenShift/OCP features only |
3 | 3 |
|
4 | | -.PHONY: acm-install acm-mce-install acm-operator-install acm-instance-install acm-status acm-import-cluster acm-uninstall |
| 4 | +.PHONY: acm-install acm-mce-install acm-operator-install acm-instance-install acm-status acm-import-cluster acm-uninstall acm-dump-manifests |
5 | 5 |
|
6 | 6 | ##@ ACM (OpenShift only) |
7 | 7 |
|
8 | 8 | acm-install: acm-mce-install acm-operator-install acm-instance-install ## Install MCE, ACM operator and instance |
9 | 9 |
|
10 | | -# Install MultiCluster Engine (required for ACM) |
11 | | -acm-mce-install: |
12 | | - @echo "Installing MultiCluster Engine (MCE)..." |
13 | | - @echo "Creating multicluster-engine namespace..." |
14 | | - @oc create namespace multicluster-engine --dry-run=client -o yaml | oc apply -f - |
15 | | - @echo "Creating MCE OperatorGroup..." |
16 | | - @printf '%s\n' \ |
17 | | - 'apiVersion: operators.coreos.com/v1' \ |
18 | | - 'kind: OperatorGroup' \ |
19 | | - 'metadata:' \ |
20 | | - ' name: multicluster-engine' \ |
21 | | - ' namespace: multicluster-engine' \ |
22 | | - 'spec:' \ |
23 | | - ' targetNamespaces:' \ |
24 | | - ' - multicluster-engine' \ |
25 | | - | oc apply -f - |
26 | | - @echo "Creating MCE Subscription..." |
27 | | - @printf '%s\n' \ |
28 | | - 'apiVersion: operators.coreos.com/v1alpha1' \ |
29 | | - 'kind: Subscription' \ |
30 | | - 'metadata:' \ |
31 | | - ' name: multicluster-engine' \ |
32 | | - ' namespace: multicluster-engine' \ |
33 | | - 'spec:' \ |
34 | | - ' channel: stable-2.9' \ |
35 | | - ' name: multicluster-engine' \ |
36 | | - ' source: redhat-operators' \ |
37 | | - ' sourceNamespace: openshift-marketplace' \ |
38 | | - | oc apply -f - |
39 | | - @echo "Waiting for MCE operator CSV to be ready..." |
40 | | - @for i in {1..60}; do \ |
41 | | - if oc get csv -n multicluster-engine -o name 2>/dev/null | grep -q multicluster-engine; then \ |
42 | | - echo "MCE CSV found, waiting for Succeeded phase..."; \ |
43 | | - break; \ |
44 | | - fi; \ |
45 | | - echo " Waiting for MCE CSV to appear ($$i/60)..."; \ |
46 | | - sleep 5; \ |
47 | | - done |
48 | | - @oc wait --for=jsonpath='{.status.phase}'=Succeeded csv -l operators.coreos.com/multicluster-engine.multicluster-engine -n multicluster-engine --timeout=300s |
49 | | - @echo "Creating MultiClusterEngine instance..." |
50 | | - @printf '%s\n' \ |
51 | | - 'apiVersion: multicluster.openshift.io/v1' \ |
52 | | - 'kind: MultiClusterEngine' \ |
53 | | - 'metadata:' \ |
54 | | - ' name: multiclusterengine' \ |
55 | | - 'spec: {}' \ |
56 | | - | oc apply -f - |
57 | | - @echo "Waiting for ManagedCluster CRD to be available..." |
58 | | - @for i in {1..120}; do \ |
59 | | - if oc get crd managedclusters.cluster.open-cluster-management.io >/dev/null 2>&1; then \ |
60 | | - echo "✅ ManagedCluster CRD is now available!"; \ |
61 | | - break; \ |
62 | | - fi; \ |
63 | | - echo " Waiting for ManagedCluster CRD ($$i/120)..."; \ |
64 | | - sleep 5; \ |
65 | | - done |
66 | | - @echo "✓ MCE installation complete" |
| 10 | +acm-mce-install: ## Install MultiCluster Engine (required for ACM) |
| 11 | + @./hack/acm/install-mce.sh |
67 | 12 |
|
68 | | -# Install ACM operator (Subscription, OperatorGroup, etc.) |
69 | | -acm-operator-install: |
70 | | - @echo "Installing ACM Operator (release 2.14)..." |
71 | | - oc apply -k https://github.com/redhat-cop/gitops-catalog/advanced-cluster-management/operator/overlays/release-2.14 |
72 | | - @echo "Waiting for ACM operator CSV to be ready..." |
73 | | - @for i in {1..60}; do \ |
74 | | - if oc get csv -n open-cluster-management -o name 2>/dev/null | grep -q advanced-cluster-management; then \ |
75 | | - echo "ACM CSV found, waiting for Succeeded phase..."; \ |
76 | | - break; \ |
77 | | - fi; \ |
78 | | - echo " Waiting for ACM CSV to appear ($$i/60)..."; \ |
79 | | - sleep 5; \ |
80 | | - done |
81 | | - @oc wait --for=jsonpath='{.status.phase}'=Succeeded csv -l operators.coreos.com/advanced-cluster-management.open-cluster-management -n open-cluster-management --timeout=300s |
82 | | - @echo "✓ ACM Operator installation complete" |
| 13 | +acm-operator-install: ## Install ACM operator |
| 14 | + @./hack/acm/install-operator.sh |
83 | 15 |
|
84 | | -# Install ACM instance (MultiClusterHub CR) |
85 | | -acm-instance-install: |
86 | | - @echo "Installing ACM Instance (MultiClusterHub)..." |
87 | | - @printf '%s\n' \ |
88 | | - 'apiVersion: operator.open-cluster-management.io/v1' \ |
89 | | - 'kind: MultiClusterHub' \ |
90 | | - 'metadata:' \ |
91 | | - ' name: multiclusterhub' \ |
92 | | - ' namespace: open-cluster-management' \ |
93 | | - 'spec:' \ |
94 | | - ' availabilityConfig: High' \ |
95 | | - | oc apply -f - |
96 | | - @echo "Waiting for MultiClusterHub to be ready (this may take several minutes)..." |
97 | | - @oc wait --for=condition=Complete --timeout=900s multiclusterhub/multiclusterhub -n open-cluster-management || true |
98 | | - @echo "✓ ACM Instance installation complete" |
| 16 | +acm-instance-install: ## Install ACM instance (MultiClusterHub CR) |
| 17 | + @./hack/acm/install-instance.sh |
99 | 18 |
|
100 | 19 | acm-status: ## Check ACM installation status |
101 | | - @echo "==========================================" |
102 | | - @echo "ACM Installation Status" |
103 | | - @echo "==========================================" |
104 | | - @echo "" |
105 | | - @echo "Namespaces:" |
106 | | - @oc get namespaces | grep -E "(open-cluster-management|multicluster-engine)" || echo "No ACM namespaces found" |
107 | | - @echo "" |
108 | | - @echo "Operators:" |
109 | | - @oc get csv -n open-cluster-management 2>/dev/null || echo "No operators found in open-cluster-management namespace" |
110 | | - @echo "" |
111 | | - @echo "MultiClusterHub:" |
112 | | - @oc get multiclusterhub -n open-cluster-management -o wide 2>/dev/null || echo "No MultiClusterHub found" |
113 | | - @echo "" |
114 | | - @echo "ACM Pods:" |
115 | | - @oc get pods -n open-cluster-management 2>/dev/null || echo "No pods found in open-cluster-management namespace" |
116 | | - @echo "" |
117 | | - @echo "ManagedClusters:" |
118 | | - @oc get managedclusters 2>/dev/null || echo "No ManagedClusters found (this is normal for fresh install)" |
| 20 | + @./hack/acm/status.sh |
119 | 21 |
|
120 | | -# Import a managed cluster |
121 | | -# Usage: make acm-import-cluster CLUSTER_NAME=<name> MANAGED_KUBECONFIG=<path> |
122 | 22 | acm-import-cluster: ## Import a managed cluster (requires CLUSTER_NAME and MANAGED_KUBECONFIG) |
123 | | - @if [ -z "$(CLUSTER_NAME)" ]; then \ |
124 | | - echo "Error: CLUSTER_NAME is required"; \ |
125 | | - echo "Usage: make acm-import-cluster CLUSTER_NAME=<name> MANAGED_KUBECONFIG=<path>"; \ |
126 | | - exit 1; \ |
127 | | - fi |
128 | | - @if [ -z "$(MANAGED_KUBECONFIG)" ]; then \ |
129 | | - echo "Error: MANAGED_KUBECONFIG is required"; \ |
130 | | - echo "Usage: make acm-import-cluster CLUSTER_NAME=<name> MANAGED_KUBECONFIG=<path>"; \ |
131 | | - exit 1; \ |
132 | | - fi |
133 | | - @if [ ! -f "$(MANAGED_KUBECONFIG)" ]; then \ |
134 | | - echo "Error: Kubeconfig file not found: $(MANAGED_KUBECONFIG)"; \ |
135 | | - exit 1; \ |
136 | | - fi |
137 | | - @echo "===========================================" |
138 | | - @echo "Importing cluster: $(CLUSTER_NAME)" |
139 | | - @echo "===========================================" |
140 | | - @echo "Step 1: Creating ManagedCluster resource on hub..." |
141 | | - @printf '%s\n' \ |
142 | | - 'apiVersion: cluster.open-cluster-management.io/v1' \ |
143 | | - 'kind: ManagedCluster' \ |
144 | | - 'metadata:' \ |
145 | | - ' name: $(CLUSTER_NAME)' \ |
146 | | - ' labels:' \ |
147 | | - ' cloud: auto-detect' \ |
148 | | - ' vendor: auto-detect' \ |
149 | | - 'spec:' \ |
150 | | - ' hubAcceptsClient: true' \ |
151 | | - | oc apply -f - |
152 | | - @echo "Step 2: Waiting for import secret to be created..." |
153 | | - @for i in {1..60}; do \ |
154 | | - if oc get secret -n $(CLUSTER_NAME) $(CLUSTER_NAME)-import 2>/dev/null; then \ |
155 | | - echo "✅ Import secret created!"; \ |
156 | | - break; \ |
157 | | - fi; \ |
158 | | - echo " Waiting for import secret ($$i/60)..."; \ |
159 | | - sleep 2; \ |
160 | | - done |
161 | | - @echo "Step 3: Extracting import manifests..." |
162 | | - @mkdir -p _output/acm-import |
163 | | - @oc get secret -n $(CLUSTER_NAME) $(CLUSTER_NAME)-import -o jsonpath='{.data.crds\.yaml}' | base64 -d > _output/acm-import/$(CLUSTER_NAME)-crds.yaml |
164 | | - @oc get secret -n $(CLUSTER_NAME) $(CLUSTER_NAME)-import -o jsonpath='{.data.import\.yaml}' | base64 -d > _output/acm-import/$(CLUSTER_NAME)-import.yaml |
165 | | - @echo "Import manifests saved to _output/acm-import/" |
166 | | - @echo "Step 4: Applying CRDs to managed cluster..." |
167 | | - @KUBECONFIG=$(MANAGED_KUBECONFIG) oc apply -f _output/acm-import/$(CLUSTER_NAME)-crds.yaml |
168 | | - @echo " Waiting for CRDs to be established..." |
169 | | - @sleep 5 |
170 | | - @echo "Step 5: Applying import manifest to managed cluster..." |
171 | | - @KUBECONFIG=$(MANAGED_KUBECONFIG) oc apply -f _output/acm-import/$(CLUSTER_NAME)-import.yaml |
172 | | - @echo "Step 6: Waiting for klusterlet to be ready..." |
173 | | - @for i in {1..120}; do \ |
174 | | - if oc get managedcluster $(CLUSTER_NAME) -o jsonpath='{.status.conditions[?(@.type=="ManagedClusterConditionAvailable")].status}' 2>/dev/null | grep -q "True"; then \ |
175 | | - echo "✅ Cluster $(CLUSTER_NAME) is now available!"; \ |
176 | | - break; \ |
177 | | - fi; \ |
178 | | - echo " Waiting for cluster to become available ($$i/120)..."; \ |
179 | | - sleep 5; \ |
180 | | - done |
181 | | - @echo "===========================================" |
182 | | - @echo "✓ Cluster import complete!" |
183 | | - @echo "===========================================" |
184 | | - @oc get managedcluster $(CLUSTER_NAME) |
| 23 | + @./hack/acm/import-cluster.sh "$(CLUSTER_NAME)" "$(MANAGED_KUBECONFIG)" |
185 | 24 |
|
186 | | -# Uninstall ACM (reverse order: instance first, then operator) |
187 | | -acm-uninstall: |
188 | | - @echo "Uninstalling ACM Instance..." |
189 | | - -oc delete multiclusterhub multiclusterhub -n open-cluster-management |
190 | | - @echo "Waiting for MultiClusterHub to be deleted..." |
191 | | - @oc wait --for=delete multiclusterhub/multiclusterhub -n open-cluster-management --timeout=300s 2>/dev/null || true |
192 | | - @echo "Uninstalling ACM Operator..." |
193 | | - -oc delete -k https://github.com/redhat-cop/gitops-catalog/advanced-cluster-management/operator/overlays/release-2.14 |
194 | | - @echo "Cleaning up namespaces..." |
195 | | - -oc delete namespace open-cluster-management --timeout=300s 2>/dev/null || true |
196 | | - @echo "✓ ACM uninstallation complete" |
| 25 | +acm-uninstall: ## Uninstall ACM (reverse order: instance first, then operator) |
| 26 | + @./hack/acm/uninstall.sh |
197 | 27 |
|
198 | | -# Dump ACM manifests locally for inspection |
199 | | -acm-dump-manifests: |
| 28 | +acm-dump-manifests: ## Dump ACM manifests locally for inspection |
200 | 29 | @echo "Dumping ACM Operator manifests..." |
201 | 30 | @mkdir -p _output/acm-manifests |
202 | 31 | kustomize build https://github.com/redhat-cop/gitops-catalog/advanced-cluster-management/operator/overlays/release-2.14 > _output/acm-manifests/operator.yaml |
|
0 commit comments