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=utilities.format_instance_name(
                instance['name'], self._platform, self.instances))
        else:
            ssh = self.conf(vm_name=utilities.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 _create_inventory_file(self):
        """
        Creates the inventory file used by molecule and later passed to ansible-playbook.

        :return: None
        """
        inventory = ''

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

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

        for group, instances in groups.iteritems():
            inventory += '\n[{}]\n'.format(group)
            for instance in instances:
                inventory += '{}\n'.format(utilities.format_instance_name(
                    instance, self._env['MOLECULE_PLATFORM'],
                    self._provisioner.instances))

        inventory_file = self._config.config['molecule']['inventory_file']
        try:
            utilities.write_file(inventory_file, inventory)
        except IOError:
            utilities.logger.warning(
                '{}WARNING: could not write inventory file {}{}'.format(
                    colorama.Fore.YELLOW, inventory_file, colorama.Fore.RESET))
Example #3
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._provisioner.instances:
            inventory += self._provisioner.inventory_entry(instance)

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

        for group, instances in groups.iteritems():
            inventory += '\n[{}]\n'.format(group)
            for instance in instances:
                inventory += '{}\n'.format(
                    utilities.format_instance_name(
                        instance, self._env['MOLECULE_PLATFORM'],
                        self._provisioner.instances))

        inventory_file = self._config.config['molecule']['inventory_file']
        try:
            utilities.write_file(inventory_file, inventory)
        except IOError:
            utilities.logger.warning(
                '{}WARNING: could not write inventory file {}{}'.format(
                    colorama.Fore.YELLOW, inventory_file, colorama.Fore.RESET))
Example #4
0
 def test_format_instance_name_02(self):
     instances = [{
         'name': 'test-01',
         'options': {
             'append_platform_to_hostname': True
         }
     }]
     expected = 'test-01-rhel-7'
     actual = utilities.format_instance_name('test-01', 'rhel-7', instances)
     self.assertEqual(expected, actual)
Example #5
0
    def _create_inventory_file(self):
        """
        Creates the inventory file used by molecule and later passed to ansible-playbook.

        :return: None
        """
        inventory = ''
        # TODO: for Ansiblev2, the following line must have s/ssh_//
        host_template = \
            '{} ansible_ssh_host={} ansible_ssh_port={} ansible_ssh_private_key_file={} ansible_ssh_user={}\n'
        for instance in self._provisioner.instances:
            ssh = self._provisioner.conf(
                vm_name=utilities.format_instance_name(
                    instance['name'], self._env['MOLECULE_PLATFORM'],
                    self._provisioner.instances))
            inventory += host_template.format(ssh['Host'], ssh['HostName'],
                                              ssh['Port'], ssh['IdentityFile'],
                                              ssh['User'])

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

        for group, instances in groups.iteritems():
            inventory += '\n[{}]\n'.format(group)
            for instance in instances:
                inventory += '{}\n'.format(
                    utilities.format_instance_name(
                        instance, self._env['MOLECULE_PLATFORM'],
                        self._provisioner.instances))

        inventory_file = self._config.config['molecule']['inventory_file']
        try:
            utilities.write_file(inventory_file, inventory)
        except IOError:
            print('{}WARNING: could not write inventory file {}{}'.format(
                Fore.YELLOW, inventory_file, Fore.RESET))
Example #6
0
    def _create_inventory_file(self):
        """
        Creates the inventory file used by molecule and later passed to ansible-playbook.

        :return: None
        """
        inventory = ''
        # TODO: for Ansiblev2, the following line must have s/ssh_//
        host_template = \
            '{} ansible_ssh_host={} ansible_ssh_port={} ansible_ssh_private_key_file={} ansible_ssh_user={}\n'
        for instance in self._provisioner.instances:
            ssh = self._provisioner.conf(
                vm_name=utilities.format_instance_name(
                    instance['name'], self._env[
                        'MOLECULE_PLATFORM'], self._provisioner.instances))
            inventory += host_template.format(ssh['Host'], ssh['HostName'],
                                              ssh['Port'], ssh['IdentityFile'],
                                              ssh['User'])

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

        for group, instances in groups.iteritems():
            inventory += '\n[{}]\n'.format(group)
            for instance in instances:
                inventory += '{}\n'.format(utilities.format_instance_name(
                    instance, self._env[
                        'MOLECULE_PLATFORM'], self._provisioner.instances))

        inventory_file = self._config.config['molecule']['inventory_file']
        try:
            utilities.write_file(inventory_file, inventory)
        except IOError:
            print('{}WARNING: could not write inventory file {}{}'.format(
                Fore.YELLOW, inventory_file, Fore.RESET))
Example #7
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'] = utilities.format_instance_name(
                    instance['name'], platform,
                    self.config['vagrant']['instances'])
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 underlying format_instance_name call
        :return: None
        """
        # assume static inventory if there's no vagrant section
        if self.config.get('vagrant') is None:
            return

        # assume static inventory if no instances are listed
        if self.config['vagrant'].get('instances') is None:
            return

        for instance in self.config['vagrant']['instances']:
            instance['vm_name'] = utilities.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 underlying format_instance_name call
        :return: None
        """
        # assume static inventory if there's no vagrant section
        if self.config.get('vagrant') is None:
            return

        # assume static inventory if no instances are listed
        if self.config['vagrant'].get('instances') is None:
            return

        for instance in self.config['vagrant']['instances']:
            instance['vm_name'] = utilities.format_instance_name(
                instance['name'], platform,
                self.config['vagrant']['instances'])
