Exemplo n.º 1
0
 def configure_lxc_root_tarball(self, rootfs):
     """ Use a local copy of the cloud rootfs tarball """
     host = self.machine.dns_name
     cmds = "sudo mkdir -p /var/cache/lxc/cloud-trusty"
     utils.remote_run(self.machine.machine_id, cmds=cmds)
     utils.remote_cp(host, src=rootfs, dst="/var/cache/lxc/cloud-trusty")
     self.lxc_root_tarball_configured = True
Exemplo n.º 2
0
 def configure_lxc_root_tarball(self, rootfs):
     """ Use a local copy of the cloud rootfs tarball """
     host = self.machine.dns_name
     cmds = "sudo mkdir -p /var/cache/lxc/cloud-trusty"
     utils.remote_run(self.machine.machine_id, cmds=cmds)
     utils.remote_cp(host, src=rootfs, dst="/var/cache/lxc/cloud-trusty")
     self.lxc_root_tarball_configured = True
Exemplo n.º 3
0
    def get_started_machine(self):
        started_machines = sorted([
            m for m in self.juju_state.machines_allocated()
            if m.agent_state == 'started'
        ],
                                  key=lambda m: int(m.machine_id))

        if len(started_machines) > 0:
            controller_id = started_machines[0].machine_id
            utils.remote_cp(controller_id,
                            src="/usr/share/cloud-installer/tools/apt-go-fast",
                            dst="/tmp/apt-go-fast")
            utils.remote_run(controller_id, cmds="sudo sh /tmp/apt-go-fast")
            self.info_message(
                "Using machine {} as controller host.".format(controller_id))
            return started_machines[0]

        machines_summary_items = self.juju_state.machines_summary().items()
        if len(machines_summary_items) > 0:
            status_string = ", ".join(
                ["{} {}".format(v, k) for k, v in machines_summary_items])
            self.info_message("Waiting for a machine."
                              " Machines summary: {}".format(status_string))
        else:
            self.info_message("Waiting for a machine.")

        return None
Exemplo n.º 4
0
 def run_apt_go_fast(self, machine_id):
     utils.remote_cp(machine_id,
                     src=path.join(self.config.share_path,
                                   "tools/apt-go-fast"),
                     dst="/tmp/apt-go-fast")
     utils.remote_run(machine_id,
                      cmds="sudo sh /tmp/apt-go-fast")
Exemplo n.º 5
0
    def get_started_machine(self):
        started_machines = sorted([m for m in
                                   self.juju_state.machines_allocated()
                                   if m.agent_state == 'started'],
                                  key=lambda m: int(m.machine_id))

        if len(started_machines) > 0:
            controller_id = started_machines[0].machine_id
            utils.remote_cp(controller_id,
                            src="/usr/share/cloud-installer/tools/apt-go-fast",
                            dst="/tmp/apt-go-fast")
            utils.remote_run(controller_id,
                             cmds="sudo sh /tmp/apt-go-fast")
            self.info_message("Using machine {} as controller host.".format(
                controller_id))
            return started_machines[0]

        machines_summary_items = self.juju_state.machines_summary().items()
        if len(machines_summary_items) > 0:
            status_string = ", ".join(["{} {}".format(v, k) for k, v in
                                       machines_summary_items])
            self.info_message("Waiting for a machine."
                              " Machines summary: {}".format(status_string))
        else:
            self.info_message("Waiting for a machine.")

        return None
