Jusene's Blog

Saltstack 学习笔记(二)

字数统计: 660阅读时长: 3 min
2018/04/25 Share

Jinja2模版扩展主机状态

  1. 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']}}
  2. 流程控制
    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状态文件都会默认的目录去寻找。

CATALOG
  1. 1. Jinja2模版扩展主机状态
  2. 2. Grain概念及设置
  3. 3. Pillar概念及设置
  4. 4. highstate复合主机状态
  5. 5. 多环境的配置和管理