Hi All, I am new bee to ansible project, I was just trying to run the specs but seems like specs are not passing:
*============================================ 15 failed, 3625 passed, 31 skipped in 773.89 seconds =============================================* ================================================================== FAILURES =================================================================== *_______________________________________________________ test_existing_file[stdin0-True] _______________________________________________________* atomic_am = <ansible.module_utils.basic.AnsibleModule object at 0x1107f6490> atomic_mocks = {'chmod': <MagicMock name='chmod' id='4572030544'>, 'chown': <MagicMock name='chown' id='4572056080'>, 'close': <MagicMock name='close' id='4572081744'>, 'copy2': <MagicMock name='copy2' id='4572344720'>, ...} fake_stat = <MagicMock name='stat()' id='4572455632'>, mocker = <pytest_mock.MockFixture object at 0x11080a090>, selinux = True @pytest.mark.parametrize('stdin, selinux', product([{}], (True, False)), indirect=['stdin']) def test_existing_file(atomic_am, atomic_mocks, fake_stat, mocker, selinux): # Test destination already present mock_context = atomic_am.selinux_context.return_value atomic_mocks['stat'].return_value = fake_stat atomic_mocks['path_exists'].return_value = True atomic_am.selinux_enabled.return_value = selinux > atomic_am.atomic_move('/path/to/src', '/path/to/dest') test/units/module_utils/basic/test_atomic_move.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.module_utils.basic.AnsibleModule object at 0x1107f6490>, src = '/path/to/src', dest = '/path/to/dest', unsafe_writes = False def atomic_move(self, src, dest, unsafe_writes=False): '''atomically move src to dest, copying attributes from dest, returns true on success it uses os.rename to ensure this as it is an atomic operation, rest of the function is to work around limitations, corner cases and ensure selinux context is saved if possible''' context = None dest_stat = None b_src = to_bytes(src, errors='surrogate_or_strict') b_dest = to_bytes(dest, errors='surrogate_or_strict') if os.path.exists(b_dest): try: dest_stat = os.stat(b_dest) # copy mode and ownership os.chmod(b_src, dest_stat.st_mode & PERM_BITS) os.chown(b_src, dest_stat.st_uid, dest_stat.st_gid) # try to copy flags if possible if hasattr(os, 'chflags') and hasattr(dest_stat, 'st_flags'): try: > os.chflags(b_src, dest_stat.st_flags) E TypeError: chflags() argument 2 must be an integer, not MagicMock lib/ansible/module_utils/basic.py:2458: TypeError *______________________________________________________ test_existing_file[stdin1-False] _______________________________________________________* atomic_am = <ansible.module_utils.basic.AnsibleModule object at 0x1107c0a90> atomic_mocks = {'chmod': <MagicMock name='chmod' id='4572039120'>, 'chown': <MagicMock name='chown' id='4572064656'>, 'close': <MagicMock name='close' id='4572094416'>, 'copy2': <MagicMock name='copy2' id='4572349200'>, ...} fake_stat = <MagicMock name='stat()' id='4572468304'>, mocker = <pytest_mock.MockFixture object at 0x1107f64d0>, selinux = False @pytest.mark.parametrize('stdin, selinux', product([{}], (True, False)), indirect=['stdin']) def test_existing_file(atomic_am, atomic_mocks, fake_stat, mocker, selinux): # Test destination already present mock_context = atomic_am.selinux_context.return_value atomic_mocks['stat'].return_value = fake_stat atomic_mocks['path_exists'].return_value = True atomic_am.selinux_enabled.return_value = selinux > atomic_am.atomic_move('/path/to/src', '/path/to/dest') test/units/module_utils/basic/test_atomic_move.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.module_utils.basic.AnsibleModule object at 0x1107c0a90>, src = '/path/to/src', dest = '/path/to/dest', unsafe_writes = False def atomic_move(self, src, dest, unsafe_writes=False): '''atomically move src to dest, copying attributes from dest, returns true on success it uses os.rename to ensure this as it is an atomic operation, rest of the function is to work around limitations, corner cases and ensure selinux context is saved if possible''' context = None dest_stat = None b_src = to_bytes(src, errors='surrogate_or_strict') b_dest = to_bytes(dest, errors='surrogate_or_strict') if os.path.exists(b_dest): try: dest_stat = os.stat(b_dest) # copy mode and ownership os.chmod(b_src, dest_stat.st_mode & PERM_BITS) os.chown(b_src, dest_stat.st_uid, dest_stat.st_gid) # try to copy flags if possible if hasattr(os, 'chflags') and hasattr(dest_stat, 'st_flags'): try: > os.chflags(b_src, dest_stat.st_flags) E TypeError: chflags() argument 2 must be an integer, not MagicMock lib/ansible/module_utils/basic.py:2458: TypeError *________________________________________________________ test_no_tty_fallback[stdin0] _________________________________________________________* atomic_am = <ansible.module_utils.basic.AnsibleModule object at 0x110817410> atomic_mocks = {'chmod': <MagicMock name='chmod' id='4572043536'>, 'chown': <MagicMock name='chown' id='4572069072'>, 'close': <MagicMock name='close' id='4572111184'>, 'copy2': <MagicMock name='copy2' id='4572353616'>, ...} fake_stat = <MagicMock name='stat()' id='4572468624'>, mocker = <pytest_mock.MockFixture object at 0x1107c0a90> @pytest.mark.parametrize('stdin', [{}], indirect=['stdin']) def test_no_tty_fallback(atomic_am, atomic_mocks, fake_stat, mocker): """Raise OSError when using getlogin() to simulate no tty cornercase""" mock_context = atomic_am.selinux_context.return_value atomic_mocks['stat'].return_value = fake_stat atomic_mocks['path_exists'].return_value = True atomic_am.selinux_enabled.return_value = True atomic_mocks['getlogin'].side_effect = OSError() atomic_mocks['environ']['LOGNAME'] = 'root' > atomic_am.atomic_move('/path/to/src', '/path/to/dest') test/units/module_utils/basic/test_atomic_move.py:119: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.module_utils.basic.AnsibleModule object at 0x110817410>, src = '/path/to/src', dest = '/path/to/dest', unsafe_writes = False def atomic_move(self, src, dest, unsafe_writes=False): '''atomically move src to dest, copying attributes from dest, returns true on success it uses os.rename to ensure this as it is an atomic operation, rest of the function is to work around limitations, corner cases and ensure selinux context is saved if possible''' context = None dest_stat = None b_src = to_bytes(src, errors='surrogate_or_strict') b_dest = to_bytes(dest, errors='surrogate_or_strict') if os.path.exists(b_dest): try: dest_stat = os.stat(b_dest) # copy mode and ownership os.chmod(b_src, dest_stat.st_mode & PERM_BITS) os.chown(b_src, dest_stat.st_uid, dest_stat.st_gid) # try to copy flags if possible if hasattr(os, 'chflags') and hasattr(dest_stat, 'st_flags'): try: > os.chflags(b_src, dest_stat.st_flags) E TypeError: chflags() argument 2 must be an integer, not MagicMock lib/ansible/module_utils/basic.py:2458: TypeError *___________________________________________________ TestCollectedFacts.test_expected_facts ____________________________________________________* self = <units.module_utils.facts.test_ansible_collector.TestCollectedFacts testMethod=test_expected_facts> def test_expected_facts(self): > self._assert_expected_facts(self.facts) test/units/module_utils/facts/test_ansible_collector.py:228: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/units/module_utils/facts/test_ansible_collector.py:255: in _assert_expected_facts self.assertIn(expected_fact, facts_keys) E AssertionError: 'distribution' not found in ['apparmor', 'architecture', 'date_time', 'dns', 'domain', 'effective_group_id', 'effective_user_id', 'env', 'fips', 'fqdn', 'gather_subset', 'hostname', 'kernel', 'local', 'lsb', 'machine', 'module_setup', 'nodename', 'pkg_mgr', 'python', 'python_version', 'real_group_id', 'real_user_id', 'selinux', 'selinux_python_present', 'system', 'user_dir', 'user_gecos', 'user_gid', 'user_id', 'user_shell', 'user_uid', 'userspace_architecture', 'userspace_bits', 'virtualization_role', 'virtualization_type'] ------------------------------------------------------------ Captured stderr call ------------------------------------------------------------- TypeError("'Mock' object is not iterable",) TypeError("'Mock' object is not iterable",) *_______________________________________________ TestExceptionCollectedFacts.test_expected_facts _______________________________________________* self = <units.module_utils.facts.test_ansible_collector.TestExceptionCollectedFacts testMethod=test_expected_facts> def test_expected_facts(self): > self._assert_expected_facts(self.facts) test/units/module_utils/facts/test_ansible_collector.py:228: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ test/units/module_utils/facts/test_ansible_collector.py:255: in _assert_expected_facts self.assertIn(expected_fact, facts_keys) E AssertionError: 'distribution' not found in ['apparmor', 'architecture', 'date_time', 'dns', 'domain', 'effective_group_id', 'effective_user_id', 'env', 'fips', 'fqdn', 'gather_subset', 'hostname', 'kernel', 'local', 'lsb', 'machine', 'module_setup', 'nodename', 'pkg_mgr', 'python', 'python_version', 'real_group_id', 'real_user_id', 'selinux', 'selinux_python_present', 'system', 'user_dir', 'user_gecos', 'user_gid', 'user_id', 'user_shell', 'user_uid', 'userspace_architecture', 'userspace_bits', 'virtualization_role', 'virtualization_type'] ------------------------------------------------------------ Captured stderr call ------------------------------------------------------------- Exception('A collector failed',) TypeError("'Mock' object is not iterable",) TypeError("'Mock' object is not iterable",) *_____________________________________________________ TestDistributionFacts.test_collect ______________________________________________________* self = <units.module_utils.facts.test_collectors.TestDistributionFacts testMethod=test_collect> def test_collect(self): module = self._mock_module() fact_collector = self.collector_class() > facts_dict = fact_collector.collect(module=module, collected_facts=self.collected_facts) test/units/module_utils/facts/base.py:51: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ lib/ansible/module_utils/facts/system/distribution.py:592: in collect distro_facts = distribution.get_distribution_facts() lib/ansible/module_utils/facts/system/distribution.py:453: in get_distribution_facts dist_func_facts = distfunc() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.module_utils.facts.system.distribution.Distribution object at 0x11094d5d0> def get_distribution_Darwin(self): darwin_facts = {} darwin_facts['distribution'] = 'MacOSX' > rc, out, err = self.module.run_command("/usr/bin/sw_vers -productVersion") E TypeError: 'Mock' object is not iterable lib/ansible/module_utils/facts/system/distribution.py:492: TypeError *______________________________________________ TestDistributionFacts.test_collect_with_namespace ______________________________________________* self = <units.module_utils.facts.test_collectors.TestDistributionFacts testMethod=test_collect_with_namespace> def test_collect_with_namespace(self): module = self._mock_module() fact_collector = self.collector_class() facts_dict = fact_collector.collect_with_namespace(module=module, > collected_facts=self.collected_facts) test/units/module_utils/facts/base.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ lib/ansible/module_utils/facts/collector.py:101: in collect_with_namespace facts_dict = self.collect(module=module, collected_facts=collected_facts) lib/ansible/module_utils/facts/system/distribution.py:592: in collect distro_facts = distribution.get_distribution_facts() lib/ansible/module_utils/facts/system/distribution.py:453: in get_distribution_facts dist_func_facts = distfunc() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.module_utils.facts.system.distribution.Distribution object at 0x110940e10> def get_distribution_Darwin(self): darwin_facts = {} darwin_facts['distribution'] = 'MacOSX' > rc, out, err = self.module.run_command("/usr/bin/sw_vers -productVersion") E TypeError: 'Mock' object is not iterable lib/ansible/module_utils/facts/system/distribution.py:492: TypeError *______________________________________________________ TestServiceMgrFacts.test_collect _______________________________________________________* self = <units.module_utils.facts.test_collectors.TestServiceMgrFacts testMethod=test_collect> def test_collect(self): module = self._mock_module() fact_collector = self.collector_class() > facts_dict = fact_collector.collect(module=module, collected_facts=self.collected_facts) test/units/module_utils/facts/base.py:51: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.module_utils.facts.system.service_mgr.ServiceMgrFactCollector object at 0x1109650d0>, module = <Mock id='4573254736'> collected_facts = {} def collect(self, module=None, collected_facts=None): facts_dict = {} if not module: return facts_dict collected_facts = collected_facts or {} service_mgr_name = None # TODO: detect more custom init setups like bootscripts, dmd, s6, Epoch, etc # also other OSs other than linux might need to check across several possible candidates # Mapping of proc_1 values to more useful names proc_1_map = { 'procd': 'openwrt_init', 'runit-init': 'runit', 'svscan': 'svc', 'openrc-init': 'openrc', } # try various forms of querying pid 1 proc_1 = get_file_content('/proc/1/comm') if proc_1 is None: # FIXME: return code isnt checked # FIXME: if stdout is empty string, odd things # FIXME: other code seems to think we could get proc_1 == None past this point > rc, proc_1, err = module.run_command("ps -p 1 -o comm|tail -n 1", use_unsafe_shell=True) E TypeError: 'Mock' object is not iterable lib/ansible/module_utils/facts/system/service_mgr.py:81: TypeError *_______________________________________________ TestServiceMgrFacts.test_collect_with_namespace _______________________________________________* self = <units.module_utils.facts.test_collectors.TestServiceMgrFacts testMethod=test_collect_with_namespace> def test_collect_with_namespace(self): module = self._mock_module() fact_collector = self.collector_class() facts_dict = fact_collector.collect_with_namespace(module=module, > collected_facts=self.collected_facts) test/units/module_utils/facts/base.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ lib/ansible/module_utils/facts/collector.py:101: in collect_with_namespace facts_dict = self.collect(module=module, collected_facts=collected_facts) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.module_utils.facts.system.service_mgr.ServiceMgrFactCollector object at 0x110966390>, module = <Mock id='4573259536'> collected_facts = {} def collect(self, module=None, collected_facts=None): facts_dict = {} if not module: return facts_dict collected_facts = collected_facts or {} service_mgr_name = None # TODO: detect more custom init setups like bootscripts, dmd, s6, Epoch, etc # also other OSs other than linux might need to check across several possible candidates # Mapping of proc_1 values to more useful names proc_1_map = { 'procd': 'openwrt_init', 'runit-init': 'runit', 'svscan': 'svc', 'openrc-init': 'openrc', } # try various forms of querying pid 1 proc_1 = get_file_content('/proc/1/comm') if proc_1 is None: # FIXME: return code isnt checked # FIXME: if stdout is empty string, odd things # FIXME: other code seems to think we could get proc_1 == None past this point > rc, proc_1, err = module.run_command("ps -p 1 -o comm|tail -n 1", use_unsafe_shell=True) E TypeError: 'Mock' object is not iterable lib/ansible/module_utils/facts/system/service_mgr.py:81: TypeError *__________________________________________________ TestParameters.test_destination_mutex_10 ___________________________________________________* self = <units.modules.network.f5.test_bigip_virtual_server.TestParameters testMethod=test_destination_mutex_10> def test_destination_mutex_10(self): args = dict( destination='2700:bc00:1f10:101::6%2' ) p = ApiParameters(params=args) > assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' E AssertionError: assert '2700:bc00:1f10:101::6%2' == '2700:bc00:1f10:101::6' E - 2700:bc00:1f10:101::6%2 E ? -- E + 2700:bc00:1f10:101::6 test/units/modules/network/f5/test_bigip_virtual_server.py:141: AssertionError *__________________________________________________ TestParameters.test_destination_mutex_12 ___________________________________________________* self = <units.modules.network.f5.test_bigip_virtual_server.TestParameters testMethod=test_destination_mutex_12> def test_destination_mutex_12(self): args = dict( destination='2700:bc00:1f10:101::6%2.80' ) p = ApiParameters(params=args) > assert p.destination_tuple.ip == '2700:bc00:1f10:101::6' E AssertionError: assert '2700:bc00:1f10:101::6%2.80' == '2700:bc00:1f10:101::6' E - 2700:bc00:1f10:101::6%2.80 E ? ----- E + 2700:bc00:1f10:101::6 test/units/modules/network/f5/test_bigip_virtual_server.py:157: AssertionError *_________________________________________________ TestGetFileVaultSecret.test_file_not_found __________________________________________________* self = <units.parsing.vault.test_vault.TestGetFileVaultSecret testMethod=test_file_not_found> def test_file_not_found(self): tmp_file = tempfile.NamedTemporaryFile() filename = tmp_file.name tmp_file.close() fake_loader = DictDataLoader({filename: 'sdfadf'}) self.assertRaisesRegexp(errors.AnsibleError, '.*The vault password file %s was not found.*' % filename, vault.get_file_vault_secret, filename=filename, > loader=fake_loader) E AssertionError: ".*The vault password file /tmp/tmpd6umLT was not found.*" does not match "The vault password file /private/tmp/tmpd6umLT was not found" test/units/parsing/vault/test_vault.py:402: AssertionError *___________________________________________________ TestVaultEditor.test_real_path_symlink ____________________________________________________* self = <units.parsing.vault.test_vault_editor.TestVaultEditor testMethod=test_real_path_symlink> def test_real_path_symlink(self): self._test_dir = self._create_test_dir() file_path = self._create_file(self._test_dir, 'test_file', content=b'this is a test file') file_link_path = os.path.join(self._test_dir, 'a_link_to_test_file') os.symlink(file_path, file_link_path) ve = self._vault_editor() res = ve._real_path(file_link_path) > self.assertEqual(res, file_path) E AssertionError: '/private/tmp/tmpuKx09t_ansible_unit_test_TestVaultEditor_/test_file' != '/tmp/tmpuKx09t_ansible_unit_test_TestVaultEditor_/test_file' test/units/parsing/vault/test_vault_editor.py:573: AssertionError *________________________________________________ TestLoadListOfRoles.test_block_unknown_action ________________________________________________* self = <units.playbook.test_helpers.TestLoadListOfRoles testMethod=test_block_unknown_action> def test_block_unknown_action(self): ds = [{ 'block': [{'action': 'foo_test_block_unknown_action'}] }] ds = [{'name': 'bogus_role'}] res = helpers.load_list_of_roles(ds, self.mock_play, > > variable_manager=self.mock_variable_manager, loader=self.fake_role_loader) test/units/playbook/test_helpers.py:359: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ lib/ansible/playbook/helpers.py:359: in load_list_of_roles i = RoleInclude.load(role_def, play=play, current_role_path=current_role_path, variable_manager=variable_manager, loader=loader) lib/ansible/playbook/role/include.py:59: in load return ri.load_data(data, variable_manager=variable_manager, loader=loader) lib/ansible/playbook/base.py:245: in load_data ds = self.preprocess_data(ds) lib/ansible/playbook/role/definition.py:95: in preprocess_data (role_name, role_path) = self._load_role_path(role_name) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.playbook.role.include.RoleInclude object at 0x1114d2a50>, role_name = 'bogus_role' def _load_role_path(self, role_name): ''' the 'role', as specified in the ds (or as a bare string), can either be a simple name or a full path. If it is a full path, we use the basename as the role name, otherwise we take the name as-given and append it to the default role path ''' # we always start the search for roles in the base directory of the playbook role_search_paths = [ os.path.join(self._loader.get_basedir(), u'roles'), ] # also search in the configured roles path if C.DEFAULT_ROLES_PATH: role_search_paths.extend(C.DEFAULT_ROLES_PATH) # next, append the roles basedir, if it was set, so we can # search relative to that directory for dependent roles if self._role_basedir: role_search_paths.append(self._role_basedir) # finally as a last resort we look in the current basedir as set # in the loader (which should be the playbook dir itself) but without # the roles/ dir appended role_search_paths.append(self._loader.get_basedir()) # create a templar class to template the dependency names, in # case they contain variables if self._variable_manager is not None: all_vars = self._variable_manager.get_vars(play=self._play) else: all_vars = dict() templar = Templar(loader=self._loader, variables=all_vars) role_name = templar.template(role_name) # now iterate through the possible paths and return the first one we find for path in role_search_paths: path = templar.template(path) role_path = unfrackpath(os.path.join(path, role_name)) if self._loader.path_exists(role_path): return (role_name, role_path) # if not found elsewhere try to extract path from name role_path = unfrackpath(role_name) if self._loader.path_exists(role_path): role_name = os.path.basename(role_name) return (role_name, role_path) > raise AnsibleError("the role '%s' was not found in %s" % (role_name, ":".join(role_search_paths)), obj=self._ds) E AnsibleError: the role 'bogus_role' was not found in /Users/eshan.tandon/IdeaProjects/ansible/roles:/Users/eshan.tandon/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/Users/eshan.tandon/IdeaProjects/ansible lib/ansible/playbook/role/definition.py:188: AnsibleError *________________________________________________ TestLoadListOfRoles.test_empty_role_just_name ________________________________________________* self = <units.playbook.test_helpers.TestLoadListOfRoles testMethod=test_empty_role_just_name> def test_empty_role_just_name(self): ds = [{'name': 'bogus_role'}] res = helpers.load_list_of_roles(ds, self.mock_play, > > variable_manager=self.mock_variable_manager, loader=self.fake_role_loader) test/units/playbook/test_helpers.py:348: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ lib/ansible/playbook/helpers.py:359: in load_list_of_roles i = RoleInclude.load(role_def, play=play, current_role_path=current_role_path, variable_manager=variable_manager, loader=loader) lib/ansible/playbook/role/include.py:59: in load return ri.load_data(data, variable_manager=variable_manager, loader=loader) lib/ansible/playbook/base.py:245: in load_data ds = self.preprocess_data(ds) lib/ansible/playbook/role/definition.py:95: in preprocess_data (role_name, role_path) = self._load_role_path(role_name) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <ansible.playbook.role.include.RoleInclude object at 0x10c043f90>, role_name = 'bogus_role' def _load_role_path(self, role_name): ''' the 'role', as specified in the ds (or as a bare string), can either be a simple name or a full path. If it is a full path, we use the basename as the role name, otherwise we take the name as-given and append it to the default role path ''' # we always start the search for roles in the base directory of the playbook role_search_paths = [ os.path.join(self._loader.get_basedir(), u'roles'), ] # also search in the configured roles path if C.DEFAULT_ROLES_PATH: role_search_paths.extend(C.DEFAULT_ROLES_PATH) # next, append the roles basedir, if it was set, so we can # search relative to that directory for dependent roles if self._role_basedir: role_search_paths.append(self._role_basedir) # finally as a last resort we look in the current basedir as set # in the loader (which should be the playbook dir itself) but without # the roles/ dir appended role_search_paths.append(self._loader.get_basedir()) # create a templar class to template the dependency names, in # case they contain variables if self._variable_manager is not None: all_vars = self._variable_manager.get_vars(play=self._play) else: all_vars = dict() templar = Templar(loader=self._loader, variables=all_vars) role_name = templar.template(role_name) # now iterate through the possible paths and return the first one we find for path in role_search_paths: path = templar.template(path) role_path = unfrackpath(os.path.join(path, role_name)) if self._loader.path_exists(role_path): return (role_name, role_path) # if not found elsewhere try to extract path from name role_path = unfrackpath(role_name) if self._loader.path_exists(role_path): role_name = os.path.basename(role_name) return (role_name, role_path) > raise AnsibleError("the role '%s' was not found in %s" % (role_name, ":".join(role_search_paths)), obj=self._ds) E AnsibleError: the role 'bogus_role' was not found in /Users/eshan.tandon/IdeaProjects/ansible/roles:/Users/eshan.tandon/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/Users/eshan.tandon/IdeaProjects/ansible lib/ansible/playbook/role/definition.py:188: AnsibleError ------------------------------------------------------------------- Is this expected? Am I missing something? Thanks, Eshan -- You received this message because you are subscribed to the Google Groups "Ansible Development" group. To unsubscribe from this group and stop receiving emails from it, send an email to ansible-devel+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.