Browse code

Add fake env support to baremetal

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

Devananda van der Veen authored on 2012/11/24 03:54:54
Showing 4 changed files
... ...
@@ -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