State
state的作用最大的作用就是check功能,基于状态的好处是,与定义的目标配置,如果服务器上有了就什么都不做,如果没有就进行变更
控制state执行顺序
如果所需的状态执行成功,则依赖状态将执行。如果要求的状态执行失败,则依赖状态将不会发生
可以使用如下语句
正向 反向
依赖某个状态 require require_in
关注某个状态 watch watch_in
根据尚未执行的状态的预期结果来采取行动 prereq prereq_in
继承在另一个id声明中传递的参数 use use_in
重新执行 onfail onfail_in
require示例
aa1: cmd.run: - name: ls /han - require: # aa2执行成功时执行aa1,否则aa1不执行 - cmd: aa2 aa2: cmd.run: - name: mkdir /han aa1: cmd.run: - name: ls /han aa2: cmd.run: - name: mkdir /han - require_in: # aa2执行成功时执行aa1,否则aa1不执行 - cmd: aa1
watch示例
ntpd: service.running: - watch: # 配置文件更新后重启服务,否则不会发生任何事情 - file: /etc/ntp.conf file.managed: - name: /etc/ntp.conf - source: salt://ntp/files/ntp.conf
prereq示例
graceful-down: cmd.run: - name: service apache graceful - prereq: - file: site-code site-code: file.recurse: - name: /opt/site_code - source: salt://site/code 更新网站代码前线关闭apache服务
use示例
/tmp/foo.conf: file.managed: - source: salt://foo.conf - template: jinja - mkdirs: True - user: apache - group: apache - mode: 755 /tmp/bar.conf: file.managed: - source: salt://bar.conf - use: # 继承/tmp/foo.conf中声明的变量 - file: /tmp/foo.conf
onfail示例
a2: cmd.run: - name: cho "connect 1.1.1.1:8080 server..." a3: cmd.run: - names: - echo "connect 1.1.1.2:8080 server..." - touch /tmp/111111111 - onfail: # a2执行失败时执行a3,否则a3不执行 - cmd: a2
top入口文件
base: # 所有minion使用以下state文件 '*': - ldap-client - networking - salt.minion # minion_id 以字符串 'nag1' 开头 # 或者grains role的值是 'monitoring' # 使用 nagios/server.sls state文件 'nag1* or G@role:monitoring': - nagios.server # 使用正则匹配minion_id '^(memcache|web).(qa|prod).loc$': - match: pcre - nagios.mon.web - apache.server # 使用Grains匹配minion_id 'os:Ubuntu': - match: grain - repos.ubuntu # 使用Grains正则匹配minion_id 'os:(RedHat|CentOS)': - match: grain_pcre - repos.epel # minion_id列表 'foo,bar,baz': - match: list - database # 使用Pillar “somekey:abc”匹配minion 'somekey:abc': - match: pillar - xyz
编写SLS文件
# for循环 {% for usr in ['moe','larry','curly'] %} {{ usr }}: user.present {% endfor %} # if判断 {% if pillar.get('webserver_role', '') %} /var/www/foobarcom: file.recurse: - source: salt://webserver/src/foobarcom - env: {{ pillar['webserver_role'] }} # 引用Piillar - user: grains['http_user'] # 引用Grains - group: grains['http_group'] {% endif %}
使用Jinja模板
nginx_server: file.managed: - name: /use/local/nginx/nginx.conf - source: salt://nginx/files/nginx.conf - template: jinja - defaults: port : {{ pillar['port'] }} nginx/files/nginx.conf: ... {{ port }} ... ...
扩展State模块
/srv/salt/_states/check.py import os def path(name,abspath=None): ret = { 'name': name, 'changes': {}, 'result': '', 'comment': ''} if os.path.exists(abspath): ret['result'] = True else: ret['result'] = False ret['comment'] = abspath return ret /srv/salt/aaa.sls asdsad: check.path: - abspath: /tmp 返回 salt "*" state.sls aaa ---------- ID: asdsad Function: check.path Result: True Comment: /tmp Started: 17:01:09.052687 Duration: 0.835 ms Changes: Summary ------------ Succeeded: 1 Failed: 0 ------------ Total states run: 1
浙公网安备 33010602011771号