Example #10
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._provisioner.instances:
            instance_name = utilities.format_instance_name(
                instance['name'], self._provisioner._platform,
                self._provisioner.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 #11
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._provisioner.instances:
            inventory += self._provisioner.inventory_entry(instance)

        # get a list of all groups and hosts in those groups
        groups = {}
        for instance in self._provisioner.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._provisioner.platform = 'all'

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

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

    assert actual is None
Example #13
0
 def test_format_instance_name_03(self):
     instances = [{'name': 'test-01', 'options': {'chicken': False}}]
     expected = 'test-01'
     actual = utilities.format_instance_name('test-01', 'rhel-7', instances)
     self.assertEqual(expected, actual)
Example #14
0
 def test_format_instance_name_02(self):
     instances = [{"name": "test-01", "options": {"append_platform_to_hostname": True}}]
     expected = "test-01-rhel-7"
     actual = utilities.format_instance_name("test-01", "rhel-7", instances)
     self.assertEqual(expected, actual)
Example #15
0
 def test_format_instance_name_01(self):
     instances = [{'name': 'test-01'}]
     expected = 'test-01'
     actual = utilities.format_instance_name('test-01', 'rhel-7', instances)
     self.assertEqual(expected, actual)
Example #16
0
def test_format_instance_name_03():
    instances = [{'name': 'test-01', 'options': {'chicken': False}}]
    actual = utilities.format_instance_name('test-01', 'rhel-7', instances)

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

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

    assert 'test-01' == actual
Example #19
0
 def test_format_instance_name_03(self):
     instances = [{"name": "test-01", "options": {"chicken": False}}]
     expected = "test-01"
     actual = utilities.format_instance_name("test-01", "rhel-7", instances)
     self.assertEqual(expected, actual)
Example #20
0
 def test_format_instance_name_01(self):
     instances = [{"name": "test-01"}]
     expected = "test-01"
     actual = utilities.format_instance_name("test-01", "rhel-7", instances)
     self.assertEqual(expected, actual)
Example #21
0
 def test_format_instance_name_03(self):
     instances = [{'name': 'test-01', 'options': {'chicken': False}}]
     expected = 'test-01-rhel-7'
     actual = utilities.format_instance_name('test-01', 'rhel-7', instances)
     self.assertEqual(expected, actual)
Example #22
0
 def test_format_instance_name_02(self):
     instances = [{'name': 'test-01', 'options': {'append_platform_to_hostname': False}}]
     expected = 'test-01'
     actual = utilities.format_instance_name('test-01', 'rhel-7', instances)
     self.assertEqual(expected, actual)
Example #23
0
 def test_format_instance_name_01(self):
     instances = [{'name': 'test-01'}]
     expected = 'test-01-rhel-7'
     actual = utilities.format_instance_name('test-01', 'rhel-7', instances)
     self.assertEqual(expected, actual)