Example #1
0
    def inventory_entry(self, instance):
        # TODO: for Ansiblev2, the following line must have s/ssh_//
        template = '{} ansible_ssh_host={} ansible_ssh_port={} ansible_ssh_private_key_file={} ansible_ssh_user={}\n'

        if not self._updated_multiplatform:
            ssh = self.conf(vm_name=util.format_instance_name(
                instance['name'], self.platform, self.instances))
        else:
            ssh = self.conf(vm_name=util.format_instance_name(
                instance['name'], 'all', self.instances))

        return template.format(ssh['Host'], ssh['HostName'], ssh['Port'],
                               ssh['IdentityFile'], ssh['User'])
Example #2
0
    def inventory_entry(self, instance):
        # TODO: for Ansiblev2, the following line must have s/ssh_//
        template = '{} ansible_ssh_host={} ansible_ssh_port={} ansible_ssh_private_key_file={} ansible_ssh_user={}\n'

        if not self._updated_multiplatform:
            ssh = self.conf(vm_name=util.format_instance_name(
                instance['name'], self.platform, self.instances))
        else:
            ssh = self.conf(vm_name=util.format_instance_name(
                instance['name'], 'all', self.instances))

        return template.format(ssh['Host'], ssh['HostName'], ssh['Port'],
                               ssh['IdentityFile'], ssh['User'])
Example #3
0
    def inventory_entry(self, instance):
        template = ('{} ansible_host={} ansible_port={} '
                    'ansible_ssh_private_key_file="{}" ansible_user={}\n')

        if not self._updated_multiplatform:
            ssh = self.conf(vm_name=util.format_instance_name(
                instance['name'], self.platform, self.instances))
        else:
            ssh = self.conf(vm_name=util.format_instance_name(
                instance['name'], 'all', self.instances))

        return template.format(ssh['Host'], ssh['HostName'], ssh['Port'],
                               ssh['IdentityFile'], ssh['User'])
Example #4
0
    def _instances_state(self):
        """
        Creates a dict of formatted instances names and the group(s) they're
        part of to be added to state, and returns dict containing state
        information about current instances.

        :return: dict
        """

        instances = collections.defaultdict(dict)
        for instance in self.driver.instances:
            instance_name = util.format_instance_name(
                instance['name'], self.driver._platform, self.driver.instances)

            groups = set()
            ansible_groups = instance.get('ansible_groups')
            if ansible_groups:
                for group in ansible_groups:
                    if isinstance(group, str):
                        groups.add(group)
                    elif isinstance(group, dict):
                        for group_name, _ in group.iteritems():
                            groups.add(group_name.split(':')[0])

            instances[instance_name]['groups'] = sorted(list(groups))

        return dict(instances)
Example #5
0
    def _instances_state(self):
        """
        Creates a dict of formatted instances names and the group(s) they're
        part of to be added to state, and returns dict containing state
        information about current instances.

        :return: dict
        """

        instances = collections.defaultdict(dict)
        for instance in self.driver.instances:
            instance_name = util.format_instance_name(instance['name'],
                                                      self.driver._platform,
                                                      self.driver.instances)

            groups = set()
            ansible_groups = instance.get('ansible_groups')
            if ansible_groups:
                for group in ansible_groups:
                    if isinstance(group, str):
                        groups.add(group)
                    elif isinstance(group, dict):
                        for group_name, _ in group.iteritems():
                            groups.add(group_name.split(':')[0])

            instances[instance_name]['groups'] = sorted(list(groups))

        return dict(instances)
Example #6
0
def test_format_instance_name_02():
    instances = [{
        'name': 'test-01',
        'options': {
            'append_platform_to_hostname': True
        }
    }]
    actual = util.format_instance_name('test-01', 'rhel-7', instances)

    assert 'test-01-rhel-7' == actual
Example #7
0
def test_format_instance_name_02():
    instances = [{
        'name': 'test-01',
        'options': {
            'append_platform_to_hostname': True
        }
    }]
    actual = util.format_instance_name('test-01', 'rhel-7', instances)

    assert 'test-01-rhel-7' == actual
Example #8
0
    def populate_instance_names(self, platform):
        """
        Updates instances section of config with an additional key containing
        the full instance name

        :param platform: platform name to pass to ``format_instance_name`` call
        :return: None
        """

        if 'vagrant' in self.config:
            for instance in self.config['vagrant']['instances']:
                instance['vm_name'] = util.format_instance_name(
                    instance['name'], platform,
                    self.config['vagrant']['instances'])
Example #9
0
    def populate_instance_names(self, platform):
        """
        Updates instances section of config with an additional key containing
        the full instance name

        :param platform: platform name to pass to ``format_instance_name`` call
        :return: None
        """

        if 'vagrant' in self.config:
            for instance in self.config['vagrant']['instances']:
                instance['vm_name'] = util.format_instance_name(
                    instance['name'], platform,
                    self.config['vagrant']['instances'])
Example #10
0
    def create_inventory_file(self):
        """
        Creates the inventory file used by molecule and returns None.

        :return: None
        """

        inventory = ''
        for instance in self.driver.instances:
            inventory += self.driver.inventory_entry(instance)

        groups = {}
        for instance in self.driver.instances:
            ansible_groups = instance.get('ansible_groups')
            if ansible_groups:
                for group in ansible_groups:
                    if isinstance(group, str):
                        if group not in groups:
                            groups[group] = []
                        groups[group].append(instance['name'])
                    elif isinstance(group, dict):
                        for group_name, group_list in group.iteritems():
                            for g in group_list:
                                if group_name not in groups:
                                    groups[group_name] = []
                                groups[group_name].append(g)

        if self.args.get('platform') == 'all':
            self.driver.platform = 'all'

        for group, subgroups in groups.iteritems():
            inventory += '\n[{}]\n'.format(group)
            for subgroup in subgroups:
                instance_name = util.format_instance_name(
                    subgroup, self.driver.platform, self.driver.instances)
                if instance_name:
                    inventory += '{}\n'.format(instance_name)
                else:
                    inventory += '{}\n'.format(subgroup)

        inventory_file = self.config.config['ansible']['inventory_file']
        try:
            util.write_file(inventory_file, inventory)
        except IOError:
            msg = 'WARNING: could not write inventory file {}.'.format(
                inventory_file)
            util.print_warn(msg)
