diff options
-rwxr-xr-x | ci/deploy.sh | 11 | ||||
-rwxr-xr-x | deploy/deploy.py | 11 | ||||
-rw-r--r-- | deploy/environments/virtual_fuel.py | 22 |
3 files changed, 29 insertions, 15 deletions
diff --git a/ci/deploy.sh b/ci/deploy.sh index c7a1d1858..4e4586c2e 100755 --- a/ci/deploy.sh +++ b/ci/deploy.sh @@ -58,7 +58,10 @@ and provides a fairly simple mechanism to execute a deployment. Input parameters to the build script is: -b Base URI to the configuration directory (needs to be provided in a URI style, it can be a local resource: file:// or a remote resource http(s)://) --B PXE Bridge for booting of Fuel master, default is pxebr +-B PXE Bridge for booting of Fuel master. It can be specified several times, + or as a comma separated list of bridges, or both: -B br1 -B br2,br3 + One NIC connected to each specified bridge will be created in the Fuel VM, + in the same order as provided in the command line. The default is pxebr. -d Dry-run - Produces deploy config files (config/dea.yaml and config/dha.yaml), but does not execute deploy -f Deploy on existing Fuel master @@ -135,9 +138,9 @@ do fi ;; B) - if [[ ${OPTARG} ]]; then - PXE_BRIDGE="-b ${OPTARG}" - fi + for bridge in ${OPTARG//,/ }; do + PXE_BRIDGE+=" -b $bridge" + done ;; d) DRY_RUN=1 diff --git a/deploy/deploy.py b/deploy/deploy.py index 8064af993..9e188ebe6 100755 --- a/deploy/deploy.py +++ b/deploy/deploy.py @@ -164,6 +164,7 @@ class AutoDeploy(object): exec_cmd('mkisofs -quiet -r -J -R -b %s ' '-no-emul-boot -boot-load-size 4 ' '-boot-info-table -hide-rr-moved ' + '-joliet-long ' '-x "lost+found:" -V %s -o %s .' % (iso_linux_bin, iso_label, new_iso)) @@ -318,8 +319,8 @@ def parse_arguments(): parser.add_argument('-s', dest='storage_dir', action='store', default='%s/images' % CWD, help='Storage Directory [default: images]') - parser.add_argument('-b', dest='pxe_bridge', action='store', - default='pxebr', + parser.add_argument('-b', dest='pxe_bridge', action='append', + default=[], help='Linux Bridge for booting up the Fuel Master VM ' '[default: pxebr]') parser.add_argument('-p', dest='fuel_plugins_dir', action='store', @@ -341,6 +342,9 @@ def parse_arguments(): args = parser.parse_args() log(args) + if not args.pxe_bridge: + args.pxe_bridge = ['pxebr'] + check_file_exists(args.dha_file) check_dir_exists(os.path.dirname(args.deploy_log)) @@ -355,7 +359,8 @@ def parse_arguments(): check_file_exists(iso_abs_path) log('Using image directory: %s' % args.storage_dir) create_dir_if_not_exists(args.storage_dir) - check_bridge(args.pxe_bridge, args.dha_file) + for bridge in args.pxe_bridge: + check_bridge(bridge, args.dha_file) kwargs = {'no_fuel': args.no_fuel, 'fuel_only': args.fuel_only, diff --git a/deploy/environments/virtual_fuel.py b/deploy/environments/virtual_fuel.py index 2fac98b25..b1a76e479 100644 --- a/deploy/environments/virtual_fuel.py +++ b/deploy/environments/virtual_fuel.py @@ -67,22 +67,25 @@ class VirtualFuel(ExecutionEnvironment): with open(self.temp_vm_file, "wc") as f: self.vm_xml.write(f, pretty_print=True, xml_declaration=True) - def set_vm_nic(self): + def del_vm_nics(self): interfaces = self.vm_xml.xpath('/domain/devices/interface') for interface in interfaces: interface.getparent().remove(interface) + + def add_vm_nic(self, bridge): interface = etree.Element('interface') interface.set('type', 'bridge') source = etree.SubElement(interface, 'source') - source.set('bridge', self.pxe_bridge) + source.set('bridge', bridge) model = etree.SubElement(interface, 'model') model.set('type', 'virtio') + devices = self.vm_xml.xpath('/domain/devices') if devices: device = devices[0] device.append(interface) - - self.update_vm_template_file() + else: + err('No devices!') def create_volume(self, pool, name, su, img_type='qcow2'): log('Creating image using Libvirt volumes in pool %s, name: %s' % @@ -121,11 +124,14 @@ class VirtualFuel(ExecutionEnvironment): disk_size = disk_sizes['fuel'] disk_path = self.create_image(disk_path, disk_size) - temp_vm_file = '%s/%s' % (self.temp_dir, self.vm_name) - exec_cmd('cp %s %s' % (self.vm_template, temp_vm_file)) - self.set_vm_nic() + self.del_vm_nics() + for bridge in self.pxe_bridge: + self.add_vm_nic(bridge) + self.update_vm_template_file() + vm_definition_overwrite = self.dha.get_vm_definition('fuel') - self.define_vm(self.vm_name, temp_vm_file, disk_path, + + self.define_vm(self.vm_name, self.temp_vm_file, disk_path, vm_definition_overwrite) def setup_environment(self): |