mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-22 21:00:22 -07:00
parent
ed603f7030
commit
8279557e8f
5 changed files with 22 additions and 9 deletions
|
@ -31,6 +31,7 @@ from ansible.playbook.base import Base
|
|||
from ansible.playbook.become import Become
|
||||
from ansible.playbook.conditional import Conditional
|
||||
from ansible.playbook.taggable import Taggable
|
||||
from ansible.template import Templar
|
||||
from ansible.utils.path import unfrackpath
|
||||
|
||||
|
||||
|
@ -41,7 +42,11 @@ class RoleDefinition(Base, Become, Conditional, Taggable):
|
|||
|
||||
_role = FieldAttribute(isa='string')
|
||||
|
||||
def __init__(self, role_basedir=None):
|
||||
def __init__(self, play=None, role_basedir=None, variable_manager=None, loader=None):
|
||||
self._play = play
|
||||
self._variable_manager = variable_manager
|
||||
self._loader = loader
|
||||
|
||||
self._role_path = None
|
||||
self._role_basedir = role_basedir
|
||||
self._role_params = dict()
|
||||
|
@ -112,6 +117,14 @@ class RoleDefinition(Base, Become, Conditional, Taggable):
|
|||
if not role_name or not isinstance(role_name, string_types):
|
||||
raise AnsibleError('role definitions must contain a role name', obj=ds)
|
||||
|
||||
# if we have the required datastructures, and if the role_name
|
||||
# contains a variable, try and template it now
|
||||
if self._play and self._variable_manager:
|
||||
all_vars = self._variable_manager.get_vars(loader=self._loader, play=self._play)
|
||||
templar = Templar(loader=self._loader, variables=all_vars)
|
||||
if templar._contains_vars(role_name):
|
||||
role_name = templar.template(role_name)
|
||||
|
||||
return role_name
|
||||
|
||||
def _load_role_path(self, role_name):
|
||||
|
|
|
@ -38,14 +38,14 @@ class RoleInclude(RoleDefinition):
|
|||
FIXME: docstring
|
||||
"""
|
||||
|
||||
def __init__(self, role_basedir=None):
|
||||
super(RoleInclude, self).__init__(role_basedir=role_basedir)
|
||||
def __init__(self, play=None, role_basedir=None, variable_manager=None, loader=None):
|
||||
super(RoleInclude, self).__init__(play=play, role_basedir=role_basedir, variable_manager=variable_manager, loader=loader)
|
||||
|
||||
@staticmethod
|
||||
def load(data, current_role_path=None, parent_role=None, variable_manager=None, loader=None):
|
||||
def load(data, play, current_role_path=None, parent_role=None, variable_manager=None, loader=None):
|
||||
|
||||
assert isinstance(data, string_types) or isinstance(data, dict) or isinstance(data, AnsibleBaseYAMLObject)
|
||||
|
||||
ri = RoleInclude(role_basedir=current_role_path)
|
||||
ri = RoleInclude(play=play, role_basedir=current_role_path, variable_manager=variable_manager, loader=loader)
|
||||
return ri.load_data(data, variable_manager=variable_manager, loader=loader)
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ class RoleMetadata(Base):
|
|||
if self._owner:
|
||||
current_role_path = os.path.dirname(self._owner._role_path)
|
||||
|
||||
return load_list_of_roles(ds, current_role_path=current_role_path, variable_manager=self._variable_manager, loader=self._loader)
|
||||
return load_list_of_roles(ds, play=self._owner._play, current_role_path=current_role_path, variable_manager=self._variable_manager, loader=self._loader)
|
||||
|
||||
def _load_galaxy_info(self, attr, ds):
|
||||
'''
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue