4 SCRIPTDIR="$(readlink -f $(dirname ${BASH_SOURCE[0]}))"
5 LIBDIR="$(dirname $(dirname $(dirname ${SCRIPTDIR})))/env/lib"
9 source $LIBDIR/common.sh
11 if [[ $EUID -ne 0 ]]; then
12 echo "This script must be run as root"
16 function deprovision_compute_node {
18 if kubectl get baremetalhost $name -n metal3 &>/dev/null; then
19 kubectl patch baremetalhost $name -n metal3 --type merge \
20 -p '{"spec":{"image":{"url":"","checksum":""}}}'
24 function create_userdata {
28 COMPUTE_NODE_FQDN="$name.akraino.icn.org"
30 # validate that the user isn't expecting the deprecated
31 # COMPUTE_NODE_PASSWORD to be used
32 if [ "$password" != "${COMPUTE_NODE_PASSWORD:-$password}" ]; then
34 COMPUTE_NODE_PASSWORD "$COMPUTE_NODE_PASSWORD" not equal to nodes.json $name password "$password".
35 Unset COMPUTE_NODE_PASSWORD and retry.
40 printf "userData:\n" >>${SCRIPTDIR}/${name}-values.yaml
41 if [ -n "$username" ]; then
42 printf " name: ${username}\n" >>${SCRIPTDIR}/${name}-values.yaml
44 if [ -n "$password" ]; then
45 passwd=$(mkpasswd --method=SHA-512 --rounds 4096 "$password")
46 printf " hashedPassword: ${passwd}\n" >>${SCRIPTDIR}/${name}-values.yaml
49 if [ -n "$COMPUTE_NODE_FQDN" ]; then
50 printf " fqdn: ${COMPUTE_NODE_FQDN}\n" >>${SCRIPTDIR}/${name}-values.yaml
53 if [ ! -f $HOME/.ssh/id_rsa.pub ]; then
54 yes y | ssh-keygen -t rsa -N "" -f $HOME/.ssh/id_rsa
57 printf " sshAuthorizedKey: $(cat $HOME/.ssh/id_rsa.pub)\n" >>${SCRIPTDIR}/${name}-values.yaml
60 create_networkdata() {
62 node_networkdata $name >>${SCRIPTDIR}/${name}-values.yaml
65 function make_bm_hosts {
66 while IFS=',' read -r name ipmi_username ipmi_password ipmi_address boot_mac os_username os_password os_image_name; do
67 printf "machineName: ${name}\n" >${SCRIPTDIR}/${name}-values.yaml
68 printf "bmcUsername: ${ipmi_username}\n" >>${SCRIPTDIR}/${name}-values.yaml
69 printf "bmcPassword: ${ipmi_password}\n" >>${SCRIPTDIR}/${name}-values.yaml
70 printf "bmcAddress: ipmi://${ipmi_address}\n" >>${SCRIPTDIR}/${name}-values.yaml
71 if [[ ! -z ${boot_mac} ]]; then
72 printf "bootMACAddress: ${boot_mac}\n" >>${SCRIPTDIR}/${name}-values.yaml
74 printf "imageName: ${BM_IMAGE}\n" >>${SCRIPTDIR}/${name}-values.yaml
75 create_userdata $name $os_username $os_password
76 create_networkdata $name
78 helm -n metal3 install ${name} ${SCRIPTDIR}/../../machine --create-namespace -f ${SCRIPTDIR}/${name}-values.yaml
83 function configure_nodes {
84 if [ ! -d $IRONIC_DATA_DIR ]; then
85 mkdir -p $IRONIC_DATA_DIR
88 #make sure nodes.json file in /opt/ironic/ are configured
89 if [ ! -f $IRONIC_DATA_DIR/nodes.json ]; then
90 cp ${SCRIPTDIR}/nodes.json.sample $IRONIC_DATA_DIR/nodes.json
94 function deprovision_bm_hosts {
95 while IFS=',' read -r name ipmi_username ipmi_password ipmi_address boot_mac os_username os_password os_image_name; do
96 deprovision_compute_node $name
100 function clean_bm_hosts {
101 while IFS=',' read -r name ipmi_username ipmi_password ipmi_address boot_mac os_username os_password os_image_name; do
102 helm -n metal3 uninstall ${name}
103 rm -rf ${SCRIPTDIR}/${name}-values.yaml
108 list_nodes | clean_bm_hosts
109 if [ -f $IRONIC_DATA_DIR/nodes.json ]; then
110 rm -rf $IRONIC_DATA_DIR/nodes.json
114 function apply_bm_hosts {
115 list_nodes | make_bm_hosts
118 function deprovision_all_hosts {
119 list_nodes | deprovision_bm_hosts
122 if [ "$1" == "deprovision" ]; then
124 deprovision_all_hosts
128 if [ "$1" == "provision" ]; then
134 if [ "$1" == "clean" ]; then
140 echo "Usage: metal3.sh"
141 echo "provision - provision baremetal node as specified in common.sh"
142 echo "deprovision - deprovision baremetal node as specified in common.sh"
143 echo "clean - clean all the bmh resources"