mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
allow the template to add additional questions to the context and templatise the defaults
This commit is contained in:
parent
6c7249dd9a
commit
d99b21c067
5 changed files with 45 additions and 15 deletions
|
@ -23,7 +23,7 @@ from jinja2 import Template
|
|||
|
||||
# zip compat for PY2/3
|
||||
from salt.ext.six.moves import zip
|
||||
import salt.utils.fopen
|
||||
from salt.utils import fopen
|
||||
from salt.utils.odict import OrderedDict
|
||||
|
||||
import salt.version
|
||||
|
@ -37,6 +37,8 @@ try:
|
|||
except ImportError as ie:
|
||||
HAS_CLICK = False
|
||||
|
||||
TEMPLATE_FILE_NAME = 'template.yml'
|
||||
|
||||
|
||||
def _get_template(path, option_key):
|
||||
'''
|
||||
|
@ -51,7 +53,7 @@ def _get_template(path, option_key):
|
|||
:returns: Details about the template
|
||||
:rtype: ``tuple``
|
||||
'''
|
||||
with salt.utils.fopen(path, "r") as template_f:
|
||||
with fopen(path, "r") as template_f:
|
||||
template = yaml.load(template_f)
|
||||
info = (option_key, template.get('description', ''), template)
|
||||
return info
|
||||
|
@ -72,14 +74,15 @@ def _fetch_templates(src):
|
|||
for item in os.listdir(src):
|
||||
s = os.path.join(src, item)
|
||||
if os.path.isdir(s):
|
||||
template_path = os.path.join(s, 'template.yml')
|
||||
template_path = os.path.join(s, TEMPLATE_FILE_NAME)
|
||||
if os.path.isfile(template_path):
|
||||
try:
|
||||
templates.append(_get_template(template_path, item))
|
||||
except: # pylint disable=bare-except
|
||||
log.error("Could not load template {0}".format(template_path))
|
||||
else:
|
||||
log.debug("Directory does not contain template.yml {0}".format(template_path))
|
||||
log.debug("Directory does not contain {1} {0}".format(template_path,
|
||||
TEMPLATE_FILE_NAME))
|
||||
return templates
|
||||
|
||||
|
||||
|
@ -132,13 +135,14 @@ def _mergetreejinja(src, dst, context):
|
|||
os.mkdir(d)
|
||||
_mergetreejinja(s, d, context)
|
||||
else:
|
||||
log.info("Copying file {0} to {1}".format(s, d))
|
||||
d = Template(d).render(context)
|
||||
with salt.utils.fopen(s, 'r') as source_file:
|
||||
src_contents = source_file.read()
|
||||
dest_contents = Template(src_contents).render(context)
|
||||
with salt.utils.fopen(d, 'w') as dest_file:
|
||||
dest_file.write(dest_contents)
|
||||
if s != TEMPLATE_FILE_NAME:
|
||||
d = Template(d).render(context)
|
||||
log.info("Copying file {0} to {1}".format(s, d))
|
||||
with fopen(s, 'r') as source_file:
|
||||
src_contents = source_file.read()
|
||||
dest_contents = Template(src_contents).render(context)
|
||||
with fopen(d, 'w') as dest_file:
|
||||
dest_file.write(dest_contents)
|
||||
|
||||
|
||||
def _prompt_user_variable(var_name, default_value):
|
||||
|
@ -270,8 +274,18 @@ def run(extension=None, name=None, description=None, salt_dir=None, merge=False,
|
|||
"year": date.today().strftime('%Y'),
|
||||
}
|
||||
|
||||
# get additional questions from template
|
||||
additional_context = {}
|
||||
for key, val in extension_context.get('questions', {}).items():
|
||||
# allow templates to be used in default values.
|
||||
default = Template(val.get('default', '')).render(param_dict)
|
||||
|
||||
prompt_var = _prompt_user_variable(val['question'], default)
|
||||
additional_context[key] = prompt_var
|
||||
|
||||
context = param_dict.copy()
|
||||
context.update(extension_context)
|
||||
context.update(additional_context)
|
||||
|
||||
if temp_dir is None:
|
||||
temp_dir = tempfile.mkdtemp()
|
||||
|
|
|
@ -30,14 +30,16 @@ log = logging.getLogger(__name__)
|
|||
HAS_LIBS = False
|
||||
try:
|
||||
# Import libs...
|
||||
|
||||
{% if depending_libraries %}
|
||||
import {{depending_libraries}}
|
||||
{% endif %}
|
||||
HAS_LIBS = True
|
||||
except ImportError as ie:
|
||||
missing_package = ie.message
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
__virtualname__ = '{{module_name}}'
|
||||
__virtualname__ = '{{virtual_name}}'
|
||||
|
||||
|
||||
def __virtual__():
|
||||
|
|
|
@ -1 +1,7 @@
|
|||
description: "Execution module"
|
||||
questions:
|
||||
depending_libraries:
|
||||
question: "What libraries does this module depend upon?"
|
||||
virtual_name:
|
||||
question: "What module virtual name to use?"
|
||||
default: "{{module_name}}"
|
|
@ -30,14 +30,16 @@ log = logging.getLogger(__name__)
|
|||
HAS_LIBS = False
|
||||
try:
|
||||
# Import libs...
|
||||
|
||||
{% if depending_libraries %}
|
||||
import {{depending_libraries}}
|
||||
{% endif %}
|
||||
HAS_LIBS = True
|
||||
except ImportError as ie:
|
||||
missing_package = ie.message
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
__virtualname__ = '{{module_name}}'
|
||||
__virtualname__ = '{{virtual_name}}'
|
||||
|
||||
|
||||
def __virtual__():
|
||||
|
|
|
@ -1 +1,7 @@
|
|||
description: "State module"
|
||||
questions:
|
||||
depending_libraries:
|
||||
question: "What libraries does this module depend upon?"
|
||||
virtual_name:
|
||||
question: "What module virtual name to use?"
|
||||
default: "{{module_name}}"
|
||||
|
|
Loading…
Add table
Reference in a new issue