Skip to content

Commit 0e4b827

Browse files
committed
refactor: move mk content to script files
Signed-off-by: Matthias Wessendorf <[email protected]>
1 parent cda2df7 commit 0e4b827

File tree

7 files changed

+271
-183
lines changed

7 files changed

+271
-183
lines changed

build/acm.mk

Lines changed: 12 additions & 183 deletions
Original file line numberDiff line numberDiff line change
@@ -1,202 +1,31 @@
11
# ACM (Advanced Cluster Management) installation targets for OpenShift
22
# This file is specific to downstream OpenShift/OCP features only
33

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
55

66
##@ ACM (OpenShift only)
77

88
acm-install: acm-mce-install acm-operator-install acm-instance-install ## Install MCE, ACM operator and instance
99

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
6712

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
8315

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
9918

10019
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
11921

120-
# Import a managed cluster
121-
# Usage: make acm-import-cluster CLUSTER_NAME=<name> MANAGED_KUBECONFIG=<path>
12222
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)"
18524

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
19727

198-
# Dump ACM manifests locally for inspection
199-
acm-dump-manifests:
28+
acm-dump-manifests: ## Dump ACM manifests locally for inspection
20029
@echo "Dumping ACM Operator manifests..."
20130
@mkdir -p _output/acm-manifests
20231
kustomize build https://github.com/redhat-cop/gitops-catalog/advanced-cluster-management/operator/overlays/release-2.14 > _output/acm-manifests/operator.yaml

hack/acm/import-cluster.sh

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#!/usr/bin/env bash
2+
3+
# Import a managed cluster into ACM
4+
# Usage: ./import-cluster.sh <cluster-name> <kubeconfig-path>
5+
6+
set -euo pipefail
7+
8+
CLUSTER_NAME="${1:-}"
9+
MANAGED_KUBECONFIG="${2:-}"
10+
11+
# Validate inputs
12+
if [ -z "$CLUSTER_NAME" ]; then
13+
echo "Error: CLUSTER_NAME is required"
14+
echo "Usage: $0 <cluster-name> <kubeconfig-path>"
15+
exit 1
16+
fi
17+
18+
if [ -z "$MANAGED_KUBECONFIG" ]; then
19+
echo "Error: MANAGED_KUBECONFIG is required"
20+
echo "Usage: $0 <cluster-name> <kubeconfig-path>"
21+
exit 1
22+
fi
23+
24+
if [ ! -f "$MANAGED_KUBECONFIG" ]; then
25+
echo "Error: Kubeconfig file not found: $MANAGED_KUBECONFIG"
26+
exit 1
27+
fi
28+
29+
echo "==========================================="
30+
echo "Importing cluster: $CLUSTER_NAME"
31+
echo "==========================================="
32+
33+
# Step 1: Create ManagedCluster resource
34+
echo "Step 1: Creating ManagedCluster resource on hub..."
35+
cat <<EOF | oc apply -f -
36+
apiVersion: cluster.open-cluster-management.io/v1
37+
kind: ManagedCluster
38+
metadata:
39+
name: $CLUSTER_NAME
40+
labels:
41+
cloud: auto-detect
42+
vendor: auto-detect
43+
spec:
44+
hubAcceptsClient: true
45+
EOF
46+
47+
# Step 2: Wait for import secret
48+
echo "Step 2: Waiting for import secret to be created..."
49+
for i in {1..60}; do
50+
if oc get secret -n "$CLUSTER_NAME" "$CLUSTER_NAME-import" 2>/dev/null; then
51+
echo "✅ Import secret created!"
52+
break
53+
fi
54+
echo " Waiting for import secret ($i/60)..."
55+
sleep 2
56+
done
57+
58+
# Step 3: Extract import manifests
59+
echo "Step 3: Extracting import manifests..."
60+
mkdir -p _output/acm-import
61+
oc get secret -n "$CLUSTER_NAME" "$CLUSTER_NAME-import" -o jsonpath='{.data.crds\.yaml}' | base64 -d > "_output/acm-import/${CLUSTER_NAME}-crds.yaml"
62+
oc get secret -n "$CLUSTER_NAME" "$CLUSTER_NAME-import" -o jsonpath='{.data.import\.yaml}' | base64 -d > "_output/acm-import/${CLUSTER_NAME}-import.yaml"
63+
echo "Import manifests saved to _output/acm-import/"
64+
65+
# Step 4: Apply CRDs to managed cluster
66+
echo "Step 4: Applying CRDs to managed cluster..."
67+
KUBECONFIG="$MANAGED_KUBECONFIG" oc apply -f "_output/acm-import/${CLUSTER_NAME}-crds.yaml"
68+
echo " Waiting for CRDs to be established..."
69+
sleep 5
70+
71+
# Step 5: Apply import manifest
72+
echo "Step 5: Applying import manifest to managed cluster..."
73+
KUBECONFIG="$MANAGED_KUBECONFIG" oc apply -f "_output/acm-import/${CLUSTER_NAME}-import.yaml"
74+
75+
# Step 6: Wait for klusterlet to be ready
76+
echo "Step 6: Waiting for klusterlet to be ready..."
77+
for i in {1..120}; do
78+
if oc get managedcluster "$CLUSTER_NAME" -o jsonpath='{.status.conditions[?(@.type=="ManagedClusterConditionAvailable")].status}' 2>/dev/null | grep -q "True"; then
79+
echo "✅ Cluster $CLUSTER_NAME is now available!"
80+
break
81+
fi
82+
echo " Waiting for cluster to become available ($i/120)..."
83+
sleep 5
84+
done
85+
86+
echo "==========================================="
87+
echo "✓ Cluster import complete!"
88+
echo "==========================================="
89+
oc get managedcluster "$CLUSTER_NAME"

hack/acm/install-instance.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
3+
# Install ACM instance (MultiClusterHub CR)
4+
5+
set -euo pipefail
6+
7+
echo "Installing ACM Instance (MultiClusterHub)..."
8+
cat <<EOF | oc apply -f -
9+
apiVersion: operator.open-cluster-management.io/v1
10+
kind: MultiClusterHub
11+
metadata:
12+
name: multiclusterhub
13+
namespace: open-cluster-management
14+
spec:
15+
availabilityConfig: High
16+
EOF
17+
18+
echo "Waiting for MultiClusterHub to be ready (this may take several minutes)..."
19+
oc wait --for=condition=Complete --timeout=900s multiclusterhub/multiclusterhub -n open-cluster-management || true
20+
21+
echo "✓ ACM Instance installation complete"

0 commit comments

Comments
 (0)