X-Git-Url: https://gerrit.akraino.org/r/gitweb?a=blobdiff_plain;f=deploy%2Fmetal3%2Fscripts%2F01_metal3.sh;h=8d0fc1b541a1548806ff7ff81e7dff9bacd9e9ad;hb=3132fc5e4d956ad3181a9ec0c5f234581f8947b1;hp=ac6a80b2d58877278cfd932eb6fbfab2ef379e80;hpb=289b3d43bcbaa090619d60f5ccec3beeb808f904;p=icn.git diff --git a/deploy/metal3/scripts/01_metal3.sh b/deploy/metal3/scripts/01_metal3.sh index ac6a80b..8d0fc1b 100755 --- a/deploy/metal3/scripts/01_metal3.sh +++ b/deploy/metal3/scripts/01_metal3.sh @@ -12,50 +12,8 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi -IMAGE_URL=http://172.22.0.1/images/${BM_IMAGE} -IMAGE_CHECKSUM=http://172.22.0.1/images/${BM_IMAGE}.md5sum - -function clone_repos { - mkdir -p "${M3PATH}" - if [[ -d ${BMOPATH} && "${FORCE_REPO_UPDATE}" == "true" ]]; then - rm -rf "${BMOPATH}" - fi - if [ ! -d "${BMOPATH}" ] ; then - pushd "${M3PATH}" - git clone "${BMOREPO}" - popd - fi - pushd "${BMOPATH}" - git checkout "${BMOBRANCH}" - git pull -r || true - popd -} - -function get_default_interface_ipaddress { - local _ip=$1 - local _default_interface=$(awk '$2 == 00000000 { print $1 }' /proc/net/route) - local _ipv4address=$(ip addr show dev $_default_interface | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }') - eval $_ip="'$_ipv4address'" -} - -function create_ssh_key { - #ssh key for compute node to communicate back to bootstrap server - mkdir -p $BUILD_DIR/ssh_key - ssh-keygen -C "compute.icn.akraino.lfedge.org" -f $BUILD_DIR/ssh_key/id_rsa - cat $BUILD_DIR/ssh_key/id_rsa.pub >> $HOME/.ssh/authorized_keys -} - -function set_compute_key { - _SSH_LOCAL_KEY=$(cat $BUILD_DIR/ssh_key/id_rsa) - cat << EOF -write_files: -- path: /opt/ssh_id_rsa - owner: root:root - permissions: '0600' - content: | - $_SSH_LOCAL_KEY -EOF -} +IMAGE_URL=http://172.22.0.1:6180/images/${BM_IMAGE} +IMAGE_CHECKSUM=http://172.22.0.1:6180/images/${BM_IMAGE}.md5sum function deprovision_compute_node { name="$1" @@ -65,25 +23,6 @@ function deprovision_compute_node { fi } -function set_compute_ssh_config { - get_default_interface_ipaddress default_addr - cat << EOF -- path: /root/.ssh/config - owner: root:root - permissions: '0600' - content: | - Host bootstrapmachine $default_addr - HostName $default_addr - IdentityFile /opt/ssh_id_rsa - User $USER -- path: /etc/apt/sources.list - owner: root:root - permissions: '0665' - content: | - deb [trusted=yes] ssh://$USER@$default_addr:$LOCAL_APT_REPO ./ -EOF -} - # documentation for the values below may be found at # https://cloudinit.readthedocs.io/en/latest/topics/modules.html function create_userdata { @@ -134,30 +73,32 @@ EOF printf "\n" >> $name-userdata.yaml } -function launch_baremetal_operator { - docker pull $IRONIC_BAREMETAL_IMAGE - kubectl apply -f bmo/namespace/namespace.yaml - kubectl apply -f bmo/rbac/service_account.yaml -n metal3 - kubectl apply -f bmo/rbac/role.yaml -n metal3 - kubectl apply -f bmo/rbac/role_binding.yaml - kubectl apply -f bmo/crds/metal3.io_baremetalhosts_crd.yaml - kubectl apply -f bmo/operator/no_ironic/operator.yaml -n metal3 -} - -function remove_baremetal_operator { - kubectl delete -f bmo/operator/no_ironic/operator.yaml -n metal3 - kubectl delete -f bmo/crds/metal3.io_baremetalhosts_crd.yaml - kubectl delete -f bmo/rbac/role_binding.yaml - kubectl delete -f bmo/rbac/role.yaml -n metal3 - kubectl delete -f bmo/rbac/service_account.yaml -n metal3 - kubectl delete -f bmo/namespace/namespace.yaml +create_networkdata() { + name="$1" + node_networkdata $name > $name-networkdata.json } function cloud_init_scripts { - # The "intel_iommu=on iommu=pt" kernel command line is necessary - # for QAT support. + # set_dhcp_indentifier.sh: + # The IP address assigned to the provisioning NIC will change + # due to IPA using the MAC address as the client ID and systemd + # using a different ID. Tell systemd to use the MAC as the + # client ID. We can't do this in the network data as only the + # JSON format is supported by metal3, and the JSON format does + # not support the dhcp-identifier field. + # set_kernel_cmdline.sh: + # The "intel_iommu=on iommu=pt" kernel command line is necessary + # for QAT support. cat << 'EOF' write_files: +- path: /var/lib/cloud/scripts/per-instance/set_dhcp_identifier.sh + owner: root:root + permissions: '0777' + content: | + #!/usr/bin/env bash + set -eux -o pipefail + sed -i -e '/dhcp4: true$/!b' -e 'h;s/\S.*/dhcp-identifier: mac/;H;g' /etc/netplan/50-cloud-init.yaml + netplan apply - path: /var/lib/cloud/scripts/per-instance/set_kernel_cmdline.sh owner: root:root permissions: '0777' @@ -169,30 +110,6 @@ write_files: sed -i~ "/^GRUB_CMDLINE_LINUX=/{h;s/\(=\".*\)\"/\1 ${kernel_parameters}\"/};\${x;/^$/{s//GRUB_CMDLINE_LINUX=\"${kernel_parameters}\"/;H};x}" "$grub_file" update-grub reboot -EOF - cat << 'EOF' -- path: /var/lib/cloud/scripts/per-boot/run_dhclient.sh - owner: root:root - permissions: '0777' - content: | - #!/usr/bin/env bash - set -xe - for intf in /sys/class/net/*; do - sudo ifconfig `basename $intf` up - sudo dhclient -nw `basename $intf` - done -EOF - cat << EOF -- path: /var/lib/cloud/scripts/per-boot/set_provider_network.sh - owner: root:root - permissions: '0777' - content: | - #!/usr/bin/env bash - set -xe - route add default gw $PROVIDER_NETWORK_GATEWAY - sed -i -e 's/^#DNS=.*/DNS=$PROVIDER_NETWORK_DNS/g' /etc/systemd/resolved.conf - systemctl daemon-reload - systemctl restart systemd-resolved EOF } @@ -211,15 +128,35 @@ EOF kubectl apply -n metal3 -f $name-user-data-credential.yaml } +apply_networkdata_credential() { + name="$1" + cat < ./$name-network-data-credential.yaml +apiVersion: v1 +data: + networkData: $(base64 -w 0 $name-networkdata.json) +kind: Secret +metadata: + name: $name-network-data + namespace: metal3 +type: Opaque +EOF + kubectl apply -n metal3 -f $name-network-data-credential.yaml +} + function make_bm_hosts { - while IFS=',' read -r name ipmi_username ipmi_password ipmi_address os_username os_password os_image_name; do + kubectl create namespace metal3 --dry-run=client -o yaml | kubectl apply -f - + while IFS=',' read -r name ipmi_username ipmi_password ipmi_address boot_mac os_username os_password os_image_name; do create_userdata $name $os_username $os_password apply_userdata_credential $name + create_networkdata $name + apply_networkdata_credential $name - GO111MODULE=auto go run $GOPATH/src/github.com/metal3-io/baremetal-operator/cmd/make-bm-worker/main.go \ + GOPATH=$GOPATH:$(echo ${BMOPATH} | cut -d/ -f-2) GO111MODULE=auto \ + go run ${BMOPATH}/cmd/make-bm-worker/main.go \ -address "ipmi://$ipmi_address" \ -password "$ipmi_password" \ -user "$ipmi_username" \ + -boot-mac "$boot_mac" \ "$name" > $name-bm-node.yaml printf " image:" >> $name-bm-node.yaml @@ -228,6 +165,9 @@ function make_bm_hosts { printf "\n userData:" >> $name-bm-node.yaml printf "\n name: ""%s" "$name""-user-data" >> $name-bm-node.yaml printf "\n namespace: metal3" >> $name-bm-node.yaml + printf "\n networkData:" >> $name-bm-node.yaml + printf "\n name: ""%s" "$name""-network-data" >> $name-bm-node.yaml + printf "\n namespace: metal3" >> $name-bm-node.yaml printf "\n rootDeviceHints:" >> $name-bm-node.yaml printf "\n minSizeGigabytes: 48\n" >> $name-bm-node.yaml kubectl apply -f $name-bm-node.yaml -n metal3 @@ -246,13 +186,13 @@ function configure_nodes { } function remove_bm_hosts { - while IFS=',' read -r name ipmi_username ipmi_password ipmi_address os_username os_password os_image_name; do + while IFS=',' read -r name ipmi_username ipmi_password ipmi_address boot_mac os_username os_password os_image_name; do deprovision_compute_node $name done } function cleanup { - while IFS=',' read -r name ipmi_username ipmi_password ipmi_address os_username os_password os_image_name; do + while IFS=',' read -r name ipmi_username ipmi_password ipmi_address boot_mac os_username os_password os_image_name; do kubectl delete --ignore-not-found=true bmh $name -n metal3 kubectl delete --ignore-not-found=true secrets $name-bmc-secret -n metal3 kubectl delete --ignore-not-found=true secrets $name-user-data -n metal3 @@ -285,12 +225,6 @@ function deprovision_all_hosts { list_nodes | remove_bm_hosts } -if [ "$1" == "launch" ]; then - clone_repos - launch_baremetal_operator - exit 0 -fi - if [ "$1" == "deprovision" ]; then configure_nodes deprovision_all_hosts @@ -309,22 +243,8 @@ if [ "$1" == "clean" ]; then exit 0 fi -if [ "$1" == "remove" ]; then - remove_baremetal_operator - exit 0 -fi - echo "Usage: metal3.sh" -echo "launch - Launch the metal3 operator" echo "provision - provision baremetal node as specified in common.sh" echo "deprovision - deprovision baremetal node as specified in common.sh" echo "clean - clean all the bmh resources" -echo "remove - remove baremetal operator" exit 1 - -#Following code is tested for the offline mode -#Will be intergrated for the offline mode for ICNi v.0.1.0 beta -#create_ssh_key -#create_userdata -#set_compute_key -#set_compute_ssh_config