Jinja2模版扩展主机状态
- Jinja2变量列表:
1
~]# cat var.sls
2
{% set var='hello world' %}
3
test_var:
4
cmd.run:
5
- name: echo "var is {{var}}"
6
~]# salt '*' state.sls var
字典类型:1
{% set list = ['one','two','three'] %}
2
{{list[1]}}
1
{% set dict = {'first':'value 1','second':'value 2'}%}
2
{{dict['first']}}
- 流程控制
1
{% for user in users %}
2
{{user}}
3
{% endfor %}
1
{% for key,value in my_dict.iteritems() %}
2
{{key}}
3
{{value}}
4
{%endfor%}
Grain概念及设置
Grains是存储在minion上的数据,minion启动后进行Grains计算,Grains是一种静态数据这些数据不经常变,即使有变化重启minion也会重新计算生成。
1 | ~]# salt '*' grains.ls #列出grains项 |
2 | ~]# salt '*' grains.items |
3 | ~]# salt '*' granins.item cpu_model |
4 | ~]# salt '*' grains.setval mygrains "{'key1':'val1','key2','val2'}" |
5 | ~]# salt '*' grains.delval mygrains |
通过查看minion的/etc/salt/grains可以发现已经写入的grains数据
grains_module的方式设置:
1 | ~}# mkdir -pv /srv/salt/_grains |
2 | ~]# vim /srv/salt/_grains/my_grain_mod.py |
3 | import time |
4 | def now(): |
5 | grains ={} |
6 | grains['now'] = time.time() |
7 | return grains |
8 | ~]# salt '*' saltutil.sync_all #同步模块到monion |
9 | ~]# salt '*' sys.reload #重载一次模块 |
Pillar概念及设置
Grains的缺点很明显,这些数据相对来说都是静态数据,如果有变化的数据该如何处理,Pillar的数据存储在master上,指定的minion只能看见自己的Pillar数据,而且每台minion的Pillar都进行了加密。
1 | ~]# salt '*' pillar.items |
2 | ~]# salt '*' pillar.item foo |
例子:
1 | ~]# mkdir -pv /srv/pillar |
2 | ~]# vim monion_one_key.sls |
3 | private_key: minion_one_key |
4 | ~]# vim monion_two_key.sls |
5 | private_key: minion_two_key |
6 | ~]# vim /srv/pillar/top.sls |
7 | base: |
8 | 'minion-one': |
9 | - minion_one_key |
10 | 'minion-two': |
11 | - minion_two_key |
12 | ~]# salt '*' saltutil.refresh_pillar |
13 | ~]# salt '*' pillar.items |
highstate复合主机状态
highstate函数正是通过top.sls文件作为入口对模块和主机进行管理的。
1 | ~]# mkdir /srv/salt/nginx |
2 | ~]# touch /srv/salt/nginx/{init,install_nginx,nginx_conf,nginx_running}.sls |
3 | ~]# cd /srv/salt |
4 | ~]# vim nginx/init.sls |
5 | include: |
6 | - .install_nginx |
7 | - .nginx_running |
8 | - .nginx_conf |
9 | ~]# vim top.sls |
10 | base: |
11 | "minion-one": |
12 | - nginx |
13 | ~]# salt "*" sate.highstate |
通过对状态文件拆分和配置top.sls文件可以灵活地组合各种复合模块来管理minion。
多环境的配置和管理
在top.sls都会包含一个base配置项,这个其实是salt配置文件中默认的环境目录,可以在/etc/salt/zmaste中找到对应的部分:
1 | # file_roots: |
2 | # base: |
3 | # - /srv/salt/ |
4 | # dev: |
5 | # - /srv/salt/dev/services |
6 | # - /srv/salt/dev/states |
7 | # prod: |
8 | # - /srv/salt/prod/services |
9 | # - /srv/salt/prod/states |
file_roots这个配置指名了我们环境目录在哪里,salt执行对于的sls状态文件都会默认的目录去寻找。