salt.renderers.py
Pure python state renderer
To use this renderer, the SLS file should contain a function called run
which returns highstate data.
The highstate data is a dictionary containing identifiers as keys, and execution dictionaries as values. For example the following state declaration in YAML:
common_packages: pkg.installed: - pkgs: - curl - vim
translates to:
{'common_packages': {'pkg.installed': [{'pkgs': ['curl', 'vim']}]}}
In this module, a few objects are defined for you, giving access to Salt's execution functions, grains, pillar, etc. They are:
__salt__
- Execution functions (i.e.__salt__['test.echo']('foo')
)__grains__
- Grains (i.e.__grains__['os']
)__pillar__
- Pillar data (i.e.__pillar__['foo']
)__opts__
- Minion configuration options-
__env__
- The effective salt fileserver environment (i.e.base
). Also referred to as a "saltenv".__env__
should not be modified in a pure python SLS file. To use a different environment, the environment should be set when executing the state. This can be done in a couple different ways:Using the
saltenv
argument on the salt CLI (i.e.salt '*' state.sls foo.bar.baz saltenv=env_name
).By adding a
saltenv
argument to an individual state within the SLS file. In other words, adding a line like this to the state's data structure:{'saltenv': 'env_name'}
__sls__
- The SLS path of the file. For example, if the root of the base environment is/srv/salt
, and the SLS file is/srv/salt/foo/bar/baz.sls
, then__sls__
in that file will befoo.bar.baz
.
When writing a reactor SLS file the global context data
(same as context {{ data }}
for states written with Jinja + YAML) is available. The following YAML + Jinja state declaration:
{% if data['id'] == 'mysql1' %} highstate_run: local.state.apply: - tgt: mysql1 {% endif %}
translates to:
if data['id'] == 'mysql1': return {'highstate_run': {'local.state.apply': [{'tgt': 'mysql1'}]}}
Full Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #!py def run(): config = {} if __grains__['os'] == 'Ubuntu': user = 'ubuntu' group = 'ubuntu' home = '/home/{0}'.format(user) else: user = 'root' group = 'root' home = '/root/' config['s3cmd'] = { 'pkg': [ 'installed', {'name': 's3cmd'}, ], } config[home + '/.s3cfg'] = { 'file.managed': [ {'source': 'salt://s3cfg/templates/s3cfg'}, {'template': 'jinja'}, {'user': user}, {'group': group}, {'mode': 600}, {'context': { 'aws_key': __pillar__['AWS_ACCESS_KEY_ID'], 'aws_secret_key': __pillar__['AWS_SECRET_ACCESS_KEY'], }, }, ], } return config
-
Render the python module's components
- Return type
-
string
salt.renderers.py.render(template, saltenv='base', sls='', tmplpath=None, **kws)
© 2021 SaltStack.
Licensed under the Apache License, Version 2.0.
https://docs.saltproject.io/en/latest/ref/renderers/all/salt.renderers.py.html