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'])
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'])
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)
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)
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
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'])
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)
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)
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))
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
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
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
def test_format_instance_name_01(): instances = [{"name": "test-01"}] actual = util.format_instance_name("test-01", "rhel-7", instances) assert "test-01" == actual
def test_format_instance_name_00(): instances = [{'name': 'test-01'}] actual = util.format_instance_name('test-02', 'rhel-7', instances) assert actual is None
def test_format_instance_name_01(): instances = [{'name': 'test-01'}] actual = util.format_instance_name('test-01', 'rhel-7', instances) assert 'test-01' == actual
def test_format_instance_name_00(): instances = [{"name": "test-01"}] actual = util.format_instance_name("test-02", "rhel-7", instances) assert actual is None