Use bm_poseur to create VM and network bridge
so that, in the absence of physical hardware,
baremetal driver still has something to manipulate.
Change-Id: Id80ede13a35e4380f358b47f08d41ff98ea9d70f
| ... | ... |
@@ -71,10 +71,24 @@ BM_POWER_MANAGER=${BM_POWER_MANAGER:-nova.virt.baremetal.fake.FakePowerManager}
|
| 71 | 71 |
# These should be customized to your environment and hardware |
| 72 | 72 |
# ----------------------------------------------------------- |
| 73 | 73 |
|
| 74 |
-# BM_DNSMASQ_* options must be changed to suit your network environment |
|
| 75 |
-BM_DNSMASQ_IFACE=${BM_DNSMASQ_IFACE:-$PUBLIC_INTERFACE}
|
|
| 76 |
-BM_DNSMASQ_IFACE=${BM_DNSMASQ_IFACE:-eth0}
|
|
| 77 |
-BM_DNSMASQ_RANGE=${BM_DNSMASQ_RANGE:-192.0.2.32,192.0.2.48}
|
|
| 74 |
+# whether to create a fake environment, eg. for devstack-gate |
|
| 75 |
+BM_USE_FAKE_ENV=`trueorfalse False $BM_USE_FAKE_ENV` |
|
| 76 |
+ |
|
| 77 |
+# Extra options to pass to bm_poseur |
|
| 78 |
+# change the bridge name or IP: --bridge br99 --bridge-ip 192.0.2.1 |
|
| 79 |
+# change the virtualization type: --engine qemu |
|
| 80 |
+BM_POSEUR_EXTRA_OPTS=${BM_POSEUR_EXTRA_OPTS:-}
|
|
| 81 |
+ |
|
| 82 |
+# BM_DNSMASQ_IFACE should match FLAT_NETWORK_BRIDGE |
|
| 83 |
+if [ "$BM_USE_FAKE_ENV" ]; then |
|
| 84 |
+ BM_DNSMASQ_IFACE=${BM_DNSMASQ_IFACE:-br99}
|
|
| 85 |
+ BM_DNSMASQ_RANGE=${BM_DNSMASQ_RANGE:-192.0.2.32,192.0.2.48}
|
|
| 86 |
+else |
|
| 87 |
+ BM_DNSMASQ_IFACE=${BM_DNSMASQ_IFACE:-eth0}
|
|
| 88 |
+ # if testing on a physical network, |
|
| 89 |
+ # BM_DNSMASQ_RANGE must be changed to suit your network |
|
| 90 |
+ BM_DNSMASQ_RANGE=${BM_DNSMASQ_RANGE:-}
|
|
| 91 |
+fi |
|
| 78 | 92 |
|
| 79 | 93 |
# BM_FIRST_MAC *must* be set to the MAC address of the node you will boot. |
| 80 | 94 |
# This is passed to dnsmasq along with the kernel/ramdisk to |
| ... | ... |
@@ -108,8 +122,8 @@ BM_FLAVOR_ARCH=${BM_FLAVOR_ARCH:-$BM_CPU_ARCH}
|
| 108 | 108 |
|
| 109 | 109 |
# Below this, we set some path and filenames. |
| 110 | 110 |
# Defaults are probably sufficient. |
| 111 |
- |
|
| 112 | 111 |
BM_IMAGE_BUILD_DIR=${BM_IMAGE_BUILD_DIR:-$DEST/diskimage-builder}
|
| 112 |
+BM_POSEUR_DIR=${BM_POSEUR_DIR:-$DEST/bm_poseur}
|
|
| 113 | 113 |
|
| 114 | 114 |
BM_HOST_CURRENT_KERNEL=$(uname -r) |
| 115 | 115 |
BM_DEPLOY_RAMDISK=${BM_DEPLOY_RAMDISK:-bm-deploy-$BM_HOST_CURRENT_KERNEL-initrd}
|
| ... | ... |
@@ -140,6 +154,7 @@ function is_baremetal() {
|
| 140 | 140 |
# so that we can build the deployment kernel & ramdisk |
| 141 | 141 |
function prepare_baremetal_toolchain() {
|
| 142 | 142 |
git_clone $BM_IMAGE_BUILD_REPO $BM_IMAGE_BUILD_DIR $BM_IMAGE_BUILD_BRANCH |
| 143 |
+ git_clone $BM_POSEUR_REPO $BM_POSEUR_DIR $BM_POSEUR_BRANCH |
|
| 143 | 144 |
|
| 144 | 145 |
local shellinabox_basename=$(basename $BM_SHELL_IN_A_BOX) |
| 145 | 146 |
if [[ ! -e $DEST/$shellinabox_basename ]]; then |
| ... | ... |
@@ -158,6 +173,27 @@ function prepare_baremetal_toolchain() {
|
| 158 | 158 |
fi |
| 159 | 159 |
} |
| 160 | 160 |
|
| 161 |
+# set up virtualized environment for devstack-gate testing |
|
| 162 |
+function create_fake_baremetal_env() {
|
|
| 163 |
+ local bm_poseur="$BM_POSEUR_DIR/bm_poseur" |
|
| 164 |
+ # TODO(deva): add support for >1 VM |
|
| 165 |
+ sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS create-bridge |
|
| 166 |
+ sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS create-vm |
|
| 167 |
+ BM_FIRST_MAC=$(sudo $bm_poseur get-macs) |
|
| 168 |
+ |
|
| 169 |
+ # NOTE: there is currently a limitation in baremetal driver |
|
| 170 |
+ # that requires second MAC even if it is not used. |
|
| 171 |
+ # Passing a fake value allows this to work. |
|
| 172 |
+ # TODO(deva): remove this after driver issue is fixed. |
|
| 173 |
+ BM_SECOND_MAC='12:34:56:78:90:12' |
|
| 174 |
+} |
|
| 175 |
+ |
|
| 176 |
+function cleanup_fake_baremetal_env() {
|
|
| 177 |
+ local bm_poseur="$BM_POSEUR_DIR/bm_poseur" |
|
| 178 |
+ sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS destroy-vm |
|
| 179 |
+ sudo $bm_poseur $BM_POSEUR_EXTRA_OPTS destroy-bridge |
|
| 180 |
+} |
|
| 181 |
+ |
|
| 161 | 182 |
# prepare various directories needed by baremetal hypervisor |
| 162 | 183 |
function configure_baremetal_nova_dirs() {
|
| 163 | 184 |
# ensure /tftpboot is prepared |
| ... | ... |
@@ -1145,6 +1145,9 @@ if is_service_enabled nova && is_baremetal; then |
| 1145 | 1145 |
echo_summary "Preparing for nova baremetal" |
| 1146 | 1146 |
prepare_baremetal_toolchain |
| 1147 | 1147 |
configure_baremetal_nova_dirs |
| 1148 |
+ if [[ "$BM_USE_FAKE_ENV" = "True" ]]; then |
|
| 1149 |
+ create_fake_baremetal_env |
|
| 1150 |
+ fi |
|
| 1148 | 1151 |
fi |
| 1149 | 1152 |
|
| 1150 | 1153 |
# Launch Services |
| ... | ... |
@@ -115,6 +115,13 @@ RYU_BRANCH=master |
| 115 | 115 |
BM_IMAGE_BUILD_REPO=https://github.com/stackforge/diskimage-builder.git |
| 116 | 116 |
BM_IMAGE_BUILD_BRANCH=master |
| 117 | 117 |
|
| 118 |
+# bm_poseur |
|
| 119 |
+# Used to simulate a hardware environment for baremetal |
|
| 120 |
+# Only used if BM_USE_FAKE_ENV is set |
|
| 121 |
+BM_POSEUR_REPO=https://github.com/tripleo/bm_poseur.git |
|
| 122 |
+BM_POSEUR_BRANCH=master |
|
| 123 |
+ |
|
| 124 |
+ |
|
| 118 | 125 |
# Nova hypervisor configuration. We default to libvirt with **kvm** but will |
| 119 | 126 |
# drop back to **qemu** if we are unable to load the kvm module. ``stack.sh`` can |
| 120 | 127 |
# also install an **LXC** or **OpenVZ** based system. |
| ... | ... |
@@ -25,6 +25,7 @@ source $TOP_DIR/stackrc |
| 25 | 25 |
DATA_DIR=${DATA_DIR:-${DEST}/data}
|
| 26 | 26 |
|
| 27 | 27 |
# Get project function libraries |
| 28 |
+source $TOP_DIR/lib/baremetal |
|
| 28 | 29 |
source $TOP_DIR/lib/cinder |
| 29 | 30 |
source $TOP_DIR/lib/horizon |
| 30 | 31 |
source $TOP_DIR/lib/swift |
| ... | ... |
@@ -67,6 +68,11 @@ if is_service_enabled tls-proxy; then |
| 67 | 67 |
killall stud |
| 68 | 68 |
fi |
| 69 | 69 |
|
| 70 |
+# baremetal might have created a fake environment |
|
| 71 |
+if is_service_enabled baremetal && [[ "$BM_USE_FAKE_ENV" = "True" ]]; then |
|
| 72 |
+ cleanup_fake_baremetal_env |
|
| 73 |
+fi |
|
| 74 |
+ |
|
| 70 | 75 |
SCSI_PERSIST_DIR=$CINDER_STATE_PATH/volumes/* |
| 71 | 76 |
|
| 72 | 77 |
# Get the iSCSI volumes |