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