From 2a9e72d95200161ec27e8f199a76c6ec1f88bff1 Mon Sep 17 00:00:00 2001 From: Josep Puigdemont Date: Fri, 20 May 2016 10:23:45 +0200 Subject: virtual_fuel: prepare class to allow multiple bridges The VirtualFuel class has now two new methods: del_vm_nics: Deletes all interfaces from the VM. add_vm_nic: Adds a NIC to the VM, attached to the specified bridge. The following method has been deleted: set_vm_nic: implemented with the two new methods Apart from the deleted method, no functionality has been changed. This is just a small but necessary step towards adding support for configuring more than one NIC in the fuel VM. Change-Id: I9f02c8163dfb9768510e78d5d5e77a0bb43306fb Signed-off-by: Josep Puigdemont --- deploy/environments/virtual_fuel.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'deploy/environments/virtual_fuel.py') diff --git a/deploy/environments/virtual_fuel.py b/deploy/environments/virtual_fuel.py index 2fac98b25..5a86c9711 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,13 @@ 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() + self.add_vm_nic(self.pxe_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): -- cgit 1.2.3-korg From dfc83244874060c4052bc3d29c256fa1bd52687d Mon Sep 17 00:00:00 2001 From: Josep Puigdemont Date: Fri, 6 May 2016 04:32:06 +0200 Subject: deploy: add support for multiple bridges deploy.py: Some Fuel VMs may need more than one network interface. To be able to provide that, we now allow the user to specify the "-b" paramter (bridge) multiple times, creating a new NIC for each one of them. The NICs are created in the same order as they are given in the command line. There is no change in behavior from earlier versions, pxebr will still be the default bridge if none is specified in the command line. deploy.sh: To reflect the new capabilities of deploy.py, we introduce the possibility to specify -B more than once in deploy.sh, and honor that when calling deploy.py. We also make it possible to specify a comma separated list of bridges, as in: -B br1,br2. Change-Id: I1a0100f2cfe755ec6adfeedafb391c2357f46f51 Signed-off-by: Josep Puigdemont --- ci/deploy.sh | 11 +++++++---- deploy/deploy.py | 10 +++++++--- deploy/environments/virtual_fuel.py | 3 ++- 3 files changed, 16 insertions(+), 8 deletions(-) (limited to 'deploy/environments/virtual_fuel.py') 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..56e5bd583 100755 --- a/deploy/deploy.py +++ b/deploy/deploy.py @@ -318,8 +318,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 +341,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 +358,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 5a86c9711..b1a76e479 100644 --- a/deploy/environments/virtual_fuel.py +++ b/deploy/environments/virtual_fuel.py @@ -125,7 +125,8 @@ class VirtualFuel(ExecutionEnvironment): disk_path = self.create_image(disk_path, disk_size) self.del_vm_nics() - self.add_vm_nic(self.pxe_bridge) + 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') -- cgit 1.2.3-korg