Example #1
0
    def build_instances(self, global_config, metadata=None):
        """
        Build a set of instances on Openstack using the given list of configurations.
        Each configuration is expected to contain the following keywords: DISTRIBUTION,
        INSTANCE_NAME, SECURITY_GROUP, FLAVOR, OS1_KEY, and CLOUD_CONFIG, al defined in config_utils.

        The configurations will have the 'user', 'host_string' and 'server' keys added, which will contain
        the user to SSH in as, the host string for Fabric, and the novaclient.v1_1.server.Server created.

        :param global_config:   The structure dictionary produced by the configuration parser
        :type  global_config:   dict
        :param metadata:        The metadata to attach to the instances. Limit to 5 keys, 255 character values
        :type  metadata:        dict
        """
        for instance in config_utils.config_generator(global_config):
            # Build the base instance
            image = self.get_distribution_image(
                instance[config_utils.DISTRIBUTION])
            cloud_config = instance.get(config_utils.CLOUD_CONFIG)
            instance_name = instance[config_utils.INSTANCE_NAME]
            security_group = instance[config_utils.SECURITY_GROUP]
            flavor = instance[config_utils.FLAVOR]
            os1_key = instance[config_utils.OS1_KEY]

            server = self.create_instance(image.id, instance_name,
                                          security_group, flavor, os1_key,
                                          metadata, cloud_config)
            instance[config_utils.SYSTEM_USER] = image.metadata.get(
                config_utils.SYSTEM_USER, 'cloud-user').encode('ascii')
            instance[config_utils.NOVA_SERVER] = server.id

        # Wait until all the instances are active, then set necessary configs
        flattened_list = config_utils.flatten_structure(global_config)
        servers = [
            instance[config_utils.NOVA_SERVER] for instance in flattened_list
        ]
        self.wait_for_active_instances(servers)

        for instance_config in config_utils.config_generator(global_config):
            instance_ip = self.get_instance_floating_ip(
                instance_config[config_utils.NOVA_SERVER])
            user = global_config.get('username',
                                     instance_config[config_utils.SYSTEM_USER])
            instance_config[
                config_utils.HOST_STRING] = user + '@' + instance_ip
Example #2
0
def configure_instances(global_config):
    """
    Configure the root instance and each decedent. Any configuration results are written to
    the given dictionary

    :param global_config: The instance structure dictionary from the configuration parser
    :type  global_config: dict
    """
    # This should eventually use multi-threading to configure independent machines concurrently
    for instance in config_generator(global_config):
        # Configure the instance
        config_function = CONFIGURATION_FUNCTIONS[instance[ROLE]]
        config_function(instance[INSTANCE_NAME], global_config)
Example #3
0
def configure_instances(global_config):
    """
    Configure the root instance and each decedent. Any configuration results are written to
    the given dictionary

    :param global_config: The instance structure dictionary from the configuration parser
    :type  global_config: dict
    """
    # This should eventually use multi-threading to configure independent machines concurrently
    for instance in config_generator(global_config):
        # Configure the instance
        config_function = CONFIGURATION_FUNCTIONS[instance[ROLE]]
        config_function(instance[INSTANCE_NAME], global_config)
Example #4
0
    def build_instances(self, global_config, metadata=None):
        """
        Build a set of instances on Openstack using the given list of configurations.
        Each configuration is expected to contain the following keywords: DISTRIBUTION,
        INSTANCE_NAME, SECURITY_GROUP, FLAVOR, OS1_KEY, and CLOUD_CONFIG, al defined in config_utils.

        The configurations will have the 'user', 'host_string' and 'server' keys added, which will contain
        the user to SSH in as, the host string for Fabric, and the novaclient.v1_1.server.Server created.

        :param global_config:   The structure dictionary produced by the configuration parser
        :type  global_config:   dict
        :param metadata:        The metadata to attach to the instances. Limit to 5 keys, 255 character values
        :type  metadata:        dict
        """
        for instance in config_utils.config_generator(global_config):
            # Build the base instance
            image = self.get_distribution_image(instance[config_utils.DISTRIBUTION])
            cloud_config = instance.get(config_utils.CLOUD_CONFIG)
            instance_name = instance[config_utils.INSTANCE_NAME]
            security_group = instance[config_utils.SECURITY_GROUP]
            flavor = instance[config_utils.FLAVOR]
            os1_key = instance[config_utils.OS1_KEY]

            server = self.create_instance(image.id, instance_name, security_group, flavor, os1_key,
                                          metadata, cloud_config)
            instance[config_utils.SYSTEM_USER] = image.metadata.get(config_utils.SYSTEM_USER, 'cloud-user').encode('ascii')
            instance[config_utils.NOVA_SERVER] = server.id

        # Wait until all the instances are active, then set necessary configs
        flattened_list = config_utils.flatten_structure(global_config)
        servers = [instance[config_utils.NOVA_SERVER] for instance in flattened_list]
        self.wait_for_active_instances(servers)

        for instance_config in config_utils.config_generator(global_config):
            instance_ip = self.get_instance_floating_ip(instance_config[config_utils.NOVA_SERVER])
            user = global_config.get('username', instance_config[config_utils.SYSTEM_USER])
            instance_config[config_utils.HOST_STRING] = user + '@' + instance_ip
Example #5
0
    def teardown_instances(self, configuration):
        """
        Delete all instances in the given configuration dictionary

        :param configuration: A dictionary parsed by config_utils
        :type  configuration: dict
        """
        self._authenticate()
        for instance in config_utils.config_generator(configuration):
            if config_utils.NOVA_SERVER in instance:
                try:
                    server = self.nova.servers.get(instance[config_utils.NOVA_SERVER])
                    self.nova.servers.delete(server)
                except NotFound:
                    print 'Failed to find server [%s]' % instance[config_utils.NOVA_SERVER]
Example #6
0
    def teardown_instances(self, configuration):
        """
        Delete all instances in the given configuration dictionary

        :param configuration: A dictionary parsed by config_utils
        :type  configuration: dict
        """
        self._authenticate()
        for instance in config_utils.config_generator(configuration):
            if config_utils.NOVA_SERVER in instance:
                try:
                    server = self.nova.servers.get(instance[config_utils.NOVA_SERVER])
                    self.nova.servers.delete(server)
                except NotFound:
                    print 'Failed to find server [%s]' % instance[config_utils.NOVA_SERVER]