4 LIBDIR="$(dirname "$(dirname "$(dirname "$PWD")")")"
8 BM_OPERATOR="${BM_OPERATOR:-https://github.com/metal3-io/baremetal-operator.git}"
10 source $LIBDIR/env/lib/common.sh
12 function get_default_inteface_ipaddress() {
14 local _default_interface=$(awk '$2 == 00000000 { print $1 }' /proc/net/route)
15 local _ipv4address=$(ip addr show dev $_default_interface | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }')
16 eval $_ip="'$_ipv4address'"
20 #ssh key for compute node to communicate back to bootstrap server
21 mkdir -p $BUILD_DIR/ssh_key
22 ssh-keygen -C "compute.icn.akraino.lfedge.org" -f $BUILD_DIR/ssh_key/id_rsa
23 cat $BUILD_DIR/ssh_key/id_rsa.pub >> $HOME/.ssh/authorized_keys
27 _SSH_LOCAL_KEY=$(cat $BUILD_DIR/ssh_key/id_rsa)
30 - path: /opt/ssh_id_rsa
38 provision_compute_node() {
39 IMAGE_URL=http://172.22.0.1/images/${BM_IMAGE}
40 IMAGE_CHECKSUM=http://172.22.0.1/images/${BM_IMAGE}.md5sum
42 if [ ! -d $GOPATH/src/github.com/metal3-io/baremetal-operator ]; then
43 go get github.com/metal3-io/baremetal-operator
46 go run $GOPATH/src/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/main.go \
47 -address "ipmi://$COMPUTE_IPMI_ADDRESS" \
48 -user "$COMPUTE_IPMI_USER" \
49 -password "$COMPUTE_IPMI_PASSWORD" \
50 "$COMPUTE_NODE_NAME" > $COMPUTE_NODE_NAME-bm-node.yaml
52 printf " image:" >> $COMPUTE_NODE_NAME-bm-node.yaml
53 printf "\n url: ""%s" "$IMAGE_URL" >> $COMPUTE_NODE_NAME-bm-node.yaml
54 printf "\n checksum: ""%s" "$IMAGE_CHECKSUM" >> $COMPUTE_NODE_NAME-bm-node.yaml
55 printf "\n userData:" >> $COMPUTE_NODE_NAME-bm-node.yaml
56 printf "\n name: ""%s" "$COMPUTE_NODE_NAME""-user-data" >> $COMPUTE_NODE_NAME-bm-node.yaml
57 printf "\n namespace: metal3\n" >> $COMPUTE_NODE_NAME-bm-node.yaml
58 kubectl apply -f $COMPUTE_NODE_NAME-bm-node.yaml
61 deprovision_compute_node() {
62 kubectl patch baremetalhost $COMPUTE_NODE_NAME -n metal3 --type merge \
63 -p '{"spec":{"image":{"url":"","checksum":""}}}'
66 set_compute_ssh_config() {
67 get_default_inteface_ipaddress default_addr
69 - path: /root/.ssh/config
73 Host bootstrapmachine $default_addr
74 HostName $default_addr
75 IdentityFile /opt/ssh_id_rsa
77 - path: /etc/apt/sources.list
81 deb [trusted=yes] ssh://$USER@$default_addr:$LOCAL_APT_REPO ./
86 printf "#cloud-config\n" > userdata.yaml
87 if [ -n "$COMPUTE_NODE_PASSWORD" ]; then
88 printf "password: ""%s" "$COMPUTE_NODE_PASSWORD" >> userdata.yaml
89 printf "\nchpasswd: {expire: False}\n" >> userdata.yaml
90 printf "ssh_pwauth: True\n" >> userdata.yaml
93 if [ -n "$COMPUTE_NODE_FQDN" ]; then
94 printf "fqdn: ""%s" "$COMPUTE_NODE_FQDN" >> userdata.yaml
95 printf "\n" >> userdata.yaml
98 printf "ssh_authorized_keys:\n - " >> userdata.yaml
100 if [ -f $HOME/.ssh/id_rsa.pub ]; then
101 yes y | ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa
104 cat $HOME/.ssh/id_rsa.pub >> userdata.yaml
105 printf "\n" >> userdata.yaml
108 apply_userdata_credential() {
109 cat <<EOF > ./$COMPUTE_NODE_NAME-user-data.yaml
112 userData: $(base64 -w 0 userdata.yaml)
115 name: $COMPUTE_NODE_NAME-user-data
119 kubectl apply -n metal3 -f $COMPUTE_NODE_NAME-user-data.yaml
122 launch_baremetal_operator() {
123 if [ ! -d $GOPATH/src/github.com/metal3-io/baremetal-operator ]; then
124 go get github.com/metal3-io/baremetal-operator
127 pushd $GOPATH/src/github.com/metal3-io/baremetal-operator
133 if [ "$1" == "launch" ]; then
134 launch_baremetal_operator
138 if [ "$1" == "deprovision" ]; then
139 deprovision_compute_node
143 if [ "$1" == "provision" ]; then
145 apply_userdata_credential
146 provision_compute_node
151 echo "Usage: metal3.sh"
152 echo "launch - Launch the metal3 operator"
153 echo "provision - provision baremetal node as specified in common.sh"
154 echo "deprovision - deprovision baremetal node as specified in common.sh"
157 #Following code is tested for the offline mode
158 #Will be intergrated for the offline mode for ICNi v.0.1.0 beta
162 #set_compute_ssh_config