Example #1
0
 def _setup_chefserver(self):
     """
     execute uploaded scripts to install chef, config knife, upload
     cookbooks, roles, and environments
     """
     for command in self.chefserver_commands:
         cmd.ssh(self.user + "@" + self._chefserver_ip,
                 command, screen_output=True)
Example #2
0
 def _setup_chefserver(self):
     """
     execute uploaded scripts to install chef, config knife, upload
     cookbooks, roles, and environments
     """
     for command in self.chefserver_commands:
         cmd.ssh(self.user + "@" + self._chefserver_ip,
                 command,
                 screen_output=True)
Example #3
0
 def _setup_chefserver(self):
     """
     execute uploaded scripts to install chef, config knife, upload
     cookbooks, roles, and environments
     """
     for key in self.chefserver_files:
         out, error = cmd.ssh(self.user + '@' + self._chefserver_ip,
                              '/bin/bash ' + key,
                              screen_output=True)
         print 'out=', out, 'error=', error
Example #4
0
 def _checkin_chefserver(self):
     """
     check-in all VMs into chefserver (knife bootstrap), via eth0
     """
     ips = ([self._chefserver_ip, self._gateway_ip, self._controller_ip]
            + self._worker_ips)
     for ip in ips:
         out, error = cmd.ssh(
             self.user + '@' + self._chefserver_ip,
             '/usr/bin/knife bootstrap %s -x %s --sudo' % (ip, self.user),
             screen_output=True,
             agent_forwarding=True)
         print 'out=', out, 'error=', error
Example #5
0
    def _create_servers(self):
        """
        start all VM servers: gateway, chefserver, controller, and workers, via
        calling Nova client API
        """
        # map image name to ID
        image_id = None
        chefserver_image_id = None
        for image in self.client.images.list():
            if image.name == self.image:
                image_id = image.id
            if image.name == self.chefserver_image:
                chefserver_image_id = image.id
        if image_id is None:
            raise ValueError('Not found image=%s' % self.image)
        if chefserver_image_id is None:
            raise ValueError('Not found image=%s' % self.chefserver_image)

        # map flavor name to ID
        flavor_id = None
        gateway_flavor_id = None
        for flavor in self.client.flavors.list():
            if flavor.name == self.flavor:
                flavor_id = flavor.id
            if flavor.name == self.gateway_flavor:
                gateway_flavor_id = flavor.id
        if flavor_id is None:
            raise ValueError('Not found flavor=%s' % self.flavor)
        if gateway_flavor_id is None:
            raise ValueError('Not found flavor=%s' % self.gateway_flavor)

        # launch gateway
        gateway = self.client.servers.create(
            name=self.prefix + CONCAT_CHAR + 'gateway',
            image=image_id,
            flavor=gateway_flavor_id,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata)
        self._gateway_id = gateway.id
        LOG.info("Creating %s", gateway)

        # launch chefserver
        chefserver = self.client.servers.create(
            name=self.prefix + CONCAT_CHAR + 'chefserver',
            image=chefserver_image_id,
            flavor=flavor_id,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata,
            files=self.chefserver_files)
        self._chefserver_id = chefserver.id
        LOG.info("Creating %s", chefserver)

        # launch controller
        controller = self.client.servers.create(
            name=self.prefix + CONCAT_CHAR + 'controller',
            image=image_id,
            flavor=flavor_id,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata)
        self._controller_id = controller.id
        LOG.info("Creating %s", controller)

        # launch workers
        for i in xrange(self.num_workers):
            worker = self.client.servers.create(
                name=self.prefix + CONCAT_CHAR + 'worker%s' % (i + 1),
                image=image_id,
                flavor=flavor_id,
                key_name=self.key_name,
                security_groups=self.security_groups,
                userdata=self.userdata)
            self._worker_ids.append(worker.id)
            LOG.info("Creating %s", worker)

        LOG.info('wait at most %s seconds for servers to be ready'
                 ' (ssh-able + userdata done)', self.timeout)
        servers_ready = False
        begin_time = time.time()
        while time.time() - begin_time <= self.timeout:
            try:
                # get IP addr of servers
                (self._gateway_ip, self._gateway_name) = self._get_server_info(
                    self._gateway_id)
                (self._chefserver_ip, self._chefserver_name) = (
                    self._get_server_info(self._chefserver_id))
                (self._controller_ip, self._controller_name) = (
                    self._get_server_info(self._controller_id))
                # clear content upon each time retry
                self._worker_ips = []
                self._worker_names = []
                for _id in self._worker_ids:
                    (ipaddr, name) = self._get_server_info(_id)
                    self._worker_ips.append(ipaddr)
                    self._worker_names.append(name)
                # test ssh-able
                command = '[ -d /etc/inception ]'
                cmd.ssh(self.user + "@" + self._gateway_ip, command)
                cmd.ssh(self.user + "@" + self._chefserver_ip, command)
                cmd.ssh(self.user + "@" + self._controller_ip, command)
                for worker_ip in self._worker_ips:
                    cmd.ssh(self.user + "@" + worker_ip, command)
                # indicate that servers are ready
                servers_ready = True
                break
            except (UnboundLocalError, subprocess.CalledProcessError) as error:
                LOG.info('servers are not all ready, error=%s,'
                         ' sleep %s seconds', error, self.poll_interval)
                time.sleep(self.poll_interval)
                continue
        if not servers_ready:
            raise RuntimeError("No all servers can be brought up")

        # create a public IP and associate it to gateway
        floating_ip = self.client.floating_ips.create(pool=self.pool)
        self.client.servers.add_floating_ip(self._gateway_id, floating_ip)
        self._gateway_floating_ip = floating_ip
        LOG.info("Creating and associating %s", floating_ip)
