mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-23 13:20:23 -07:00
Fix vars_prompt short form support (and mark deprecated)
This commit is contained in:
parent
be7bd392cb
commit
e81947c3b4
3 changed files with 53 additions and 12 deletions
|
@ -88,14 +88,10 @@ class PlaybookExecutor:
|
||||||
|
|
||||||
if play.vars_prompt:
|
if play.vars_prompt:
|
||||||
for var in 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']
|
vname = var['name']
|
||||||
prompt = var.get("prompt", vname)
|
prompt = var.get("prompt", vname)
|
||||||
default = var.get("default", None)
|
default = var.get("default", None)
|
||||||
private = var.get("private", True)
|
private = var.get("private", True)
|
||||||
|
|
||||||
confirm = var.get("confirm", False)
|
confirm = var.get("confirm", False)
|
||||||
encrypt = var.get("encrypt", None)
|
encrypt = var.get("encrypt", None)
|
||||||
salt_size = var.get("salt_size", None)
|
salt_size = var.get("salt_size", None)
|
||||||
|
|
|
@ -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.role import Role
|
||||||
from ansible.playbook.taggable import Taggable
|
from ansible.playbook.taggable import Taggable
|
||||||
from ansible.playbook.task import Task
|
from ansible.playbook.task import Task
|
||||||
|
from ansible.vars import preprocess_vars
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Play']
|
__all__ = ['Play']
|
||||||
|
|
||||||
|
try:
|
||||||
|
from __main__ import display
|
||||||
|
display = display
|
||||||
|
except ImportError:
|
||||||
|
from ansible.utils.display import Display
|
||||||
|
display = Display()
|
||||||
|
|
||||||
|
|
||||||
class Play(Base, Taggable, Become):
|
class Play(Base, Taggable, Become):
|
||||||
|
|
||||||
|
@ -120,9 +128,6 @@ class Play(Base, Taggable, Become):
|
||||||
ds['remote_user'] = ds['user']
|
ds['remote_user'] = ds['user']
|
||||||
del 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)
|
return super(Play, self).preprocess_data(ds)
|
||||||
|
|
||||||
def _load_hosts(self, attr, ds):
|
def _load_hosts(self, attr, ds):
|
||||||
|
@ -191,8 +196,28 @@ class Play(Base, Taggable, Become):
|
||||||
roles.append(Role.load(ri, play=self))
|
roles.append(Role.load(ri, play=self))
|
||||||
return roles
|
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):
|
def _compile_roles(self):
|
||||||
'''
|
'''
|
||||||
Handles the role compilation step, returning a flat list of tasks
|
Handles the role compilation step, returning a flat list of tasks
|
||||||
|
|
|
@ -44,6 +44,26 @@ from ansible.vars.unsafe_proxy import UnsafeProxy
|
||||||
|
|
||||||
CACHED_VARS = dict()
|
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:
|
class VariableManager:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -157,14 +177,14 @@ class VariableManager:
|
||||||
|
|
||||||
# then we merge in the special 'all' group_vars first, if they exist
|
# then we merge in the special 'all' group_vars first, if they exist
|
||||||
if 'all' in self._group_vars_files:
|
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:
|
for item in data:
|
||||||
all_vars = combine_vars(all_vars, item)
|
all_vars = combine_vars(all_vars, item)
|
||||||
|
|
||||||
for group in host.get_groups():
|
for group in host.get_groups():
|
||||||
if group.name in self._group_vars_files and group.name != 'all':
|
if group.name in self._group_vars_files and group.name != 'all':
|
||||||
for data in self._group_vars_files[group.name]:
|
for data in self._group_vars_files[group.name]:
|
||||||
data = self._preprocess_vars(data)
|
data = preprocess_vars(data)
|
||||||
for item in data:
|
for item in data:
|
||||||
all_vars = combine_vars(all_vars, item)
|
all_vars = combine_vars(all_vars, item)
|
||||||
|
|
||||||
|
@ -175,7 +195,7 @@ class VariableManager:
|
||||||
host_name = host.get_name()
|
host_name = host.get_name()
|
||||||
if host_name in self._host_vars_files:
|
if host_name in self._host_vars_files:
|
||||||
for data in self._host_vars_files[host_name]:
|
for data in self._host_vars_files[host_name]:
|
||||||
data = self._preprocess_vars(data)
|
data = preprocess_vars(data)
|
||||||
for item in data:
|
for item in data:
|
||||||
all_vars = combine_vars(all_vars, item)
|
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
|
# as soon as we read one from the list. If none are found, we
|
||||||
# raise an error, which is silently ignored at this point.
|
# raise an error, which is silently ignored at this point.
|
||||||
for vars_file in vars_file_list:
|
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:
|
if data is not None:
|
||||||
for item in data:
|
for item in data:
|
||||||
all_vars = combine_vars(all_vars, item)
|
all_vars = combine_vars(all_vars, item)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue