Example #1
0
 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'))
Example #2
0
 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
Example #3
0
 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
Example #4
0
    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))