Example #6
0
    def _create_servers(self):
        """
        start all VM servers: gateway, chefserver, controller, and workers, via
        calling Nova client API
        """
        # launch gateway
        gateway = self.client.servers.create(
            name=self.prefix + '-gateway',
            image=self.image,
            flavor=self.gateway_flavor,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata)
        self._gateway_id = gateway.id
        print "%s is being created" % gateway.name

        # launch chefserver
        chefserver = self.client.servers.create(
            name=self.prefix + '-chefserver',
            image=self.image,
            flavor=self.flavor,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata,
            files=self.chefserver_files)
        self._chefserver_id = chefserver.id
        print "%s is being created" % chefserver.name

        # launch controller
        controller = self.client.servers.create(
            name=self.prefix + '-controller',
            image=self.image,
            flavor=self.flavor,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata)
        self._controller_id = controller.id
        print "%s is being created" % controller.name

        # launch workers
        for i in xrange(self.num_workers):
            worker = self.client.servers.create(
                name=self.prefix + '-worker%s' % (i + 1),
                image=self.image,
                flavor=self.flavor,
                key_name=self.key_name,
                security_groups=self.security_groups,
                userdata=self.userdata)
            self._worker_ids.append(worker.id)
            print 'name %s is being created' % worker.name

        print ('wait at most %s seconds for servers to be ready (ssh-able)' %
               self.timeout)
        servers_ready = False
        begin_time = time.time()
        while time.time() - begin_time <= self.timeout:
            try:
                # get IP addr of servers
                self._gateway_ip = self._get_server_ip(self._gateway_id)
                self._chefserver_ip = self._get_server_ip(self._chefserver_id)
                self._controller_ip = self._get_server_ip(self._controller_id)
                self._worker_ips = [self._get_server_ip(_id)
                                    for _id in self._worker_ids]
                # test ssh-able
                cmd.ssh(self.user + "@" + self._gateway_ip, 'true')
                cmd.ssh(self.user + "@" + self._chefserver_ip, 'true')
                cmd.ssh(self.user + "@" + self._controller_ip, 'true')
                for worker_ip in self._worker_ips:
                    cmd.ssh(self.user + "@" + worker_ip, 'true')
                # indicate that servers are ready
                servers_ready = True
                break
            except (cmd.SshConnectionError, UnboundLocalError) as error:
                print ('servers are not all ready, error=%s, sleep %s seconds'
                       % (error, self.poll_interval))
                time.sleep(self.poll_interval)
                continue
        if not servers_ready:
            raise RuntimeError("No all servers can be brought up")

        # create a public IP and associate it to gateway
        floating_ip = self.client.floating_ips.create()
        self.client.servers.add_floating_ip(self._gateway_id, floating_ip)
        self._gateway_floating_ip = floating_ip
