Guest User

Untitled

a guest
Feb 23rd, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.65 KB | None | 0 0
  1. for DEVICE in sdf sdi sdg sde sdj sdh; do
  2. sudo /sbin/parted /dev/${DEVICE} mklabel gpt --script
  3. sudo /sbin/parted /dev/${DEVICE} mkpart primary 0% 25% --script
  4. sudo /sbin/parted /dev/${DEVICE} mkpart primary 25% 50% --script
  5. sudo /sbin/parted /dev/${DEVICE} mkpart primary 50% 75% --script
  6. sudo /sbin/parted /dev/${DEVICE} mkpart primary 75% 100% --script
  7. done
  8.  
  9.  
  10. for DEVICE in sdf sdi sdg sde sdj sdh; do
  11. COUNTER=1
  12. until [ $COUNTER -gt 2 ]; do
  13. echo PART $COUNTER $((COUNTER + 2))
  14. NODE="${DEVICE}-${COUNTER}"
  15. tee /tmp/fake-baremetal-${NODE}.xml <<EOF
  16. <domain type='qemu'>
  17. <name>fake-baremetal-${NODE}</name>
  18. <memory unit='MB'>65536</memory>
  19. <vcpu placement='static'>8</vcpu>
  20. <resource>
  21. <partition>/machine</partition>
  22. </resource>
  23. <os>
  24. <type arch='x86_64' machine='pc'>hvm</type>
  25. <boot dev='network'/>
  26. <boot dev='hd'/>
  27. <bootmenu enable='no'/>
  28. <bios useserial='yes'/>
  29. </os>
  30. <features>
  31. <acpi/>
  32. <apic/>
  33. </features>
  34. <cpu>
  35. <topology sockets='1' cores='8' threads='1'/>
  36. </cpu>
  37. <clock offset='localtime'/>
  38. <on_poweroff>destroy</on_poweroff>
  39. <on_reboot>restart</on_reboot>
  40. <on_crash>restart</on_crash>
  41. <devices>
  42. <emulator>/usr/libexec/qemu-kvm</emulator>
  43. <disk type='block' device='disk'>
  44. <driver name='qemu' type='raw'/>
  45. <source dev='/dev/${DEVICE}${COUNTER}'/>
  46. <target dev='vda'/>
  47. </disk>
  48. <disk type='block' device='disk'>
  49. <driver name='qemu' type='raw'/>
  50. <source dev='/dev/${DEVICE}$((COUNTER + 2))'/>
  51. <target dev='vdb'/>
  52. </disk>
  53. <controller type='usb' index='0'>
  54. <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
  55. </controller>
  56. <controller type='ide' index='0'>
  57. <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
  58. </controller>
  59. <controller type='pci' index='0' model='pci-root'/>
  60. <interface type='bridge'>
  61. <mac address='00:01:DE:AD:BE:EF'/>
  62. <source bridge='ironic-pxe'/>
  63. <virtualport type='openvswitch'>
  64. </virtualport>
  65. <model type='virtio'/>
  66. <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
  67. </interface>
  68. <serial type='file'>
  69. <source path='/tmp/fake-baremetal-${NODE}.log' append='on'/>
  70. <target port='0'/>
  71. </serial>
  72. <serial type='pty'>
  73. <target port='1'/>
  74. </serial>
  75. <console type='file'>
  76. <source path='/tmp/fake-baremetal-${NODE}.log' append='on'/>
  77. <target type='serial' port='0'/>
  78. </console>
  79. <input type='tablet' bus='usb'>
  80. <address type='usb' bus='0' port='1'/>
  81. </input>
  82. <input type='mouse' bus='ps2'/>
  83. <input type='keyboard' bus='ps2'/>
  84. <memballoon model='virtio'>
  85. <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
  86. </memballoon>
  87. </devices>
  88. </domain>
  89. EOF
  90. let COUNTER=COUNTER+1
  91. done
  92. done
  93.  
  94.  
  95. LIBVIRT_PODS=$(kubectl get --namespace libvirt pods \
  96. -l application=libvirt,component=libvirt \
  97. --no-headers -o name | awk -F '/' '{ print $NF }')
  98. rm -f /tmp/bm-hosts.txt || true
  99.  
  100. BMC_PORT=623
  101. for DEVICE in sdf sdi sdg sde sdj sdh; do
  102. COUNTER=1
  103. until [ $COUNTER -gt 2 ]; do
  104. echo PART $COUNTER $((COUNTER + 2))
  105. NODE="${DEVICE}-${COUNTER}"
  106. let COUNTER=COUNTER+1
  107. for LIBVIRT_POD in ${LIBVIRT_PODS}; do
  108. TEMPLATE_MAC_ADDR="00:01:DE:AD:BE:EF"
  109. MAC_ADDR=$(printf '00:01:DE:%02X:%02X:%02X\n' $[RANDOM%256] $[RANDOM%256] $[RANDOM%256])
  110. LIBVIRT_POD_NODE=$(kubectl get -n libvirt pod ${LIBVIRT_POD} -o json | jq -r '.spec.nodeName')
  111. LIBVIRT_NODE_IP=$(kubectl get node ${LIBVIRT_POD_NODE} -o json | jq -r '.status.addresses[] | select(.type=="InternalIP").address')
  112. kubectl exec -n libvirt ${LIBVIRT_POD} -- mkdir -p /var/lib/libvirt/images
  113. kubectl exec -n libvirt ${LIBVIRT_POD} -- chown -R qemu: /var/lib/libvirt/images
  114. VM_DEF="$(sed "s|${TEMPLATE_MAC_ADDR}|${MAC_ADDR}|g" /tmp/fake-baremetal-${NODE}.xml | base64 -w0)"
  115. kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "echo "${VM_DEF}" | base64 -d > /tmp/fake-baremetal-${NODE}.xml"
  116. kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "virsh undefine fake-baremetal-${NODE} || true"
  117. kubectl exec -n libvirt ${LIBVIRT_POD} -- virsh define /tmp/fake-baremetal-${NODE}.xml
  118. kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "vbmc delete fake-baremetal-${NODE} || true"
  119. kubectl exec -n libvirt ${LIBVIRT_POD} -- vbmc add fake-baremetal-${NODE} --port ${BMC_PORT}
  120. kubectl exec -n libvirt ${LIBVIRT_POD} -- sh -c "nohup vbmc start fake-baremetal-${NODE} &>/dev/null &"
  121. kubectl exec -n libvirt ${LIBVIRT_POD} -- virsh list --all
  122. kubectl exec -n libvirt ${LIBVIRT_POD} -- vbmc show fake-baremetal-${NODE}
  123. echo "${LIBVIRT_NODE_IP} ${MAC_ADDR} ${BMC_PORT} ${NODE}" >> /tmp/bm-hosts.txt
  124. BMC_PORT=$((BMC_PORT + 1))
  125. done
  126. done
  127. done
  128.  
  129. export OS_CLOUD=openstack_helm
  130. export OSH_IRONIC_NODE_DISC="279"
  131. export OSH_IRONIC_NODE_RAM="65536"
  132. export OSH_IRONIC_NODE_CPU="8"
  133. export OSH_IRONIC_NODE_ARCH="x86_64"
  134.  
  135. #NOTE: Register the baremetal nodes with ironic
  136. DEPLOY_VMLINUZ_UUID=$(openstack image show ironic-agent.kernel -f value -c id)
  137. DEPLOY_INITRD_UUID=$(openstack image show ironic-agent.initramfs -f value -c id)
  138. MASTER_IP=$(kubectl get node $(hostname -f) -o json | jq -r '.status.addresses[] | select(.type=="InternalIP").address')
  139. while read NODE_DETAIL_RAW; do
  140. NODE_DETAIL=($(echo ${NODE_DETAIL_RAW}))
  141. NODE_BMC_IP=${NODE_DETAIL[0]}
  142. NODE_MAC=${NODE_DETAIL[1]}
  143. NODE_BMC_PORT=${NODE_DETAIL[2]}
  144. NODE_NAME=${NODE_DETAIL[3]}
  145. BM_NODE=$(openstack baremetal node create \
  146. --name ${NODE_NAME} \
  147. --driver agent_ipmitool \
  148. --driver-info ipmi_username=admin \
  149. --driver-info ipmi_password=password \
  150. --driver-info ipmi_address="${NODE_BMC_IP}" \
  151. --driver-info ipmi_port="${NODE_BMC_PORT}" \
  152. --driver-info deploy_kernel=${DEPLOY_VMLINUZ_UUID} \
  153. --driver-info deploy_ramdisk=${DEPLOY_INITRD_UUID} \
  154. --property local_gb=${OSH_IRONIC_NODE_DISC} \
  155. --property memory_mb=${OSH_IRONIC_NODE_RAM} \
  156. --property cpus=${OSH_IRONIC_NODE_CPU} \
  157. --property cpu_arch=${OSH_IRONIC_NODE_ARCH} \
  158. -f value -c uuid)
  159. openstack baremetal node manage "${BM_NODE}"
  160. openstack baremetal port create --node ${BM_NODE} "${NODE_MAC}"
  161. openstack baremetal node validate "${BM_NODE}"
  162. openstack baremetal node provide "${BM_NODE}"
  163. openstack baremetal node show "${BM_NODE}"
  164. done < /tmp/bm-hosts.txt
  165.  
  166.  
  167.  
  168.  
  169. #NOTE: Create a flavor assocated with our baremetal nodes
  170. openstack flavor create \
  171. --disk ${OSH_IRONIC_NODE_DISC} \
  172. --ram ${OSH_IRONIC_NODE_RAM} \
  173. --vcpus ${OSH_IRONIC_NODE_CPU} \
  174. --property cpu_arch=${OSH_IRONIC_NODE_ARCH} \
  175. --property baremetal=true \
  176. baremetal
Add Comment
Please, Sign In to add comment