1. 程式人生 > 實用技巧 >Saltstack之State介紹

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

附:

可以通過命令檢視幫助:

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