Exemplo n.º 1
0
    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')))
Exemplo n.º 2
0
 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')))
Exemplo n.º 3
0
    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))