parent
ed603f7030
commit
8279557e8f
5 changed files with 22 additions and 9 deletions
|
@ -98,7 +98,7 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
|
||||||
return task_list
|
return task_list
|
||||||
|
|
||||||
|
|
||||||
def load_list_of_roles(ds, current_role_path=None, variable_manager=None, loader=None):
|
def load_list_of_roles(ds, play, current_role_path=None, variable_manager=None, loader=None):
|
||||||
'''
|
'''
|
||||||
Loads and returns a list of RoleInclude objects from the datastructure
|
Loads and returns a list of RoleInclude objects from the datastructure
|
||||||
list of role definitions
|
list of role definitions
|
||||||
|
@ -112,7 +112,7 @@ def load_list_of_roles(ds, current_role_path=None, variable_manager=None, loader
|
||||||
|
|
||||||
roles = []
|
roles = []
|
||||||
for role_def in ds:
|
for role_def in ds:
|
||||||
i = RoleInclude.load(role_def, current_role_path=current_role_path, variable_manager=variable_manager, loader=loader)
|
i = RoleInclude.load(role_def, play=play, current_role_path=current_role_path, variable_manager=variable_manager, loader=loader)
|
||||||
roles.append(i)
|
roles.append(i)
|
||||||
|
|
||||||
return roles
|
return roles
|
||||||
|
|
|
@ -211,7 +211,7 @@ class Play(Base, Taggable, Become):
|
||||||
if ds is None:
|
if ds is None:
|
||||||
ds = []
|
ds = []
|
||||||
|
|
||||||
role_includes = load_list_of_roles(ds, variable_manager=self._variable_manager, loader=self._loader)
|
role_includes = load_list_of_roles(ds, play=self, variable_manager=self._variable_manager, loader=self._loader)
|
||||||
|
|
||||||
roles = []
|
roles = []
|
||||||
for ri in role_includes:
|
for ri in role_includes:
|
||||||
|
|
|
@ -31,6 +31,7 @@ from ansible.playbook.base import Base
|
||||||
from ansible.playbook.become import Become
|
from ansible.playbook.become import Become
|
||||||
from ansible.playbook.conditional import Conditional
|
from ansible.playbook.conditional import Conditional
|
||||||
from ansible.playbook.taggable import Taggable
|
from ansible.playbook.taggable import Taggable
|
||||||
|
from ansible.template import Templar
|
||||||
from ansible.utils.path import unfrackpath
|
from ansible.utils.path import unfrackpath
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,7 +42,11 @@ class RoleDefinition(Base, Become, Conditional, Taggable):
|
||||||
|
|
||||||
_role = FieldAttribute(isa='string')
|
_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_path = None
|
||||||
self._role_basedir = role_basedir
|
self._role_basedir = role_basedir
|
||||||
self._role_params = dict()
|
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):
|
if not role_name or not isinstance(role_name, string_types):
|
||||||
raise AnsibleError('role definitions must contain a role name', obj=ds)
|
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
|
return role_name
|
||||||
|
|
||||||
def _load_role_path(self, role_name):
|
def _load_role_path(self, role_name):
|
||||||
|
|
|
@ -38,14 +38,14 @@ class RoleInclude(RoleDefinition):
|
||||||
FIXME: docstring
|
FIXME: docstring
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, role_basedir=None):
|
def __init__(self, play=None, role_basedir=None, variable_manager=None, loader=None):
|
||||||
super(RoleInclude, self).__init__(role_basedir=role_basedir)
|
super(RoleInclude, self).__init__(play=play, role_basedir=role_basedir, variable_manager=variable_manager, loader=loader)
|
||||||
|
|
||||||
@staticmethod
|
@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)
|
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)
|
return ri.load_data(data, variable_manager=variable_manager, loader=loader)
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ class RoleMetadata(Base):
|
||||||
if self._owner:
|
if self._owner:
|
||||||
current_role_path = os.path.dirname(self._owner._role_path)
|
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):
|
def _load_galaxy_info(self, attr, ds):
|
||||||
'''
|
'''
|
||||||
|
|
Loading…
Reference in a new issue