Pure python state renderer
The SLS file should contain a function called run
which returns high state
data.
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:saltenv
argument on the salt CLI (i.e. salt '*' state.sls foo.bar.baz saltenv=env_name
).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 be
foo.bar.baz
.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
|