4 # shellcheck disable=SC1091
6 # shellcheck disable=SC1091
11 DEPLOYDIR="$(dirname "$PWD")"
12 BMODIR=$DEPLOYDIR/metal3/scripts/bmo
14 # Environment variables
15 # M3PATH : Path to clone the metal3 dev env repo
16 # BMOPATH : Path to clone the baremetal operator repo
18 # BMOREPO : Baremetal operator repository URL
19 # BMOBRANCH : Baremetal operator repository branch to checkout
20 # FORCE_REPO_UPDATE : discard existing directories
22 # BMO_RUN_LOCAL : run the baremetal operator locally (not in Kubernetes cluster)
24 M3PATH="${GOPATH}/src/github.com/metal3-io"
25 BMOPATH="${M3PATH}/baremetal-operator"
27 BMOREPO="${BMOREPO:-https://github.com/metal3-io/baremetal-operator.git}"
28 BMOBRANCH="${BMOBRANCH:-10eb5aa3e614d0fdc6315026ebab061cbae6b929}"
29 FORCE_REPO_UPDATE="${FORCE_REPO_UPDATE:-true}"
31 BMO_RUN_LOCAL="${BMO_RUN_LOCAL:-false}"
32 COMPUTE_NODE_PASSWORD="${COMPUTE_NODE_PASSWORD:-mypasswd}"
33 BM_IMAGE=${BM_IMAGE:-"bionic-server-cloudimg-amd64.img"}
34 IMAGE_URL=http://172.22.0.1/images/${BM_IMAGE}
35 IMAGE_CHECKSUM=http://172.22.0.1/images/${BM_IMAGE}.md5sum
37 function clone_repos {
39 if [[ -d ${BMOPATH} && "${FORCE_REPO_UPDATE}" == "true" ]]; then
42 if [ ! -d "${BMOPATH}" ] ; then
44 git clone "${BMOREPO}"
48 git checkout "${BMOBRANCH}"
53 function launch_baremetal_operator {
54 docker pull $IRONIC_BAREMETAL_IMAGE
55 kubectl apply -f $BMODIR/namespace/namespace.yaml
56 kubectl apply -f $BMODIR/rbac/service_account.yaml -n metal3
57 kubectl apply -f $BMODIR/rbac/role.yaml -n metal3
58 kubectl apply -f $BMODIR/rbac/role_binding.yaml
59 kubectl apply -f $BMODIR/crds/metal3.io_baremetalhosts_crd.yaml
60 kubectl apply -f $BMODIR/operator/no_ironic/operator.yaml -n metal3
63 # documentation for the values below may be found at
64 # https://cloudinit.readthedocs.io/en/latest/topics/modules.html
65 function create_userdata {
67 COMPUTE_NODE_FQDN="$name.akraino.icn.org"
68 printf "#cloud-config\n" > $name-userdata.yaml
69 if [ -n "$COMPUTE_NODE_PASSWORD" ]; then
70 printf "password: ""%s" "$COMPUTE_NODE_PASSWORD" >> $name-userdata.yaml
71 printf "\nchpasswd: {expire: False}\n" >> $name-userdata.yaml
72 printf "ssh_pwauth: True\n" >> $name-userdata.yaml
75 if [ -n "$COMPUTE_NODE_FQDN" ]; then
76 printf "fqdn: ""%s" "$COMPUTE_NODE_FQDN" >> $name-userdata.yaml
77 printf "\n" >> $name-userdata.yaml
79 printf "disable_root: false\n" >> $name-userdata.yaml
80 printf "ssh_authorized_keys:\n - " >> $name-userdata.yaml
82 if [ ! -f $HOME/.ssh/id_rsa.pub ]; then
83 yes y | ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa
86 cat $HOME/.ssh/id_rsa.pub >> $name-userdata.yaml
87 printf "\n" >> $name-userdata.yaml
90 function apply_userdata_credential {
92 cat <<EOF > ./$name-user-data-credential.yaml
95 userData: $(base64 -w 0 $name-userdata.yaml)
102 kubectl apply -n metal3 -f $name-user-data-credential.yaml
105 function create_networkdata {
107 node_networkdata $name > $name-networkdata.json
110 function apply_networkdata_credential {
112 cat <<EOF > ./$name-network-data-credential.yaml
115 networkData: $(base64 -w 0 $name-networkdata.json)
118 name: $name-network-data
122 kubectl apply -n metal3 -f $name-network-data-credential.yaml
125 function make_bm_hosts {
126 while IFS=',' read -r name address user password mac; do
127 create_userdata $name
128 apply_userdata_credential $name
129 create_networkdata $name
130 apply_networkdata_credential $name
131 GO111MODULE=auto go run "${BMOPATH}"/cmd/make-bm-worker/main.go \
132 -address "$address" \
133 -password "$password" \
136 "$name" > $name-bm-node.yaml
137 printf " image:" >> $name-bm-node.yaml
138 printf "\n url: ""%s" "${IMAGE_URL}" >> $name-bm-node.yaml
139 printf "\n checksum: ""%s" "${IMAGE_CHECKSUM}" >> $name-bm-node.yaml
140 printf "\n userData:" >> $name-bm-node.yaml
141 printf "\n name: ""%s" "$name""-user-data" >> $name-bm-node.yaml
142 printf "\n namespace: metal3" >> $name-bm-node.yaml
143 printf "\n networkData:" >> $name-bm-node.yaml
144 printf "\n name: ""%s" "$name""-network-data" >> $name-bm-node.yaml
145 printf "\n namespace: metal3" >> $name-bm-node.yaml
146 printf "\n rootDeviceHints:" >> $name-bm-node.yaml
147 printf "\n minSizeGigabytes: 48\n" >> $name-bm-node.yaml
148 kubectl apply -f $name-bm-node.yaml -n metal3
152 function apply_bm_hosts {
153 list_nodes | make_bm_hosts
157 launch_baremetal_operator