def test__load_role_yaml(self, _load_from_file): _load_from_file.return_value = dict(foo='bar') r = Role() with patch('os.path.exists', return_value=True): with patch('os.path.isdir', return_value=True): res = r._load_role_yaml('/fake/path', 'some_subdir') self.assertEqual(res, dict(foo='bar'))
def _load_vars(var_path: Path, r: ansrole.Role) -> Mapping[str, Value]: ds = r._load_role_yaml(str( var_path.parent.relative_to(Path(r._role_path))), var_path.name, allow_dir=False) if ds is None: return {} if not isinstance(ds, ansobj.AnsibleMapping): # Hijack AnsibleError so we can log the broken file raise ans.errors.AnsibleError(f'Corrupt variables: {ds}') return ds
def _load_tasks(task_path: Path, r: ansrole.Role, handlers: bool = False) -> Sequence[anspb.block.Block]: ds = r._load_role_yaml(str( task_path.parent.relative_to(Path(r._role_path))), task_path.name, allow_dir=False) # assert isinstance(ds, ansobj.AnsibleSequence), ds blks = anspb.helpers.load_list_of_blocks( cast(ansobj.AnsibleSequence, ds), play=r._play, role=r, loader=r._loader, variable_manager=r._variable_manager, use_handlers=handlers) return blks
def _load_metadata_obj( role_path: Path, role: ansrole.Role ) -> Tuple[ansrole.metadata.RoleMetadata, Optional[Tuple[Path, str]]]: try: metadata_dict = role._load_role_yaml('meta') except ans.errors.AnsibleError as e: return (RoleMetadata(), (role_path / 'meta/main.yml', str(e))) if not metadata_dict: return (RoleMetadata(), None) if not isinstance(metadata_dict, dict): return (RoleMetadata(), ( role_path / 'meta/main.yml', f"the 'meta/main.yml' for role {role.get_name()} is not a dictionary" )) # type: ignore[attr-defined] try: return (RoleMetadata(owner=role).load_data(metadata_dict), None ) # type: ignore[call-arg, attr-defined] except ans.errors.AnsibleError as e: return RoleMetadata(), ((role_path / 'meta/main.yml'), str(e))