Saltstack之State介绍

版本

Centos 7

SaltStack 3001.1

简介

state,即状态,意思是确保主机处于state文件所描述的状态下;saltstack的基础是可以批量执行命令,那么state就类似脚本,不过由于是描述状态而不是命令的集合,所以语法更简单,但可编程性也差不少。

开始使用

state脚本必须放到saltstack的fileserver路径下,默认为/srv/salt/,可以通过/etc/salt/master中的file_roots修改。

脚本必须是.sls后缀,语法为yaml,下面新建一个example.sls:

svn:  # 任务id,自定义的, 在一个sls文件中不可重复
  pkg.installed:  # 模块.方法
    - name: subversion  # name通常是任务内容, 可省略,省略时用id作为name

show svn version:
  cmd.run:
- name: svn --version

    - require:  # 执行的条件
      - pkg: svn  # 模块.任务id, 意思是要任务svn成功才执行该任务

name省略的话,可以简化成:

subversion:
  pkg.installed

svn --version:
  cmd.run:
    - require:
      - pkg: subversion

这个state会在远程主机安装svn并执行打印版本号的命令,使用下面的命令应用这个state:

shell> salt 'minion-01' state.apply example  # 刚写好的state第一次用时建议加上test=True先测试下

目录结构

/srv/salt/
├── example.sls
└── test
    ├── init.sls
    └── test.sls

假设有上面的文件结构,那么:

命令 执行的文件
salt 'minion-01' state.apply example
example.sls
salt 'minion-01' state.apply test
test/init.sls
salt 'minion-01' state.apply test.test
test/test.sls

包含include

/srv/salt/
├── example.sls
└── tools
    ├── git.sls
    └── svn.sls

# example.sls 内容
include:
  - tools.git
  - tools.svn

执行example就是执行了git和svn

top.sls

state.apply未指明目标时默认为top.sls,它的用法与普通sls稍有不同,示例:

/srv/salt/
├── top.sls
├── jdk.sls
└── tools
    ├── git.sls
    └── svn.sls

# top.sls 内容
base:
  '*':
    - jdk
  'minion-01':
    - tools.git
  'minion-02':
    - tools.svn
命令 执行效果
salt '*' state.apply
jdk
salt 'minion-01' state.apply
jdk、git
salt 'minion-02' state.apply
jdk、svn

总结

state适合运维统一批量的配置服务器,配合grains和pillar可以实现丰富的功能,不过使用中发现的两个问题需要避免:

1、state运行时会遍历saltstack的fileserver,所以不要将大量文件放进去;曾将svn代码检出到fileserver中,导致每次state时salt-master都跑满cpu并超时。

2、state在一台minion上同一时间只能运行一个,有并发要求的请使用远程命令模式;曾使用state配合jenkins做自动部署,导致同时构建多个程序时经常因冲突导致失败。

所以,state适合封装常见、复杂但变量不多的运维场景,而不是千奇百怪又经常变化的业务场景;saltstack不是操作系统,state更不是编程语言,针对业务项目的自动化运维,建议使用saltstack的python-api进行二次开发。

附:

可以通过命令查看帮助:

sys.list_state_modules 列出state可用的模块 salt 'minion-01' sys.list_state_modules
sys.list_state_functions 列出state指定模块的可用方法 salt 'minion-01' sys.list_state_functions file
sys.state_doc 显示state指定模块的方法的用法 salt 'minion-01' sys.list_state_functions file.managed

官方文档(State模块):https://docs.saltstack.com/en/latest/ref/states/all/index.html

OVER

posted @ 2020-11-05 10:50  晚来秋  阅读(517)  评论(0编辑  收藏  举报