Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
ansible
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
ansible
Commits
8279557e
Commit
8279557e
authored
Aug 03, 2015
by
James Cammarata
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Allow role names to be templated
Fixes #10858
parent
ed603f70
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
22 additions
and
9 deletions
+22
-9
lib/ansible/playbook/helpers.py
+2
-2
lib/ansible/playbook/play.py
+1
-1
lib/ansible/playbook/role/definition.py
+14
-1
lib/ansible/playbook/role/include.py
+4
-4
lib/ansible/playbook/role/metadata.py
+1
-1
No files found.
lib/ansible/playbook/helpers.py
View file @
8279557e
...
...
@@ -98,7 +98,7 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
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
list of role definitions
...
...
@@ -112,7 +112,7 @@ def load_list_of_roles(ds, current_role_path=None, variable_manager=None, loader
roles
=
[]
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
)
return
roles
...
...
lib/ansible/playbook/play.py
View file @
8279557e
...
...
@@ -211,7 +211,7 @@ class Play(Base, Taggable, Become):
if
ds
is
None
:
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
=
[]
for
ri
in
role_includes
:
...
...
lib/ansible/playbook/role/definition.py
View file @
8279557e
...
...
@@ -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
):
...
...
lib/ansible/playbook/role/include.py
View file @
8279557e
...
...
@@ -38,14 +38,14 @@ class RoleInclude(RoleDefinition):
FIXME: docstring
"""
def
__init__
(
self
,
role_basedi
r
=
None
):
super
(
RoleInclude
,
self
)
.
__init__
(
role_basedir
=
role_basedi
r
)
def
__init__
(
self
,
play
=
None
,
role_basedir
=
None
,
variable_manager
=
None
,
loade
r
=
None
):
super
(
RoleInclude
,
self
)
.
__init__
(
play
=
play
,
role_basedir
=
role_basedir
,
variable_manager
=
variable_manager
,
loader
=
loade
r
)
@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
)
lib/ansible/playbook/role/metadata.py
View file @
8279557e
...
...
@@ -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
):
'''
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment