11#! /bin/bash
22
3- if [ $# -lt 1 ]; then
4- echo " ./node-joiner.sh <pull secret path>"
5- echo " Usage example:"
6- echo " $ ./node-joiner.sh ~/config/my-pull-secret"
3+ set -eu
74
8- exit 1
5+ # Config file
6+ nodesConfigFile=${1:- " nodes-config.yaml" }
7+ if [ ! -f $nodesConfigFile ]; then
8+ echo " Cannot find the config file $nodesConfigFile "
9+ exit 1
910fi
10- pullSecret=$1
11+
12+ # Generate a random namespace name
13+ namespace=" openshift-node-joiner-$( cat /dev/urandom | tr -dc ' a-z' | head -c 10) "
1114
1215# Extract the installer image pullspec and release version.
13- releaseImage=$( oc get clusterversion version -o=jsonpath=' {.status.history[?(@.state == "Completed")].image}' )
14- nodeJoinerPullspec=$( oc adm release info -a " $pullSecret " --image-for=installer " $releaseImage " )
16+ nodeJoinerPullspec=$( oc get is installer -n openshift -o=jsonpath=' {.spec.tags[0].from.name}' )
1517
1618# Create the namespace to run the node-joiner, along with the required roles and bindings.
1719staticResources=$( cat << EOF
1820apiVersion: v1
1921kind: Namespace
2022metadata:
21- name: openshift-node-joiner
23+ name: ${namespace}
2224---
2325apiVersion: v1
2426kind: ServiceAccount
2527metadata:
2628 name: node-joiner
27- namespace: openshift-node-joiner
29+ namespace: ${namespace}
2830---
2931apiVersion: rbac.authorization.k8s.io/v1
3032kind: ClusterRole
@@ -55,7 +57,7 @@ metadata:
5557subjects:
5658- kind: ServiceAccount
5759 name: node-joiner
58- namespace: openshift-node-joiner
60+ namespace: ${namespace}
5961roleRef:
6062 kind: ClusterRole
6163 name: node-joiner
6567echo " $staticResources " | oc apply -f -
6668
6769# Generate a configMap to store the user configuration
68- oc create configmap nodes-config --from-file=nodes-config.yaml -n openshift-node-joiner -o yaml --dry-run=client | oc apply -f -
70+ oc create configmap nodes-config --from-file=nodes-config.yaml= ${nodesConfigFile} -n ${namespace} -o yaml --dry-run=client | oc apply -f -
6971
7072# Runt the node-joiner pod to generate the ISO
7173nodeJoinerPod=$( cat << EOF
7274apiVersion: v1
7375kind: Pod
7476metadata:
7577 name: node-joiner
76- namespace: openshift-node-joiner
78+ namespace: ${namespace}
7779 annotations:
7880 openshift.io/scc: anyuid
7981 labels:
@@ -93,39 +95,36 @@ spec:
9395 mountPath: /config
9496 - name: assets
9597 mountPath: /assets
96- command: ["/bin/sh", "-c", "cp /config/nodes-config.yaml /assets; HOME=/assets node-joiner add-nodes --dir=/assets --log-level=debug; echo \$ ? > /assets/completed; sleep 600"]
98+ command: ["/bin/sh", "-c", "cp /config/nodes-config.yaml /assets; HOME=/assets node-joiner add-nodes --dir=/assets --log-level=debug; sleep 600"]
9799 volumes:
98100 - name: nodes-config
99101 configMap:
100102 name: nodes-config
101- namespace: openshift-node-joiner
103+ namespace: ${namespace}
102104 - name: assets
103105 emptyDir:
104106 sizeLimit: "4Gi"
105107EOF
106108)
107109echo " $nodeJoinerPod " | oc apply -f -
108110
109- # Wait until the node-joiner was completed.
110111while true ; do
111- if oc exec node-joiner -n openshift-node-joiner -- test -e /assets/completed > /dev/null 2>&1 ; then
112+ if oc exec node-joiner -n ${namespace} -- test -e /assets/exit_code > /dev/null 2>&1 ; then
112113 break
113114 else
114115 echo " Waiting for node-joiner pod to complete..."
115116 sleep 10s
116117 fi
117118done
118119
119- # In case of success, let's extract the ISO, otherwise the logs are shown for troubleshooting the error.
120- completed=$( oc exec node-joiner -n openshift-node-joiner -- cat /assets/completed)
121- if [ " $completed " = 0 ]; then
120+ res=$( oc exec node-joiner -n ${namespace} -- cat /assets/exit_code)
121+ if [ " $res " = 0 ]; then
122122 echo " node-joiner successfully completed, extracting ISO image..."
123- oc cp -n openshift-node-joiner node-joiner:/assets/agent-addnodes.x86_64.iso agent-addnodes.x86_64.iso
123+ oc cp -n ${namespace} node-joiner:/assets/agent-addnodes.x86_64.iso agent-addnodes.x86_64.iso
124124else
125- oc logs node-joiner -n openshift-node-joiner
125+ oc logs node-joiner -n ${namespace}
126126 echo " node-joiner failed"
127127fi
128128
129- # Remove all the resources previously created.
130129echo " Cleaning up"
131- oc delete namespace openshift-node-joiner --grace-period=0 > /dev/null 2>&1 &
130+ oc delete namespace " ${namespace} " --grace-period=0 > /dev/null 2>&1 &
0 commit comments