Exemplo n.º 6
0
    def post_proc(self):
        """ performs additional network configuration for charm """
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)

        if unit.machine_id == '-1':
            return True

        self.ui.status_info_message("Validating network parameters "
                                    "for Neutron")
        utils.remote_cp(
            unit.machine_id,
            src=os.path.join(self.config.tmpl_path, "neutron-network.sh"),
            dst="/tmp/neutron-network.sh",
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_run(
            unit.machine_id,
            cmds="sudo chmod +x /tmp/neutron-network.sh",
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_run(
            unit.machine_id,
            cmds="sudo /tmp/neutron-network.sh {}".format(
                self.config.getopt('install_type')),
            juju_home=self.config.juju_home(use_expansion=True))
        self.ui.status_info_message("Done.")
        return False
    def post_proc(self):
        """ performs additional network configuration for charm """
        super(CharmNeutron, self).post_proc()
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)

        if unit.machine_id == '-1':
            raise CharmPostProcessException(
                    "Service not ready for workload.")

        self.ui.status_info_message("Validating network parameters "
                                    "for Neutron")
        utils.remote_cp(
            unit.machine_id,
            src=os.path.join(self.config.tmpl_path, "neutron-network.sh"),
            dst="/tmp/neutron-network.sh",
            juju_home=self.config.juju_home(use_expansion=True))
        out = utils.remote_run(
            unit.machine_id,
            cmds="sudo bash /tmp/neutron-network.sh {}".format(
                self.config.getopt('install_type')),
            juju_home=self.config.juju_home(use_expansion=True))
        if out['status'] > 0:
            log.error("Neutron error: {}".format(out))
            raise CharmPostProcessException(out)
Exemplo n.º 8
0
    def post_proc(self):
        """ performs additional network configuration for charm """
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)

        if unit.machine_id == '-1':
            return True

        self.ui.status_info_message("Validating network parameters "
                                    "for Neutron")
        utils.remote_cp(
            unit.machine_id,
            src=os.path.join(self.config.tmpl_path, "neutron-network.sh"),
            dst="/tmp/neutron-network.sh",
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_run(
            unit.machine_id,
            cmds="sudo chmod +x /tmp/neutron-network.sh",
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_run(
            unit.machine_id,
            cmds="sudo /tmp/neutron-network.sh {}".format(
                self.config.getopt('install_type')),
            juju_home=self.config.juju_home(use_expansion=True))
        self.ui.status_info_message("Done.")
        return False
Exemplo n.º 9
0
 def run_apt_go_fast(self, machine_id):
     utils.remote_cp(machine_id,
                     src=path.join(self.config.share_path,
                                   "tools/apt-go-fast"),
                     dst="/tmp/apt-go-fast",
                     juju_home=self.config.juju_home(use_expansion=True))
     utils.remote_run(machine_id,
                      cmds="sudo sh /tmp/apt-go-fast",
                      juju_home=self.config.juju_home(use_expansion=True))
Exemplo n.º 10
0
 def run_apt_go_fast(self, machine_id):
     utils.remote_cp(machine_id,
                     src=path.join(self.config.share_path,
                                   "tools/apt-go-fast"),
                     dst="/tmp/apt-go-fast",
                     juju_home=self.config.juju_home(use_expansion=True))
     utils.remote_run(machine_id,
                      cmds="sudo sh /tmp/apt-go-fast",
                      juju_home=self.config.juju_home(use_expansion=True))
Exemplo n.º 11
0
 def configure_lxc_network(self, machine_id):
     # upload our lxc-host-only template and setup bridge
     log.debug('Copying network specifications to machine')
     srcpath = path.join(self.config.tmpl_path, 'lxc-host-only')
     destpath = "/tmp/lxc-host-only"
     utils.remote_cp(machine_id, src=srcpath, dst=destpath)
     log.debug('Updating network configuration for machine')
     utils.remote_run(machine_id,
                      cmds="sudo chmod +x /tmp/lxc-host-only")
     utils.remote_run(machine_id,
                      cmds="sudo /tmp/lxc-host-only")
Exemplo n.º 12
0
 def configure_lxc_network(self):
     # upload our lxc-host-only template and setup bridge
     self.info_message('Copying network specifications to machine.')
     utils.remote_cp(
         self.machine.machine_id,
         src="/usr/share/cloud-installer/templates/lxc-host-only",
         dst="/tmp/lxc-host-only")
     self.info_message('Updating network configuration for machine.')
     utils.remote_run(self.machine.machine_id,
                      cmds="sudo chmod +x /tmp/lxc-host-only")
     utils.remote_run(self.machine.machine_id,
                      cmds="sudo /tmp/lxc-host-only")
     self.single_net_configured = True
Exemplo n.º 13
0
 def configure_lxc_network(self):
     # upload our lxc-host-only template and setup bridge
     self.info_message('Copying network specifications to machine.')
     utils.remote_cp(
         self.machine.machine_id,
         src="/usr/share/cloud-installer/templates/lxc-host-only",
         dst="/tmp/lxc-host-only")
     self.info_message('Updating network configuration for machine.')
     utils.remote_run(self.machine.machine_id,
                      cmds="sudo chmod +x /tmp/lxc-host-only")
     utils.remote_run(self.machine.machine_id,
                      cmds="sudo /tmp/lxc-host-only")
     self.single_net_configured = True
Exemplo n.º 14
0
 def configure_lxc_network(self, machine_id):
     # upload our lxc-host-only template and setup bridge
     log.info("Copying network specifications to machine")
     srcpath = path.join(self.config.tmpl_path, "lxc-host-only")
     destpath = "/tmp/lxc-host-only"
     utils.remote_cp(machine_id, src=srcpath, dst=destpath, juju_home=self.config.juju_home(use_expansion=True))
     log.debug("Updating network configuration for machine")
     utils.remote_run(
         machine_id, cmds="sudo chmod +x /tmp/lxc-host-only", juju_home=self.config.juju_home(use_expansion=True)
     )
     utils.remote_run(
         machine_id, cmds="sudo /tmp/lxc-host-only", juju_home=self.config.juju_home(use_expansion=True)
     )
Exemplo n.º 15
0
 def configure_lxc_network(self, machine_id):
     # upload our lxc-host-only template and setup bridge
     log.info('Copying network specifications to machine')
     srcpath = path.join(self.config.tmpl_path, 'lxc-host-only')
     destpath = "/tmp/lxc-host-only"
     utils.remote_cp(machine_id, src=srcpath, dst=destpath,
                     juju_home=self.config.juju_home(use_expansion=True))
     log.debug('Updating network configuration for machine')
     utils.remote_run(machine_id,
                      cmds="sudo chmod +x /tmp/lxc-host-only",
                      juju_home=self.config.juju_home(use_expansion=True))
     utils.remote_run(machine_id,
                      cmds="sudo /tmp/lxc-host-only",
                      juju_home=self.config.juju_home(use_expansion=True))
 def post_proc(self):
     """ post processing for nova-cloud-controller """
     unit = self.wait_for_agent()
     if unit:
         # We need to get keystone public_address for auth_url here
         keystone = self.wait_for_agent('keystone')
         if not keystone:
             return True
         for u in ['admin', 'ubuntu']:
             env = self._openstack_env(u, self.openstack_password(),
                                       u, keystone.public_address)
             self._openstack_env_save(u, env)
             utils.remote_cp(unit.machine_id,
                             src=self._openstack_env_path(u),
                             dst='/tmp/openstack-{u}-rc'.format(u=u))
         utils.remote_cp(
             unit.machine_id,
             src=os.path.join(self.tmpl_path,
                              "nova-controller-setup.sh"),
             dst="/tmp/nova-controller-setup.sh")
         utils.remote_cp(
             unit.machine_id,
             src=self._pubkey(),
             dst="/tmp/id_rsa.pub")
         err = utils.remote_run(unit.machine_id,
                                cmds="/tmp/nova-controller-setup.sh "
                                     "{p}".format(
                                         p=self.openstack_password()))
         if err['ret'] == 1:
             # something happened during nova setup, re-run
             return True
         return False
     return True
Exemplo n.º 17
0
    def post_proc(self):
        """ post processing for nova-cloud-controller """
        if not self.wait_for_agent(['keystone', self.charm_name]):
            return True
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)
        k_svc = self.juju_state.service('keystone')
        keystone = k_svc.unit('keystone')

        if unit.machine_id == '-1':
            return True

        for u in ['admin', 'ubuntu']:
            env = self._openstack_env(u, self.config.openstack_password, u,
                                      keystone.public_address)
            self._openstack_env_save(u, env)
            utils.remote_cp(unit.machine_id,
                            src=self._openstack_env_path(u),
                            dst='/tmp/openstack-{u}-rc'.format(u=u))
        utils.remote_cp(unit.machine_id,
                        src=os.path.join(self.config.tmpl_path,
                                         "nova-controller-setup.sh"),
                        dst="/tmp/nova-controller-setup.sh")
        utils.remote_cp(unit.machine_id,
                        src=self._pubkey(),
                        dst="/tmp/id_rsa.pub")
        err = utils.remote_run(unit.machine_id,
                               cmds="/tmp/nova-controller-setup.sh "
                               "{p}".format(p=self.config.openstack_password))
        if err['ret'] == 1:
            # something happened during nova setup, re-run
            return True
        return False
Exemplo n.º 18
0
    def post_proc(self):
        """ performs additional network configuration for charm """
        if not self.wait_for_agent():
            return True
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)

        if unit.machine_id == '-1':
            return True

        self.ui.status_info_message("Updating network parameters "
                                    "for Neutron")
        utils.remote_cp(
            unit.machine_id,
            src=os.path.join(self.config.tmpl_path, "quantum-network.sh"),
            dst="/tmp/quantum-network.sh")
        utils.remote_run(unit.machine_id,
                         cmds="sudo chmod +x /tmp/quantum-network.sh")
        utils.remote_run(unit.machine_id,
                         cmds="sudo /tmp/quantum-network.sh")
        self.ui.status_info_message(
            "Neutron deployed and configured, images will now be synced.")
        return False
