mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Move userdata templating to salt.utils.cloud
This commit is contained in:
parent
b440d0c679
commit
6a6ef0adf8
5 changed files with 68 additions and 128 deletions
|
@ -872,9 +872,6 @@ def request_instance(call=None, kwargs=None): # pylint: disable=unused-argument
|
|||
userdata_file = config.get_cloud_config_value(
|
||||
'userdata_file', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
userdata_template = config.get_cloud_config_value(
|
||||
'userdata_template', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
if userdata_file is None:
|
||||
userdata = config.get_cloud_config_value(
|
||||
'userdata', vm_, __opts__, search_global=False, default=None
|
||||
|
@ -884,36 +881,13 @@ def request_instance(call=None, kwargs=None): # pylint: disable=unused-argument
|
|||
with salt.utils.fopen(userdata_file, 'r') as fh_:
|
||||
userdata = fh_.read()
|
||||
|
||||
if userdata is not None:
|
||||
# Use the cloud profile's userdata_template, otherwise get it from the
|
||||
# master configuration file.
|
||||
renderer = __opts__.get('userdata_template') \
|
||||
if userdata_template is None
|
||||
else userdata_template
|
||||
if renderer is not None:
|
||||
render_opts = __opts__.copy()
|
||||
render_opts.update(vm_)
|
||||
rend = salt.loader.render(render_opts, {})
|
||||
blacklist = __opts__['renderer_blacklist']
|
||||
whitelist = __opts__['renderer_whitelist']
|
||||
userdata = compile_template(
|
||||
':string:',
|
||||
rend,
|
||||
renderer,
|
||||
blacklist,
|
||||
whitelist,
|
||||
input_data=userdata,
|
||||
)
|
||||
userdata = salt.utils.cloud.userdata_template(__opts__, vm_, userdata)
|
||||
|
||||
if userdata is not None:
|
||||
try:
|
||||
# template renderers like "jinja" should return a StringIO
|
||||
os_kwargs['custom_data'] = \
|
||||
''.join(base64.b64encode(userdata).readlines())
|
||||
except AttributeError:
|
||||
try:
|
||||
os_kwargs['custom_data'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s')
|
||||
os_kwargs['custom_data'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s', exc)
|
||||
|
||||
iface_data = create_interface(kwargs=vm_)
|
||||
vm_['iface_id'] = iface_data['id']
|
||||
|
|
|
@ -93,8 +93,6 @@ import salt.utils
|
|||
from salt._compat import ElementTree as ET
|
||||
import salt.utils.http as http
|
||||
import salt.utils.aws as aws
|
||||
import salt.loader
|
||||
from salt.template import compile_template
|
||||
|
||||
# Import salt.cloud libs
|
||||
import salt.utils.cloud
|
||||
|
@ -1681,9 +1679,6 @@ def request_instance(vm_=None, call=None):
|
|||
userdata_file = config.get_cloud_config_value(
|
||||
'userdata_file', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
userdata_template = config.get_cloud_config_value(
|
||||
'userdata_template', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
if userdata_file is None:
|
||||
userdata = config.get_cloud_config_value(
|
||||
'userdata', vm_, __opts__, search_global=False, default=None
|
||||
|
@ -1694,36 +1689,13 @@ def request_instance(vm_=None, call=None):
|
|||
with salt.utils.fopen(userdata_file, 'r') as fh_:
|
||||
userdata = fh_.read()
|
||||
|
||||
if userdata is not None:
|
||||
# Use the cloud profile's userdata_template, otherwise get it from the
|
||||
# master configuration file.
|
||||
renderer = __opts__.get('userdata_template') \
|
||||
if userdata_template is None
|
||||
else userdata_template
|
||||
if renderer is not None:
|
||||
render_opts = __opts__.copy()
|
||||
render_opts.update(vm_)
|
||||
rend = salt.loader.render(render_opts, {})
|
||||
blacklist = __opts__['renderer_blacklist']
|
||||
whitelist = __opts__['renderer_whitelist']
|
||||
userdata = compile_template(
|
||||
':string:',
|
||||
rend,
|
||||
renderer,
|
||||
blacklist,
|
||||
whitelist,
|
||||
input_data=userdata,
|
||||
)
|
||||
userdata = salt.utils.cloud.userdata_template(__opts__, vm_, userdata)
|
||||
|
||||
if userdata is not None:
|
||||
try:
|
||||
# template renderers like "jinja" should return a StringIO
|
||||
params[spot_prefix + 'UserData'] = \
|
||||
''.join(base64.b64encode(userdata).readlines())
|
||||
except AttributeError:
|
||||
try:
|
||||
params[spot_prefix + 'UserData'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s')
|
||||
params[spot_prefix + 'UserData'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s', exc)
|
||||
|
||||
vm_size = config.get_cloud_config_value(
|
||||
'size', vm_, __opts__, search_global=False
|
||||
|
|
|
@ -647,42 +647,15 @@ def request_instance(vm_=None, call=None):
|
|||
userdata_file = config.get_cloud_config_value(
|
||||
'userdata_file', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
userdata_template = config.get_cloud_config_value(
|
||||
'userdata_template', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
|
||||
if userdata_file is not None:
|
||||
with salt.utils.fopen(userdata_file, 'r') as fp_:
|
||||
userdata = fp_.read()
|
||||
|
||||
# Use the cloud profile's userdata_template, otherwise get it from the
|
||||
# master configuration file.
|
||||
renderer = __opts__.get('userdata_template') \
|
||||
if userdata_template is None
|
||||
else userdata_template
|
||||
if renderer is not None:
|
||||
render_opts = __opts__.copy()
|
||||
render_opts.update(vm_)
|
||||
rend = salt.loader.render(render_opts, {})
|
||||
blacklist = __opts__['renderer_blacklist']
|
||||
whitelist = __opts__['renderer_whitelist']
|
||||
userdata = compile_template(
|
||||
':string:',
|
||||
rend,
|
||||
renderer,
|
||||
blacklist,
|
||||
whitelist,
|
||||
input_data=userdata,
|
||||
userdata = salt.utils.cloud.userdata_template(
|
||||
__opts__, vm_, fp_.read()
|
||||
)
|
||||
|
||||
try:
|
||||
# template renderers like "jinja" should return a StringIO
|
||||
kwargs['userdata'] = ''.join(base64.b64encode(userdata).readlines())
|
||||
except AttributeError:
|
||||
try:
|
||||
kwargs['userdata'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s')
|
||||
kwargs['userdata'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s', exc)
|
||||
|
||||
kwargs['config_drive'] = config.get_cloud_config_value(
|
||||
'config_drive', vm_, __opts__, search_global=False
|
||||
|
|
|
@ -528,42 +528,15 @@ def request_instance(vm_=None, call=None):
|
|||
userdata_file = config.get_cloud_config_value(
|
||||
'userdata_file', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
userdata_template = config.get_cloud_config_value(
|
||||
'userdata_template', vm_, __opts__, search_global=False, default=None
|
||||
)
|
||||
|
||||
if userdata_file is not None:
|
||||
with salt.utils.fopen(userdata_file, 'r') as fp_:
|
||||
userdata = fp_.read()
|
||||
|
||||
# Use the cloud profile's userdata_template, otherwise get it from the
|
||||
# master configuration file.
|
||||
renderer = __opts__.get('userdata_template') \
|
||||
if userdata_template is None
|
||||
else userdata_template
|
||||
if renderer is not None:
|
||||
render_opts = __opts__.copy()
|
||||
render_opts.update(vm_)
|
||||
rend = salt.loader.render(render_opts, {})
|
||||
blacklist = __opts__['renderer_blacklist']
|
||||
whitelist = __opts__['renderer_whitelist']
|
||||
userdata = compile_template(
|
||||
':string:',
|
||||
rend,
|
||||
renderer,
|
||||
blacklist,
|
||||
whitelist,
|
||||
input_data=userdata,
|
||||
userdata = salt.utils.cloud.userdata_template(
|
||||
__opts__, vm_, fp_.read()
|
||||
)
|
||||
|
||||
try:
|
||||
# template renderers like "jinja" should return a StringIO
|
||||
kwargs['ex_userdata'] = ''.join(base64.b64encode(userdata).readlines())
|
||||
except AttributeError:
|
||||
try:
|
||||
kwargs['ex_userdata'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s')
|
||||
kwargs['ex_userdata'] = base64.b64encode(userdata)
|
||||
except Exception as exc:
|
||||
log.exception('Failed to encode userdata: %s', exc)
|
||||
|
||||
config_drive = config.get_cloud_config_value(
|
||||
'config_drive', vm_, __opts__, default=None, search_global=False
|
||||
|
|
|
@ -55,6 +55,8 @@ except ImportError:
|
|||
import salt.crypt
|
||||
import salt.client
|
||||
import salt.config
|
||||
import salt.loader
|
||||
import salt.template
|
||||
import salt.utils
|
||||
import salt.utils.event
|
||||
from salt.utils import vt
|
||||
|
@ -3207,3 +3209,49 @@ def check_key_path_and_mode(provider, key_path):
|
|||
return False
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def userdata_template(opts, vm_, userdata):
|
||||
'''
|
||||
Use the configured templating engine to template the userdata file
|
||||
'''
|
||||
# No userdata, no need to template anything
|
||||
if userdata is None:
|
||||
return userdata
|
||||
|
||||
userdata_template = salt.config.get_cloud_config_value(
|
||||
'userdata_template', vm_, opts, search_global=False, default=None
|
||||
)
|
||||
# Use the cloud profile's userdata_template, otherwise get it from the
|
||||
# master configuration file.
|
||||
renderer = opts.get('userdata_template') \
|
||||
if userdata_template is None \
|
||||
else userdata_template
|
||||
if renderer is None:
|
||||
return userdata
|
||||
else:
|
||||
render_opts = opts.copy()
|
||||
render_opts.update(vm_)
|
||||
rend = salt.loader.render(render_opts, {})
|
||||
blacklist = opts['renderer_blacklist']
|
||||
whitelist = opts['renderer_whitelist']
|
||||
templated = salt.template.compile_template(
|
||||
':string:',
|
||||
rend,
|
||||
renderer,
|
||||
blacklist,
|
||||
whitelist,
|
||||
input_data=userdata,
|
||||
)
|
||||
if not isinstance(templated, six.string_types):
|
||||
# template renderers like "jinja" should return a StringIO
|
||||
try:
|
||||
templated = ''.join(templated.readlines())
|
||||
except AttributeError:
|
||||
log.warning(
|
||||
'Templated userdata resulted in non-string result (%s), '
|
||||
'converting to string', templated
|
||||
)
|
||||
templated = str(templated)
|
||||
|
||||
return templated
|
||||
|
|
Loading…
Add table
Reference in a new issue