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
e81947c3
Commit
e81947c3
authored
Sep 09, 2015
by
James Cammarata
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix vars_prompt short form support (and mark deprecated)
parent
be7bd392
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
12 deletions
+53
-12
lib/ansible/executor/playbook_executor.py
+0
-4
lib/ansible/playbook/play.py
+29
-4
lib/ansible/vars/__init__.py
+24
-4
No files found.
lib/ansible/executor/playbook_executor.py
View file @
e81947c3
...
...
@@ -88,14 +88,10 @@ class PlaybookExecutor:
if
play
.
vars_prompt
:
for
var
in
play
.
vars_prompt
:
if
'name'
not
in
var
:
raise
AnsibleError
(
"'vars_prompt' item is missing 'name:'"
,
obj
=
play
.
_ds
)
vname
=
var
[
'name'
]
prompt
=
var
.
get
(
"prompt"
,
vname
)
default
=
var
.
get
(
"default"
,
None
)
private
=
var
.
get
(
"private"
,
True
)
confirm
=
var
.
get
(
"confirm"
,
False
)
encrypt
=
var
.
get
(
"encrypt"
,
None
)
salt_size
=
var
.
get
(
"salt_size"
,
None
)
...
...
lib/ansible/playbook/play.py
View file @
e81947c3
...
...
@@ -31,10 +31,18 @@ from ansible.playbook.helpers import load_list_of_blocks, load_list_of_roles
from
ansible.playbook.role
import
Role
from
ansible.playbook.taggable
import
Taggable
from
ansible.playbook.task
import
Task
from
ansible.vars
import
preprocess_vars
__all__
=
[
'Play'
]
try
:
from
__main__
import
display
display
=
display
except
ImportError
:
from
ansible.utils.display
import
Display
display
=
Display
()
class
Play
(
Base
,
Taggable
,
Become
):
...
...
@@ -120,9 +128,6 @@ class Play(Base, Taggable, Become):
ds
[
'remote_user'
]
=
ds
[
'user'
]
del
ds
[
'user'
]
if
'vars_prompt'
in
ds
and
not
isinstance
(
ds
[
'vars_prompt'
],
list
):
ds
[
'vars_prompt'
]
=
[
ds
[
'vars_prompt'
]
]
return
super
(
Play
,
self
)
.
preprocess_data
(
ds
)
def
_load_hosts
(
self
,
attr
,
ds
):
...
...
@@ -191,8 +196,28 @@ class Play(Base, Taggable, Become):
roles
.
append
(
Role
.
load
(
ri
,
play
=
self
))
return
roles
# FIXME: post_validation needs to ensure that become/su/sudo have only 1 set
def
_load_vars_prompt
(
self
,
attr
,
ds
):
new_ds
=
preprocess_vars
(
ds
)
vars_prompts
=
[]
for
prompt_data
in
new_ds
:
if
'name'
not
in
prompt_data
:
self
.
_display
.
deprecated
(
"Using the 'short form' for vars_prompt has been deprecated"
)
for
vname
,
prompt
in
prompt_data
.
iteritems
():
vars_prompts
.
append
(
dict
(
name
=
vname
,
prompt
=
prompt
,
default
=
None
,
private
=
None
,
confirm
=
None
,
encrypt
=
None
,
salt_size
=
None
,
salt
=
None
,
))
else
:
vars_prompts
.
append
(
prompt_data
)
return
vars_prompts
# FIXME: post_validation needs to ensure that become/su/sudo have only 1 set
def
_compile_roles
(
self
):
'''
Handles the role compilation step, returning a flat list of tasks
...
...
lib/ansible/vars/__init__.py
View file @
e81947c3
...
...
@@ -44,6 +44,26 @@ from ansible.vars.unsafe_proxy import UnsafeProxy
CACHED_VARS
=
dict
()
def
preprocess_vars
(
a
):
'''
Ensures that vars contained in the parameter passed in are
returned as a list of dictionaries, to ensure for instance
that vars loaded from a file conform to an expected state.
'''
if
a
is
None
:
return
None
elif
not
isinstance
(
a
,
list
):
data
=
[
a
]
else
:
data
=
a
for
item
in
data
:
if
not
isinstance
(
item
,
MutableMapping
):
raise
AnsibleError
(
"variable files must contain either a dictionary of variables, or a list of dictionaries. Got:
%
s (
%
s)"
%
(
a
,
type
(
a
)))
return
data
class
VariableManager
:
def
__init__
(
self
):
...
...
@@ -157,14 +177,14 @@ class VariableManager:
# then we merge in the special 'all' group_vars first, if they exist
if
'all'
in
self
.
_group_vars_files
:
data
=
self
.
_
preprocess_vars
(
self
.
_group_vars_files
[
'all'
])
data
=
preprocess_vars
(
self
.
_group_vars_files
[
'all'
])
for
item
in
data
:
all_vars
=
combine_vars
(
all_vars
,
item
)
for
group
in
host
.
get_groups
():
if
group
.
name
in
self
.
_group_vars_files
and
group
.
name
!=
'all'
:
for
data
in
self
.
_group_vars_files
[
group
.
name
]:
data
=
self
.
_
preprocess_vars
(
data
)
data
=
preprocess_vars
(
data
)
for
item
in
data
:
all_vars
=
combine_vars
(
all_vars
,
item
)
...
...
@@ -175,7 +195,7 @@ class VariableManager:
host_name
=
host
.
get_name
()
if
host_name
in
self
.
_host_vars_files
:
for
data
in
self
.
_host_vars_files
[
host_name
]:
data
=
self
.
_
preprocess_vars
(
data
)
data
=
preprocess_vars
(
data
)
for
item
in
data
:
all_vars
=
combine_vars
(
all_vars
,
item
)
...
...
@@ -211,7 +231,7 @@ class VariableManager:
# as soon as we read one from the list. If none are found, we
# raise an error, which is silently ignored at this point.
for
vars_file
in
vars_file_list
:
data
=
self
.
_
preprocess_vars
(
loader
.
load_from_file
(
vars_file
))
data
=
preprocess_vars
(
loader
.
load_from_file
(
vars_file
))
if
data
is
not
None
:
for
item
in
data
:
all_vars
=
combine_vars
(
all_vars
,
item
)
...
...
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