Saltstack學習筆記——states篇(上)

Salt使用PyAMl語法(http://pyyaml.org) 作為它的模板文件的格式,但是其他很多模板語言在Salt中是可以使用的。一定要按照正確的格式書寫YAML,比如它使用到兩個空格代替tab。如果YAML文件出現(xiàn)不可預知的錯誤,你可以使用一個在線的debug工具(http://yaml-online-parser.appspot.com )。

1.啟動配置管理

在啟動配置管理功能之前,你需要再一次編輯你的master配置文件,在/etc/salt下。打開master配置文件,找到file_roots行,缺省配置文件中,這一行在第156行。現(xiàn)在,取消注釋即刪除#號,配置如下:

file_roots:
  base:
    - /srv/salt

這樣子就可以告訴Salt你的配置管理文件在哪里。根據(jù)你是如何安裝Salt,有時你需要自己創(chuàng)建/srv/salt目錄

2.創(chuàng)建Top文件/Roadmap

基礎(chǔ)配置文件也叫做Top文件,在/srv/salt目錄下。我們來創(chuàng)建這個文件。這個文件提供了其它文件的映射??梢杂糜谧鳛槠渌掌鞯幕A(chǔ)配置文件。在/srv/salt目錄創(chuàng)建一個top.sls文件。你可以把它作為指向不同目錄的路線圖。在top.sls中加入以下內(nèi)容:

base:
  '*':
    - webserver

這個top.sls文件是用來分隔環(huán)境的。默認環(huán)境是base,在base的環(huán)境集合定義了對minions的匹配,可以使用簡單的*來指定所有的主機。

你也可以指定minions
salt可以通過glob、pcre正則表達式,或者通過grains來進行匹配任何的目標機器,例如:

base:
  '192.168.181.17':
    - match: grain
    - webserver

在top.sls相同的目錄下,創(chuàng)建一個名為webserver.sls的空文件,內(nèi)容如下:

httpd:                # ID的聲明
  pkg:               # state類型的聲明
    - installed       # state中的函數(shù)聲明

第1行,是對全局ID的聲明,可以是任意的標識符,本例是需要被安裝的軟件包的包名。

以Apache HTTP server為例,在基于apatitude的包管理中叫做apache2,而在基于yum的包管理中叫做httpd。確保針對包管理工具使用正確的名字。也可以使用Salt的grains進行包管理

第2和第3行告訴Salt如何處理這個包,本例是安裝這個包。要刪除一個包,你只需要修改'- installed'為'-removed'即可。

記住,空格很重要!第二行'pkg:'前有兩個空格,第三行'-
installed'前有四個空格。如果遇到任何錯誤,請通過在線YAML解析器檢查語法。

接下來運行我們創(chuàng)建的state,在master上打開一個終端并且運行一下命令:

salt '*' state.highstate

片刻后,從服務會反饋像如下成功的信息:

192.168.181.17:
----------
      ID: httpd
Function: pkg.installed
  Result: True
 Comment: The following packages were installed/updated: httpd.
 Started: 22:37:19.968357
Duration: 16922.03 ms
 Changes:   
          ----------
          apr-util-ldap:
              ----------
              new:
                  1.3.9-3.el6_0.1
              old:
                  
          httpd:
              ----------
              new:
                  2.2.15-39.el6.centos
              old:
                  
          httpd-tools:
              ----------
              new:
                  2.2.15-39.el6.centos
              old:
                  
          mailcap:
              ----------
              new:
                  2.1.31-2.el6
              old:
Summary
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1

master將會指導所有的目標minions運行state.highstate。
當minion執(zhí)行highstate,它將會下載top文件中匹配的內(nèi)容,minion將表達式中匹配的內(nèi)容下載、編譯、執(zhí)行。
一旦完成,minion將返回所有的動作執(zhí)行結(jié)果和所有更改。

接下來我們來回顧下之前配置好的top.sls:

base:
  '192.168.181.17':
    - match: grain
    - webserver

這個例子中,webserver.sls文件可以簡單的寫作webserver。這個sls文件名稱空間遵循一些簡單的規(guī)則:

  1. 這個.sls可以被省略,例如webserver.sls可以被稱謂webserver
  2. 子目錄可以更好的組織
    a. 每個子目錄都代表一個點
    b. webserver/dev.sls可以寫作webserver.dev
  3. 在子目錄的存在一個名為init.sls文件,所以webserver/init.sls也可以簡寫為webserver
  4. 如果webserver.sls和webserver/init.sls同時存在,那么webserver/init.sls將會被忽略,并且webserver.sls將會被成為webserver

3.Troubleshooting

如果輸出的內(nèi)容不是你所預期的,以下的建議可以幫助你縮小問題。

啟用日志記錄
當你啟用日志的debug模式,salt輸出的信息將會很全

salt-minion -l debug

前臺運行minion
不使用daemon模式(-d)啟動minion,可以從輸出看到其工作的任何細節(jié)

salt-minion &

增加salt運行的默認超時時間,例如,修改默認超時時間為60s:

salt -t 60

為了更好的達到這三個效果:

# 在minion上運行
salt-minion -l debug & 
# 在master上運行
salt '*' state.highstate -t 60 

使用測試模式:

salt '*' state.highstate -t 60 test=True
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容