Exemplo n.º 19
0
    def post_proc(self):
        """ performs additional network configuration for charm """
        if not self.wait_for_agent():
            return True
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)

        if unit.machine_id == '-1':
            return True

        self.ui.status_info_message("Updating network parameters "
                                    "for Neutron")
        utils.remote_cp(
            unit.machine_id,
            src=os.path.join(self.config.tmpl_path, "quantum-network.sh"),
            dst="/tmp/quantum-network.sh")
        utils.remote_run(unit.machine_id,
                         cmds="sudo chmod +x /tmp/quantum-network.sh")
        utils.remote_run(unit.machine_id,
                         cmds="sudo /tmp/quantum-network.sh")
        self.ui.status_info_message(
            "Neutron deployed and configured")
        return False
Exemplo n.º 20
0
    def post_proc(self):
        """ performs additional network configuration for charm """
        super(CharmNeutron, self).post_proc()
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)

        if unit.machine_id == '-1':
            raise CharmPostProcessException("Service not ready for workload.")

        self.ui.status_info_message("Validating network parameters "
                                    "for Neutron")
        utils.remote_cp(unit.machine_id,
                        src=os.path.join(self.config.tmpl_path,
                                         "neutron-network.sh"),
                        dst="/tmp/neutron-network.sh",
                        juju_home=self.config.juju_home(use_expansion=True))
        out = utils.remote_run(
            unit.machine_id,
            cmds="sudo bash /tmp/neutron-network.sh {}".format(
                self.config.getopt('install_type')),
            juju_home=self.config.juju_home(use_expansion=True))
        if out['status'] > 0:
            log.error("Neutron error: {}".format(out))
            raise CharmPostProcessException(out)