Example #11
0
    def create_inventory_file(self):
        """
        Creates the inventory file used by molecule and returns None.

        :return: None
        """

        inventory = ''
        for instance in self.driver.instances:
            inventory += self.driver.inventory_entry(instance)

        groups = {}
        for instance in self.driver.instances:
            ansible_groups = instance.get('ansible_groups')
            if ansible_groups:
                for group in ansible_groups:
                    if isinstance(group, str):
                        if group not in groups:
                            groups[group] = []
                        groups[group].append(instance['name'])
                    elif isinstance(group, dict):
                        for group_name, group_list in group.iteritems():
                            for g in group_list:
                                if group_name not in groups:
                                    groups[group_name] = []
                                groups[group_name].append(g)

        if self.args.get('platform') == 'all':
            self.driver.platform = 'all'

        for group, subgroups in groups.iteritems():
            inventory += '\n[{}]\n'.format(group)
            for subgroup in subgroups:
                instance_name = util.format_instance_name(
                    subgroup, self.driver.platform, self.driver.instances)
                if instance_name:
                    inventory += '{}\n'.format(instance_name)
                else:
                    inventory += '{}\n'.format(subgroup)

        inventory_file = self.config.config['ansible']['inventory_file']
        try:
            util.write_file(inventory_file, inventory)
        except IOError:
            msg = 'WARNING: could not write inventory file {}.'.format(
                inventory_file)
            util.print_warn(msg)
Example #12
0
    def _instances_state(self):
        """
        Creates a dict of formatted instances names and the group(s) they're
        part of to be added to state.

        :return: Dict containing state information about current instances
        """

        instances = collections.defaultdict(dict)
        for instance in self._driver.instances:
            instance_name = util.format_instance_name(instance['name'],
                                                      self._driver._platform,
                                                      self._driver.instances)

            if 'ansible_groups' in instance:
                instances[instance_name]['groups'] = [
                    x for x in instance['ansible_groups']
                ]
            else:
                instances[instance_name]['groups'] = []

        return dict(instances)
Example #13
0
    def _create_inventory_file(self):
        """
        Creates the inventory file used by molecule and later passed to
        ansible-playbook.

        :return: None
        """

        inventory = ''
        for instance in self._driver.instances:
            inventory += self._driver.inventory_entry(instance)

        # get a list of all groups and hosts in those groups
        groups = {}
        for instance in self._driver.instances:
            if 'ansible_groups' in instance:
                for group in instance['ansible_groups']:
                    if group not in groups:
                        groups[group] = []
                    groups[group].append(instance['name'])

        if self._args.get('--platform') == 'all':
            self._driver.platform = 'all'

        for group, instances in groups.iteritems():
            inventory += '\n[{}]\n'.format(group)
            for instance in instances:
                inventory += '{}\n'.format(
                    util.format_instance_name(instance, self._driver.platform,
                                              self._driver.instances))

        inventory_file = self.config.config['ansible']['inventory_file']
        try:
            util.write_file(inventory_file, inventory)
        except IOError:
            LOG.warning('WARNING: could not write inventory file {}'.format(
                inventory_file))
Example #14
0
def test_format_instance_name_03():
    instances = [{'name': 'test-01', 'options': {'chicken': False}}]
    actual = util.format_instance_name('test-01', 'rhel-7', instances)

    assert 'test-01' == actual
Example #15
0
def test_format_instance_name_02():
    instances = [{"name": "test-01", "options": {"append_platform_to_hostname": True}}]
    actual = util.format_instance_name("test-01", "rhel-7", instances)

    assert "test-01-rhel-7" == actual
Example #16
0
def test_format_instance_name_03():
    instances = [{"name": "test-01", "options": {"chicken": False}}]
    actual = util.format_instance_name("test-01", "rhel-7", instances)

    assert "test-01" == actual
Example #17
0
def test_format_instance_name_03():
    instances = [{'name': 'test-01', 'options': {'chicken': False}}]
    actual = util.format_instance_name('test-01', 'rhel-7', instances)

    assert 'test-01' == actual
Example #18
0
def test_format_instance_name_01():
    instances = [{"name": "test-01"}]
    actual = util.format_instance_name("test-01", "rhel-7", instances)

    assert "test-01" == actual
Example #19
0
def test_format_instance_name_00():
    instances = [{'name': 'test-01'}]
    actual = util.format_instance_name('test-02', 'rhel-7', instances)

    assert actual is None
Example #20
0
def test_format_instance_name_01():
    instances = [{'name': 'test-01'}]
    actual = util.format_instance_name('test-01', 'rhel-7', instances)

    assert 'test-01' == actual
Example #21
0
def test_format_instance_name_00():
    instances = [{'name': 'test-01'}]
    actual = util.format_instance_name('test-02', 'rhel-7', instances)

    assert actual is None
Example #22
0
def test_format_instance_name_01():
    instances = [{'name': 'test-01'}]
    actual = util.format_instance_name('test-01', 'rhel-7', instances)

    assert 'test-01' == actual
Example #23
0
def test_format_instance_name_00():
    instances = [{"name": "test-01"}]
    actual = util.format_instance_name("test-02", "rhel-7", instances)

    assert actual is None