async def set_lxd_info(self, network, storage_pool): self.set_state('lxd-network-name', network['name']) # If using custom bridge names other than `lxdbr0` the # default lxd profile has to be updated to reflect that. This # is because Juju only checks the `default` profile for the # bridge to utilize when bootstraping and deploying. # See: https://git.io/vbp5X try: ret, _, _ = await utils.arun([ app.provider.lxc_bin, "profile", "device", "set", "default", "eth0", "parent", network['name'] ]) except CalledProcessError as e: app.log.error('Unable to set the default profiles parent network' 'device: {}'.format(e.stderr)) raise phys_iface_addr = utils.get_physical_network_ipaddr(network['name']) try: iface = ipaddress.IPv4Interface("{}/24".format(phys_iface_addr)) except ipaddress.AddressValueError: raise errors.LXDSetupControllerError( "Unable to determine ip address of {network}, please double " "check `lxc network edit {network}` and make " "sure an address is associated with that bridge.".format( network=network['name'])) self.set_state('lxd-network', iface.network) self.set_state('lxd-gateway', iface.ip) self.set_state('lxd-network-dhcp-range-start', iface.ip + 1) # To account for current interface taking 1 ip number_of_hosts = len(list(iface.network.hosts())) - 1 self.set_state('lxd-network-dhcp-range-stop', "{}".format(iface.ip + number_of_hosts)) self.set_state('lxd-storage-pool', storage_pool['name']) app.log.debug('LXD Info set: ' '(name: {}) ' '(network: {}) ' '(gateway: {}) ' '(dhcp-range-start: {}) ' '(dhcp-range-stop: {})'.format( self.get_state('lxd-network-name'), self.get_state('lxd-network'), self.get_state('lxd-gateway'), self.get_state('lxd-network-dhcp-range-start'), self.get_state('lxd-network-dhcp-range-stop')))
async def set_lxd_info(self, network, storage_pool): self.set_state('lxd-network-name', network['name']) phys_iface_addr = utils.get_physical_network_ipaddr(network['name']) iface = ipaddress.IPv4Interface(phys_iface_addr) self.set_state('lxd-network', iface.network) self.set_state('lxd-gateway', iface.ip) self.set_state('lxd-network-dhcp-range-start', iface.ip + 1) # To account for current interface taking 1 ip number_of_hosts = len(list(iface.network.hosts())) - 1 self.set_state('lxd-network-dhcp-range-stop', "{}".format(iface.ip + number_of_hosts)) self.set_state('lxd-storage-pool', storage_pool['name']) app.log.debug('LXD Info set: ' '(name: {}) ' '(network: {}) ' '(gateway: {}) ' '(dhcp-range-start: {}) ' '(dhcp-range-stop: {})'.format( self.get_state('lxd-network-name'), self.get_state('lxd-network'), self.get_state('lxd-gateway'), self.get_state('lxd-network-dhcp-range-start'), self.get_state('lxd-network-dhcp-range-stop')))
def render(self): creds = None cloud_type = juju.get_cloud_types_by_name()[app.current_cloud] if cloud_type != 'localhost': creds = common.try_get_creds(app.current_cloud) if not creds: utils.warning("You attempted to do an install against a cloud " "that requires credentials that could not be " "found. If you wish to supply those " "credentials please run " "`juju add-credential " "{}`.".format(app.current_cloud)) events.Shutdown.set(1) return if cloud_type == 'localhost': # Grab list of available physical networks to bind our bridge to iface = None try: ifaces = utils.get_physical_network_interfaces() # Grab the first physical network device that has an ip address iface = [ i for i in ifaces if utils.get_physical_network_ipaddr(i) ][0] except: utils.warning( "Could not find a suitable physical network interface " "to create a LXD bridge on. Please check your network " "configuration.") events.Shutdown.set(1) if not common.get_lxd_setup_path().exists(): common.lxd_init(iface) common.get_lxd_setup_path().touch() app.loop.create_task(self.finish(creds))