saltstack從簡單到入門詳解(二)

6、grains使用以及cmd.runnode

grains.items主要用來收集minion端的信息,方便進行信息採集,後續的pillar使用,根據硬件信息自動匹配配置文件等,基本用法:shell

#salt 「*」 grains.ls            #顯示全部minionitem安全

#salt 「*」 grains.items         #顯示全部minionitemsession

#salt 「*」 grains.item osshell   #顯示os的相關信息,若是多個item,用空格分隔ssh

除了salt自帶的items能夠獲取到系統信息以外,咱們還可使用shell命令,咱們能夠藉助salt另外一個強大的命令:cmd.run,假如咱們須要獲取minion端的內存信息ide

#salt 「*」 cmd.run 「free-m」ui

若是想要在minions執行腳本程序,可使用cmd.script命令加密

#salt 「*」 cmd.scriptsalt://test.shspa

其中salt://test.sh是腳本的存放路徑操作系統

7、states文件

salt states的核心是sls文件,該文件使用YAML語法定義了一些K/V的數據,sls文件存放路徑在master配置文件中定義,默認爲/srv/salt,若是目錄不存在,則手動建立,在salt中能夠經過salt://代替根路徑,例如,能夠經過salt://top.sls訪問/srv/salt/top.sls,在statestop文件也由master配置文件定義,默認爲top.sls,該文件爲states的入口文件。

一個簡單的top.sls文件以下

base:

"*":              #匹配全部minion主機

-  httpd        #定義state.sls的名字

minion:           #經過分組名匹配,必需要定義match:nodegroup

-  match:nodegroup

-  httpd

"os:CentOS":       #經過grains模塊匹配,必需要定義match:grain

-  match:grain

-  httpd

接下來咱們就能夠編寫httpd.sls文件了(注意每行的縮進和空格,縮進爲2個空格,冒號後面一個空格)

httpd:                #ID說明,表示能夠被操做的名字

  pkg:                #包管理

    - name: httpd      #包的名稱

- installed         #包的狀態(installed:安裝;remove:卸載)

  service:             #服務管理

    - name: httpd      #服務名稱

- running          #服務狀態

- reload: True      #是否容許reload

- require:          #依賴關係

  - pkg: httpd

- watch:            #監測是否發生改變

  - file:/etc/httpd/conf/httpd.conf

/etc/httpd/conf/httpd.conf:  #定義文件

  file:

    - managed            #文件管理

- source: salt://httpd.conf          #源文件路徑

- user: root                     #文件屬主

- group: root                   #文件屬組

- mode: 644                  #文件權限

- backup: minion              #更改前備份

強制執行下httpd.sls

[root@master salt]# salt"*" state.sls httpd

state的邏輯關係:

include   包含某個文件,例如,我新建一個test.sls,就能夠繼承httpd相關配置而沒必要從新編寫

match    匹配某個模塊 ,好比 以前定義top.sls時候的 match:grain match: nodegroup

require   依賴某個state,在運行此state前,先運行依賴的state,依賴能夠有多個 好比文中的httpd模塊內,相關的配置必需要先依賴httpd的安裝

watch   在某個state變化時運行此模塊,文中的配置,相關文件變化後,當即執行相應操做

order     優先級比requirewatch低,有order指定的state比沒有order指定的優先級高

8、pillar的定義及使用

PillarSalt很是重要的一個組件,它用於給特定的minion定義任何你須要的數據,這些數據能夠被Salt的其餘組件使用。這裏能夠看出Pillar的一個特色,Pillar數據是與特定minion關聯的,也就是說每個minion都只能看到本身的數據,因此Pillar能夠用來傳遞敏感數據(在Salt的設計中,Pillar使用獨立的加密session,也是爲了保證敏感數據的安全性)。另外還能夠在Pillar中處理平臺差別性,好比針對不一樣的操做系統設置軟件包的名字,而後在State中引用等。

默認狀況下,master配置文件中的全部數據都添加到pillar中,且對全部minion可用,在master的配置文件中咱們須要配置下,若是/srv/pillar目錄不存在則手動建立,state同樣,pillar也是須要一個top.sls文件做爲一個入口,用來指定對象,配置方式與state同樣

編輯top.sls文件

base:

  "*":

    - test

編輯test.sls文件

test_path: "salt://httpd.conf"

test_user: root

test_group: root

能夠在state文件中引用pillar數據

/etc/httpd/conf/httpd.conf:

  file:

    - managed

    - source: {{ pillar['test_path'] }}

    - user: {{ pillar['test_user'] }}

    - group: {{ pillar['test_group'] }}

咱們還能夠在pillar中加入判斷條件,這裏就很少說了,

更多高級用法請參考官網文檔中文地址:http://docs.saltstack.cn/zh_CN/latest/

相關文章
相關標籤/搜索