Saltstack系列6:Saltstack之state


state功能

state是Saltstack最核心的功能,通過預先定制好的sls(salt state file)文件對被控制主機進行狀態管理,支持包括程序包(pkg)、文件(file)、網絡配置(network)、系統服務(service)、系統用戶(user)等。

 

state的定義

state的定義是通過sls文件進行描述的,支持YAML語法,定義規則如下:

$ID: #定義state名稱,通常采用與描述對象保存一致的方法,如apache、nginx等 
  $state: #須管理對象的類型
    - $state: states #定制對象的狀態

示例:

apache: #state名稱:apache
  pkg: #管理對象類型:pkg,進行軟件安裝(yum、apt)
    - installed #pkg要執行的方法:install,如未安裝就進行安裝
  service: #管理對象類型:service,管理系統守護進程
    - running #service要執行的方法:running,如未運行就進行啟動
    - require: #關鍵字require,確保apache服務只有在成功安裝軟件包后才會啟動
      - pkg: apache

注:---關鍵字說明

require:在運行此state之前,先運行依賴的state關系檢查,可配置多個state依賴對象;
watch:在檢查摸個state發生變化時運行此模塊。

 

state的使用

state的入口文件與pillar一樣,文件名都是top.sls,但state要求sls文件必須存放在Saltstack base定義的目錄下(默認為/srv/salt)。

state描述配置*.sls支持jinjia模板、grains及pillar引用等,在state的邏輯層次定義完成后,再通過salt '*' state.highstate執行生效。

示例:

結合grains與pillar,實現一個根據不同操作系統類型部署apache環境的任務

定義pillar

【/srv/pillar/top.sls】

base:
  '*':
    - apache

在top.sls中引用二級配置有兩種方式,一種是直接引用,如本例中直接引用apache.sls;另一種是創建apache目錄,再引用目錄中的init.sls文件,兩者效果是一樣的。

【/srv/pillar/apache.sls】或【/srv/pillar/apache/init.sls】

pkgs:
{% if grains['os_family'] == 'Debian' %}
  apache: apache2
  {% elif grains['os_family'] == 'RedHat' %}
  apache: httpd
  {% elif grains['os'] == 'Arch' %}
  apache: apache
{% endif %}

測試:

salt '*' saltutil.refresh_pillar #刷新pillar
salt '*' pillar.data pkgs #獲取pkgs信息

 

定義state

【/srv/salt/top.sls】

base:
  '*':
    - apache

 

【/srv/salt/apache.sls】或【/srv/salt/apache/init.sls】

apache:
  pkg:
    - installed
    - name: {{ pillar['pkgs']['apache'] }} #pillar['pkgs']['apache']引用的是pillar定義的數據
  service.running:
    - name: {{ pillar['pkgs']['apache'] }}
    - require:
      - pkg: {{ pillar['pkgs']['apache'] }}

 


執行state

salt '*' state.highstate


結果:


 


參考資料:

根據劉天斯《Python自動化運維技術與最佳實踐》整理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM