Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for DEVICE in sdf sdi sdg sde sdj sdh; do
- sudo /sbin/parted /dev/${DEVICE} mklabel gpt --script
- sudo /sbin/parted /dev/${DEVICE} mkpart primary 0% 25% --script
- sudo /sbin/parted /dev/${DEVICE} mkpart primary 25% 50% --script
- sudo /sbin/parted /dev/${DEVICE} mkpart primary 50% 75% --script
- sudo /sbin/parted /dev/${DEVICE} mkpart primary 75% 100% --script
- done
- for DEVICE in sdf sdi sdg sde sdj sdh; do
- COUNTER=1
- until [ $COUNTER -gt 2 ]; do
- echo PART $COUNTER $((COUNTER + 2))
- NODE="${DEVICE}-${COUNTER}"
- tee /tmp/fake-baremetal-${NODE}.xml <<EOF
- <domain type='qemu'>
- <name>fake-baremetal-${NODE}</name>
- <memory unit='MB'>65536</memory>
- <vcpu placement='static'>8</vcpu>
- <resource>
- <partition>/machine</partition>
- </resource>
- <os>
- <type arch='x86_64' machine='pc'>hvm</type>
- <boot dev='network'/>
- <boot dev='hd'/>
- <bootmenu enable='no'/>
- <bios useserial='yes'/>
- </os>
- <features>
- <acpi/>
- <apic/>
- </features>
- <cpu>
- <topology sockets='1' cores='8' threads='1'/>
- </cpu>
- <clock offset='localtime'/>
- <on_poweroff>destroy</on_poweroff>
- <on_reboot>restart</on_reboot>
- <on_crash>restart</on_crash>
- <devices>
- <emulator>/usr/libexec/qemu-kvm</emulator>
- <disk type='block' device='disk'>
- <driver name='qemu' type='raw'/>
- <source dev='/dev/${DEVICE}${COUNTER}'/>
- <target dev='vda'/>
- </disk>
- <disk type='block' device='disk'>
- <driver name='qemu' type='raw'/>
- <source dev='/dev/${DEVICE}$((COUNTER + 2))'/>
- <target dev='vdb'/>
- </disk>
- <controller type='usb' index='0'>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
- </controller>
- <controller type='ide' index='0'>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
- </controller>
- <controller type='pci' index='0' model='pci-root'/>
- <interface type='bridge'>
- <mac address='00:01:DE:AD:BE:EF'/>
- <source bridge='ironic-pxe'/>
- <virtualport type='openvswitch'>
- </virtualport>
- <model type='virtio'/>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
- </interface>
- <serial type='file'>
- <source path='/tmp/fake-baremetal-${NODE}.log' append='on'/>
- <target port='0'/>
- </serial>
- <serial type='pty'>
- <target port='1'/>
- </serial>
- <console type='file'>
- <source path='/tmp/fake-baremetal-${NODE}.log' append='on'/>
- <target type='serial' port='0'/>
- </console>
- <input type='tablet' bus='usb'>
- <address type='usb' bus='0' port='1'/>
- </input>
- <input type='mouse' bus='ps2'/>
- <input type='keyboard' bus='ps2'/>
- <memballoon model='virtio'>
- <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
- </memballoon>
- </devices>
- </domain>
- EOF
- let COUNTER=COUNTER+1
- done
- done
- LIBVIRT_PODS=$(kubectl get --namespace libvirt pods \
- -l application=libvirt,component=libvirt \
- --no-headers -o name | awk -F '/' '{ print $NF }')
- rm -f /tmp/bm-hosts.txt || true
- BMC_PORT=623
- for DEVICE in sdf sdi sdg sde sdj sdh; do
- COUNTER=1
- until [ $COUNTER -gt 2 ]; do
- echo PART $COUNTER $((COUNTER + 2))
- NODE="${DEVICE}-${COUNTER}"
- let COUNTER=COUNTER+1
- for LIBVIRT_POD in ${LIBVIRT_PODS}; do
- TEMPLATE_MAC_ADDR="00:01:DE:AD:BE:EF"
- MAC_ADDR=$(printf '00:01:DE:%02X:%02X:%02X\n' $[RANDOM%256] $[RANDOM%256] $[RANDOM%256])
- LIBVIRT_POD_NODE=$(kubectl get -n libvirt pod ${LIBVIRT_POD} -o json | jq -r '.spec.nodeName')
- LIBVIRT_NODE_IP=$(kubectl get node ${LIBVIRT_POD_NODE} -o json | jq -r '.status.addresses[] | select(.type=="InternalIP").address')
- kubectl exec -n libvirt ${LIBVIRT_POD} -- mkdir -p /var/lib/libvirt/images
- kubectl exec -n libvirt ${LIBVIRT_POD} -- chown -R qemu: /var/lib/libvirt/images
- VM_DEF="$(sed "s|${TEMPLATE_MAC_ADDR}|${MAC_ADDR}|g" /tmp/fake-baremetal-${NODE}.xml | base64 -w0)"
- kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "echo "${VM_DEF}" | base64 -d > /tmp/fake-baremetal-${NODE}.xml"
- kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "virsh undefine fake-baremetal-${NODE} || true"
- kubectl exec -n libvirt ${LIBVIRT_POD} -- virsh define /tmp/fake-baremetal-${NODE}.xml
- kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "vbmc delete fake-baremetal-${NODE} || true"
- kubectl exec -n libvirt ${LIBVIRT_POD} -- vbmc add fake-baremetal-${NODE} --port ${BMC_PORT}
- kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "nohup vbmc start fake-baremetal-${NODE} &>/dev/null &"
- kubectl exec -n libvirt ${LIBVIRT_POD} -- virsh list --all
- kubectl exec -n libvirt ${LIBVIRT_POD} -- vbmc show fake-baremetal-${NODE}
- echo "${LIBVIRT_NODE_IP} ${MAC_ADDR} ${BMC_PORT} ${NODE}" >> /tmp/bm-hosts.txt
- BMC_PORT=$((BMC_PORT + 1))
- done
- done
- done
- export OS_CLOUD=openstack_helm
- export OSH_IRONIC_NODE_DISC="279"
- export OSH_IRONIC_NODE_RAM="65536"
- export OSH_IRONIC_NODE_CPU="8"
- export OSH_IRONIC_NODE_ARCH="x86_64"
- #NOTE: Register the baremetal nodes with ironic
- DEPLOY_VMLINUZ_UUID=$(openstack image show ironic-agent.kernel -f value -c id)
- DEPLOY_INITRD_UUID=$(openstack image show ironic-agent.initramfs -f value -c id)
- MASTER_IP=$(kubectl get node $(hostname -f) -o json | jq -r '.status.addresses[] | select(.type=="InternalIP").address')
- while read NODE_DETAIL_RAW; do
- NODE_DETAIL=($(echo ${NODE_DETAIL_RAW}))
- NODE_BMC_IP=${NODE_DETAIL[0]}
- NODE_MAC=${NODE_DETAIL[1]}
- NODE_BMC_PORT=${NODE_DETAIL[2]}
- NODE_NAME=${NODE_DETAIL[3]}
- BM_NODE=$(openstack baremetal node create \
- --name ${NODE_NAME} \
- --driver agent_ipmitool \
- --driver-info ipmi_username=admin \
- --driver-info ipmi_password=password \
- --driver-info ipmi_address="${NODE_BMC_IP}" \
- --driver-info ipmi_port="${NODE_BMC_PORT}" \
- --driver-info deploy_kernel=${DEPLOY_VMLINUZ_UUID} \
- --driver-info deploy_ramdisk=${DEPLOY_INITRD_UUID} \
- --property local_gb=${OSH_IRONIC_NODE_DISC} \
- --property memory_mb=${OSH_IRONIC_NODE_RAM} \
- --property cpus=${OSH_IRONIC_NODE_CPU} \
- --property cpu_arch=${OSH_IRONIC_NODE_ARCH} \
- -f value -c uuid)
- openstack baremetal node manage "${BM_NODE}"
- openstack baremetal port create --node ${BM_NODE} "${NODE_MAC}"
- openstack baremetal node validate "${BM_NODE}"
- openstack baremetal node provide "${BM_NODE}"
- openstack baremetal node show "${BM_NODE}"
- done < /tmp/bm-hosts.txt
- #NOTE: Create a flavor assocated with our baremetal nodes
- openstack flavor create \
- --disk ${OSH_IRONIC_NODE_DISC} \
- --ram ${OSH_IRONIC_NODE_RAM} \
- --vcpus ${OSH_IRONIC_NODE_CPU} \
- --property cpu_arch=${OSH_IRONIC_NODE_ARCH} \
- --property baremetal=true \
- baremetal
Add Comment
Please, Sign In to add comment