Example #7
0
    def _create_servers(self):
        """
        start all VM servers: gateway, chefserver, controller, and workers, via
        calling Nova client API
        """
        # map image name to ID
        image_id = None
        chefserver_image_id = None
        for image in self.client.images.list():
            if image.name == self.image:
                image_id = image.id
            if image.name == self.chefserver_image:
                chefserver_image_id = image.id
        if image_id is None:
            raise ValueError('Not found image=%s' % self.image)
        if chefserver_image_id is None:
            raise ValueError('Not found image=%s' % self.chefserver_image)

        # map flavor name to ID
        flavor_id = None
        gateway_flavor_id = None
        for flavor in self.client.flavors.list():
            if flavor.name == self.flavor:
                flavor_id = flavor.id
            if flavor.name == self.gateway_flavor:
                gateway_flavor_id = flavor.id
        if flavor_id is None:
            raise ValueError('Not found flavor=%s' % self.flavor)
        if gateway_flavor_id is None:
            raise ValueError('Not found flavor=%s' % self.gateway_flavor)

        # launch gateway
        gateway = self.client.servers.create(
            name=self.prefix + CONCAT_CHAR + 'gateway',
            image=image_id,
            flavor=gateway_flavor_id,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata)
        self._gateway_id = gateway.id
        LOG.info("Creating %s", gateway)

        # launch chefserver
        chefserver = self.client.servers.create(
            name=self.prefix + CONCAT_CHAR + 'chefserver',
            image=chefserver_image_id,
            flavor=flavor_id,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata,
            files=self.chefserver_files)
        self._chefserver_id = chefserver.id
        LOG.info("Creating %s", chefserver)

        # launch controller
        controller = self.client.servers.create(
            name=self.prefix + CONCAT_CHAR + 'controller',
            image=image_id,
            flavor=flavor_id,
            key_name=self.key_name,
            security_groups=self.security_groups,
            userdata=self.userdata)
        self._controller_id = controller.id
        LOG.info("Creating %s", controller)

        # launch workers
        for i in xrange(self.num_workers):
            worker = self.client.servers.create(
                name=self.prefix + CONCAT_CHAR + 'worker%s' % (i + 1),
                image=image_id,
                flavor=flavor_id,
                key_name=self.key_name,
                security_groups=self.security_groups,
                userdata=self.userdata)
            self._worker_ids.append(worker.id)
            LOG.info("Creating %s", worker)

        LOG.info(
            'wait at most %s seconds for servers to be ready'
            ' (ssh-able + userdata done)', self.timeout)
        servers_ready = False
        begin_time = time.time()
        while time.time() - begin_time <= self.timeout:
            try:
                # get IP addr of servers
                (self._gateway_ip,
                 self._gateway_name) = self._get_server_info(self._gateway_id)
                (self._chefserver_ip,
                 self._chefserver_name) = (self._get_server_info(
                     self._chefserver_id))
                (self._controller_ip,
                 self._controller_name) = (self._get_server_info(
                     self._controller_id))
                # clear content upon each time retry
                self._worker_ips = []
                self._worker_names = []
                for _id in self._worker_ids:
                    (ipaddr, name) = self._get_server_info(_id)
                    self._worker_ips.append(ipaddr)
                    self._worker_names.append(name)
                # test ssh-able
                command = '[ -d /etc/inception ]'
                cmd.ssh(self.user + "@" + self._gateway_ip, command)
                cmd.ssh(self.user + "@" + self._chefserver_ip, command)
                cmd.ssh(self.user + "@" + self._controller_ip, command)
                for worker_ip in self._worker_ips:
                    cmd.ssh(self.user + "@" + worker_ip, command)
                # indicate that servers are ready
                servers_ready = True
                break
            except (UnboundLocalError, subprocess.CalledProcessError) as error:
                LOG.info(
                    'servers are not all ready, error=%s,'
                    ' sleep %s seconds', error, self.poll_interval)
                time.sleep(self.poll_interval)
                continue
        if not servers_ready:
            raise RuntimeError("No all servers can be brought up")

        # create a public IP and associate it to gateway
        floating_ip = self.client.floating_ips.create(pool=self.pool)
        self.client.servers.add_floating_ip(self._gateway_id, floating_ip)
        self._gateway_floating_ip = floating_ip
        LOG.info("Creating and associating %s", floating_ip)