Exemplo n.º 21
0
    def post_proc(self):
        """ post processing for nova-cloud-controller """
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)
        k_svc = self.juju_state.service('keystone')
        keystone = k_svc.unit('keystone')
        openstack_password = self.config.getopt('openstack_password')
        public_address = keystone.public_address
        if is_ipv6(public_address):
            public_address = "[%s]".format(public_address)
            log.debug("Found ipv6 address, {}".format(public_address))

        if unit.machine_id == '-1':
            return True

        for u in ['admin', 'ubuntu']:
            env = self._openstack_env(u,
                                      openstack_password,
                                      u, public_address)
            self._openstack_env_save(u, env)
            utils.remote_cp(
                unit.machine_id,
                src=self._openstack_env_path(u),
                dst='/tmp/openstack-{u}-rc'.format(u=u),
                juju_home=self.config.juju_home(use_expansion=True))

        setup_script_path = self.render_setup_script()
        remote_setup_script_path = "/tmp/nova-controller-setup.sh"
        utils.remote_cp(
            unit.machine_id,
            src=setup_script_path,
            dst=remote_setup_script_path,
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_run(
            unit.machine_id,
            cmds="chmod +x {}".format(remote_setup_script_path),
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_cp(
            unit.machine_id,
            src=utils.ssh_pubkey(),
            dst="/tmp/id_rsa.pub",
            juju_home=self.config.juju_home(use_expansion=True))
        err = utils.remote_run(
            unit.machine_id,
            cmds="/tmp/nova-controller-setup.sh "
            "\"{p}\" \"{install_type}\"".format(
                p=openstack_password,
                install_type=self.config.getopt('install_type')),
            juju_home=self.config.juju_home(use_expansion=True))
        if err['status'] != 0:
            # something happened during nova setup, re-run
            return True
        return False
Exemplo n.º 22
0
    def post_proc(self):
        """ post processing for nova-cloud-controller """
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)
        k_svc = self.juju_state.service('keystone')
        keystone = k_svc.unit('keystone')
        openstack_password = self.config.getopt('openstack_password')
        public_address = keystone.public_address
        if is_ipv6(public_address):
            public_address = "[%s]".format(public_address)
            log.debug("Found ipv6 address, {}".format(public_address))

        if unit.machine_id == '-1':
            return True

        for u in ['admin', 'ubuntu']:
            env = self._openstack_env(u,
                                      openstack_password,
                                      u, public_address)
            self._openstack_env_save(u, env)
            utils.remote_cp(
                unit.machine_id,
                src=self._openstack_env_path(u),
                dst='/tmp/openstack-{u}-rc'.format(u=u),
                juju_home=self.config.juju_home(use_expansion=True))

        setup_script_path = self.render_setup_script()
        remote_setup_script_path = "/tmp/nova-controller-setup.sh"
        utils.remote_cp(
            unit.machine_id,
            src=setup_script_path,
            dst=remote_setup_script_path,
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_run(
            unit.machine_id,
            cmds="chmod +x {}".format(remote_setup_script_path),
            juju_home=self.config.juju_home(use_expansion=True))
        utils.remote_cp(
            unit.machine_id,
            src=utils.ssh_pubkey(),
            dst="/tmp/id_rsa.pub",
            juju_home=self.config.juju_home(use_expansion=True))
        err = utils.remote_run(
            unit.machine_id,
            cmds="/tmp/nova-controller-setup.sh "
            "\"{p}\" \"{install_type}\"".format(
                p=openstack_password,
                install_type=self.config.getopt('install_type')),
            juju_home=self.config.juju_home(use_expansion=True))
        if err['status'] != 0:
            # something happened during nova setup, re-run
            return True
        return False
Exemplo n.º 23
0
    def post_proc(self):
        """ post processing for nova-cloud-controller """
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)
        k_svc = self.juju_state.service("keystone")
        keystone = k_svc.unit("keystone")
        openstack_password = self.config.getopt("openstack_password")

        if unit.machine_id == "-1":
            return True

        for u in ["admin", "ubuntu"]:
            env = self._openstack_env(u, openstack_password, u, keystone.public_address)
            self._openstack_env_save(u, env)
            utils.remote_cp(
                unit.machine_id,
                src=self._openstack_env_path(u),
                dst="/tmp/openstack-{u}-rc".format(u=u),
                juju_home=self.config.juju_home(use_expansion=True),
            )

        setup_script_path = self.render_setup_script()
        remote_setup_script_path = "/tmp/nova-controller-setup.sh"
        utils.remote_cp(
            unit.machine_id,
            src=setup_script_path,
            dst=remote_setup_script_path,
            juju_home=self.config.juju_home(use_expansion=True),
        )
        utils.remote_run(
            unit.machine_id,
            cmds="chmod +x {}".format(remote_setup_script_path),
            juju_home=self.config.juju_home(use_expansion=True),
        )
        utils.remote_cp(
            unit.machine_id,
            src=utils.ssh_pubkey(),
            dst="/tmp/id_rsa.pub",
            juju_home=self.config.juju_home(use_expansion=True),
        )
        err = utils.remote_run(
            unit.machine_id,
            cmds="/tmp/nova-controller-setup.sh "
            "{p} {install_type}".format(p=openstack_password, install_type=self.config.getopt("install_type")),
            juju_home=self.config.juju_home(use_expansion=True),
        )
        if err["status"] != 0:
            # something happened during nova setup, re-run
            return True
        return False
Exemplo n.º 24
0
    def post_proc(self):
        """ post processing for nova-cloud-controller """
        if not self.wait_for_agent(['keystone', self.charm_name]):
            return True
        svc = self.juju_state.service(self.charm_name)
        unit = svc.unit(self.charm_name)
        k_svc = self.juju_state.service('keystone')
        keystone = k_svc.unit('keystone')

        if unit.machine_id == '-1':
            return True

        for u in ['admin', 'ubuntu']:
            env = self._openstack_env(u, self.config.openstack_password,
                                      u, keystone.public_address)
            self._openstack_env_save(u, env)
            utils.remote_cp(unit.machine_id,
                            src=self._openstack_env_path(u),
                            dst='/tmp/openstack-{u}-rc'.format(u=u))
        utils.remote_cp(
            unit.machine_id,
            src=os.path.join(self.config.tmpl_path,
                             "nova-controller-setup.sh"),
            dst="/tmp/nova-controller-setup.sh")
        utils.remote_cp(
            unit.machine_id,
            src=self._pubkey(),
            dst="/tmp/id_rsa.pub")
        err = utils.remote_run(unit.machine_id,
                               cmds="/tmp/nova-controller-setup.sh "
                                    "{p}".format(
                                        p=self.config.openstack_password))
        if err['status'] != 0:
            # something happened during nova setup, re-run
            return True
        return False