4 # shellcheck disable=SC1091
6 # shellcheck disable=SC1091
12 # Environment variables
13 # M3PATH : Path to clone the metal3 dev env repo
14 # BMOPATH : Path to clone the baremetal operator repo
16 # BMOREPO : Baremetal operator repository URL
17 # BMOBRANCH : Baremetal operator repository branch to checkout
18 # FORCE_REPO_UPDATE : discard existing directories
20 # BMO_RUN_LOCAL : run the baremetal operator locally (not in Kubernetes cluster)
22 M3PATH="${GOPATH}/src/github.com/metal3-io"
23 BMOPATH="${M3PATH}/baremetal-operator"
25 BMOREPO="${BMOREPO:-https://github.com/metal3-io/baremetal-operator.git}"
26 BMOBRANCH="${BMOBRANCH:-10eb5aa3e614d0fdc6315026ebab061cbae6b929}"
27 FORCE_REPO_UPDATE="${FORCE_REPO_UPDATE:-true}"
29 BMO_RUN_LOCAL="${BMO_RUN_LOCAL:-false}"
30 COMPUTE_NODE_PASSWORD="${COMPUTE_NODE_PASSWORD:-mypasswd}"
31 BM_IMAGE=${BM_IMAGE:-"bionic-server-cloudimg-amd64.img"}
32 IMAGE_URL=http://172.22.0.1/images/${BM_IMAGE}
33 IMAGE_CHECKSUM=http://172.22.0.1/images/${BM_IMAGE}.md5sum
35 function clone_repos {
37 if [[ -d ${BMOPATH} && "${FORCE_REPO_UPDATE}" == "true" ]]; then
40 if [ ! -d "${BMOPATH}" ] ; then
42 git clone "${BMOREPO}"
46 git checkout "${BMOBRANCH}"
51 function launch_baremetal_operator {
52 docker pull integratedcloudnative/baremetal-operator:v1.0-icn
53 docker tag integratedcloudnative/baremetal-operator:v1.0-icn \
54 quay.io/metal3-io/baremetal-operator:master
57 if [ "${BMO_RUN_LOCAL}" = true ]; then
60 kubectl apply -f deploy/namespace/namespace.yaml
61 kubectl apply -f deploy/rbac/service_account.yaml -n metal3
62 kubectl apply -f deploy/rbac/role.yaml -n metal3
63 kubectl apply -f deploy/rbac/role_binding.yaml
64 kubectl apply -f deploy/crds/metal3.io_baremetalhosts_crd.yaml
65 kubectl apply -f deploy/operator/no_ironic/operator.yaml -n metal3
66 kubectl scale deployment metal3-baremetal-operator -n metal3 --replicas=0
67 nohup make run >> bmo.out.log 2>>bmo.err.log &
69 kubectl apply -f deploy/namespace/namespace.yaml
70 kubectl apply -f deploy/rbac/service_account.yaml -n metal3
71 kubectl apply -f deploy/rbac/role.yaml -n metal3
72 kubectl apply -f deploy/rbac/role_binding.yaml
73 kubectl apply -f deploy/crds/metal3.io_baremetalhosts_crd.yaml
74 kubectl apply -f deploy/operator/no_ironic/operator.yaml -n metal3
79 network_config_files() {
82 - path: /opt/ironic_net.sh
88 for intf in /sys/class/net/*; do
89 sudo ifconfig `basename $intf` up
90 sudo dhclient -nw `basename $intf`
93 - [ /opt/ironic_net.sh ]
99 COMPUTE_NODE_FQDN="$name.akraino.icn.org"
100 printf "#cloud-config\n" > $name-userdata.yaml
101 if [ -n "$COMPUTE_NODE_PASSWORD" ]; then
102 printf "password: ""%s" "$COMPUTE_NODE_PASSWORD" >> $name-userdata.yaml
103 printf "\nchpasswd: {expire: False}\n" >> $name-userdata.yaml
104 printf "ssh_pwauth: True\n" >> $name-userdata.yaml
107 if [ -n "$COMPUTE_NODE_FQDN" ]; then
108 printf "fqdn: ""%s" "$COMPUTE_NODE_FQDN" >> $name-userdata.yaml
109 printf "\n" >> $name-userdata.yaml
111 printf "disable_root: false\n" >> $name-userdata.yaml
112 printf "ssh_authorized_keys:\n - " >> $name-userdata.yaml
114 if [ ! -f $HOME/.ssh/id_rsa.pub ]; then
115 yes y | ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa
118 cat $HOME/.ssh/id_rsa.pub >> $name-userdata.yaml
119 network_config_files >> $name-userdata.yaml
120 printf "\n" >> $name-userdata.yaml
123 apply_userdata_credential() {
125 cat <<EOF > ./$name-user-data-credential.yaml
128 userData: $(base64 -w 0 $name-userdata.yaml)
131 name: $name-user-data
135 kubectl apply -n metal3 -f $name-user-data-credential.yaml
138 function make_bm_hosts {
139 while read -r name address user password mac; do
140 create_userdata $name
141 apply_userdata_credential $name
142 go run "${BMOPATH}"/cmd/make-bm-worker/main.go \
143 -address "$address" \
144 -password "$password" \
147 "$name" > $name-bm-node.yaml
148 printf " image:" >> $name-bm-node.yaml
149 printf "\n url: ""%s" "${IMAGE_URL}" >> $name-bm-node.yaml
150 printf "\n checksum: ""%s" "${IMAGE_CHECKSUM}" >> $name-bm-node.yaml
151 printf "\n userData:" >> $name-bm-node.yaml
152 printf "\n name: ""%s" "$name""-user-data" >> $name-bm-node.yaml
153 printf "\n namespace: metal3\n" >> $name-bm-node.yaml
154 kubectl apply -f $name-bm-node.yaml -n metal3
158 function apply_bm_hosts {
159 list_nodes | make_bm_hosts
164 launch_baremetal_operator