saltstack 的日常使用(一)

更多關注:http://www.mknight.cn/

安裝

yum install salt-master
or
yum install salt-minion

啟動

systemctl start salt-master
or
/etc/init.d/salt-master start

基本命令

salt-key

salt-key命令用來管理master上所有的密鑰的;列出master上的密鑰:

salt-key -L

salt-key -a 接受一個minion的認證

salt-key -a minion.saltstack.com

接受所有未驗證的鑰匙

salt-key -A

test.ping確認一個minion是否連接正常

salt '*' test.ping

是指向所有minions的目標。
test.ping告訴minion運行test.ping函數。
運行這條命令的結果將會是master指示所有的minions并行執行test.ping并返回結果。
這不是真正的ICMP ping,而是一個簡單的函數返回True。使用test.ping是確認一個minion是否連接正常

disk.usage

salt '*' disk.usage

network.interfaces

salt '*' network.interfaces

cmd.run

使用cmd.run遠程執行命令,cmd是模塊,run是cmd模塊的一個方法

salt '*' cmd.run 'df -h'

查看hosts

salt '*' cmd.run "grep salt /etc/hosts"
mq:
    192.168.1.31 salt
owncloud:
    192.168.1.31    salt
docker:
    192.168.1.31 salt
dev.db:
    192.168.1.31 salt

批量修改hosts

salt '*' cmd.run "sed -i 's/192.168.1.30/192.168.1.31/' /etc/hosts"

pkg

pkg 函數會自動將本地系統包管理器映射到相同的salt函數。這意味著 pkg.install 在基于Red Hat系統上將使用 yum 而在Debian系統上則使用 apt 來安裝包,等等。

 salt 'salt-minion' pkg.install vim

匹配主機

  • 普通匹配
匹配所有 '*'
匹配單個  'minion_id'
  • 正則匹配
    使用-E ,--pcre 進行正則匹配
salt -E '^stack-node\w+'  cmd.run "free -m"

返回結果:

stack-node01:

                 total       used       free     shared    buffers     cached

    Mem:          1877        377       1499          0         27        223

    -/+ buffers/cache:        126       1751

    Swap:         4095          0       4095

stack-node02:

                 total       used       free     shared    buffers     cached

    Mem:          1877        377       1499          0         28        223

    -/+ buffers/cache:        125       1751

    Swap:         4095          0       4095
  • 列表匹配
    -L,--list,以主機id名列表的形式進行過濾,格式與Python的列表相似,即不同主機id 名稱使用逗號分隔
[root@stack-master ~]# salt -L 'stack-node01,stack-node02'  cmd.run "free -m"

stack-node02:

                 total       used       free     shared    buffers     cached

    Mem:          1877        376       1501          0         28        223

    -/+ buffers/cache:        123       1753

    Swap:         4095          0       4095

stack-node01:

                 total       used       free     shared    buffers     cached

    Mem:          1877        378       1499          0         28        223

    -/+ buffers/cache:        126       1751

    Swap:         4095          0       4095
  • IP匹配
    -S,--ipcidr,根據被控主機的IP地址或IP子網進行匹配
[root@stack-master ~]# salt -S 172.16.202.0/24  cmd.run "free -m"

stack-master:

                 total       used       free     shared    buffers     cached

    Mem:          1877        676       1201          0         30        225

    -/+ buffers/cache:        420       1457

    Swap:         4095          0       4095

stack-node01:

                 total       used       free     shared    buffers     cached

    Mem:          1877        378       1498          0         28        223

    -/+ buffers/cache:        126       1751

    Swap:         4095          0       4095

stack-node02:

                 total       used       free     shared    buffers     cached

    Mem:          1877        376       1500          0         28        223

    -/+ buffers/cache:        123       1753

    Swap:         4095          0       4095

配置管理

SLS(代表SaLt State文件)是Salt State系統的核心。SLS描述了系統的目標狀態,由格式簡單的數據構成。這經常被稱作配置管理。

top.sls

top.sls 是配置管理的入口文件,一切都是從這里開始,在master 主機上,默認存放在/srv/salt/目錄.
top.sls 默認從 base 標簽開始解析執行,下一級是操作的目標,可以通過正則,grain模塊,或分組名,來進行匹配,再下一級是要執行的state文件,不包換擴展名。
創建 /srv/salt/top.sls

#正則匹配
base:
  '*':
    - webserver
#組匹配
base:
  group1:
    - match: nodegroup
    - webserver
#grain匹配,必須要有- match: grain
base:
  'os:Fedora':
    - match: grain
    - webserver

準備好top.sls文件后,編寫一個state文件

#/srv/salt/webserver.sls
apache:                 # 標簽定義
  pkg:                  # state declaration
    - installed         # function declaration
  • 第一行被稱為(ID declaration) 標簽定義,在這里被定義為安裝包的名。注意:在不同發行版軟件包命名不同,比如 fedora 中叫httpd的包 Debian/Ubuntu中叫apache2
  • 第二行被稱為(state declaration)狀態定義, 在這里定義使用(pkg state module)
  • 第三行被稱為(function declaration)函數定義, 在這里定義使用(pkg state module)調用 installed 函數

最后可以在終端中執行命令來查看結果:

salt '*' state.highstate

或附件 test=True參數 測試執行

salt '*' state.highstate -v test=True

主控端對目標主機(targeted minions)發出指令運行state.highstatem模塊,目標主機首先會對top.sls下載,解析,然后按照top.sls內匹配規則內的定義的模塊將被下載,解析,執行,然后結果反饋給 master.

SLS文件

注意在以上的例子中,SLS文件 webserver.sls 被簡稱為webserver. SLS文件命名空間有如下幾條基本的規則:

1、SLS文件的擴展名 .sls 被省略。 (例如. webserver.sls 變成 webserver)
2、子目錄可以更好的組織,每個子目錄都由一個點來表示.(例如 webserver/dev.sls 可以簡稱為 webserver.dev)
3、如果子目錄創建一個init.sls的文件,引用的時候僅指定該目錄即可. (例如 webserver/init.sls 可以簡稱為 webserver)
4、如果一個目錄下同時存在webserver.sls 和 webserver/init.sls,那么 webserver/init.sls 將被忽略,SLS文件引用的webserver將只引用webserver.sls
示例:

apache/init.sls
apache/httpd.conf
ssh/init.sls
ssh/server.sls
ssh/banner
ssh/ssh_config
ssh/sshd_config

創建一個引用這些目錄的 server.sls

server:
  - apache
  - ssh
  - ...

state的層級關系

include

include 包含某個state文件
/srv/salt/apache.sls

apache:
  pkg:
    - installed
  service:
    - running
    - require:
      - pkg: apache

使用 include 可以包換有state文件而不必重新寫
/srv/salt/apache-custom.sls

include:
  apache

extend

extend 與include配合使用,作用是 修改,或擴展引用的state文件的某個字段
/srv/salt/apache.sls

apache:
  pkg:
    - installed
  service:
    - running
    - require:
      - pkg: apache

extend默認是替換引用文件的某個字段的屬性,簡單說就是先加載,再修改部分字段。如例
/srv/salt/apache-change.sls

include:
  - apache
extend:
  apache
    pkg:
      - name: vim
      - installed

當extend與watch,或require結合使用的時候,則是擴展某個字段的屬性。如例:
/srv/salt/apache-custom.sls

include:
  - apache
extend:
  apache
    service:
      - watch:
        - file: /etc/redis.conf

state的邏輯關系列表

match: 配模某個模塊,比如 match: grain match: nodegroup
require: 依賴某個state,在運行此state前,先運行依賴的state,依賴可以有多個
watch: 在某個state變化時運行此模塊
order: 優先級比require和watch低,有order指定的state比沒有order指定的優先級高

state的邏輯關系實例

require:依賴某個state,在運行此state前,先運行依賴的state,依賴可以有多個.
先檢查依賴,再運行其他。

httpd:                                  # maps to "name"
  pkg:
    - installed
  file:                                # maps to State module  filename
    - managed:                          # maps to the managed function in the file State module
    - name: /etc/httpd/conf/httpd.conf  # one of many options passed to the manage function
    - source: salt://httpd/httpd.conf
    - require:
      - pkg: httpd

watch:在某個state變化時運行此模塊,watch除具備require功能外,還增了關注狀態的功能。檢查是否有變化為前提條件。

redis:
  pkg:
    - latest
  file.managed:
    - source: salt://redis/redis.conf
    - name: /etc/redis.conf
    - require:
      - pkg: redis
  service.running:
    - enable: True
    - watch:
      - file: /etc/redis.conf
      - pkg: redis

order:優先級比require和watch低,有order指定的state比沒有order指定的優先級高

vim:
  pkg.installed:
    - order: 1

想讓某個state最后一個運行,可以用last.

環境變量

示例:

file_roots:
  base:
    - /srv/salt/
  dev:
    - /srv/salt/dev/services
    - /srv/salt/dev/states
   prod:
     - /srv/salt/prod/services
     - /srv/salt/prod/states

state.sls默認的運行環境是base環境,但是它并不讀取top.sls(top.sls定義了運行環境以及需要運行的sls)。關于state.sls的官方文檔說明如下:

salt.modules.state.sls(mods, saltenv='base', test=None, exclude=None, queue=False, env=None,**kwargs)

這里saltenv指的是運行環境,默認是base環境。

state.highstate: 這個是全局的所有環境,以及所有狀態都生效。它會讀取每一個環境的top.sls,并且對所有sls都生效。

state.sls也可以指定讀取哪個環境:

state.sls  salt_env='prod' xxxx.sls

這個xxxx.sls可以不在top.sls中記錄。

模板

使用模板可以精簡sls,使sls文件可以使用Python的循環,判斷等邏輯。
示例:

{% for item in ['tmp','test'] %}
/opt/{{ item }}:
  file.directory:
    - user: root
    - group: root
    - mode: 755
    - makedirs: True
{% endfor %}
httpd:
  pkg.managed:
{% if grains['os'] == 'Ubuntu' %}
    - name: apache2
{% elif grains['os'] == 'CentOS' %}
    - name: httpd
{% endif %}
    - installed

使用的步驟比較簡單:
1.File狀態使用template參數 - template: jiaja
2.模板文件里面使用{{名稱}}
3.File狀態模塊要指定變量列表

- defaults:
  PORT:8080

示例:

[root@linux-node1 base]# cd /srv/salt/base/
[root@linux-node1 base]# vim dns.sls
/etc/resolv.conf:
  file.managed:
    - source: salt://files/resolv.conf
    - user: root
    - group: root
    - mode: 644
    - template: jinja
    - defaults:
      DNS_SERVER: 10.0.0.2
[root@linux-node1 base]# vim files/resolv.conf
###hehe
nameserver {{ DNS_SERVER }}
[root@linux-node1 base]# salt '*' state.highstate

語法

YAML語法

規則一:縮進

YAML使用一個固定的縮進風格表示數據層結構關系,Saltstack需要每個縮進級別由兩個空格組成。一定不能使用tab鍵

規則二:冒號

YAML:
mykey: my_value
每個冒號后面一定要有一個空格(以冒號結尾不需要空格,表示文件路徑的模版可以不需要空格)

規則三:短橫線

想要表示列表項,使用一個短橫杠加一個空格。多個項使用同樣的縮進級別作為同一個列表的一部分。

my_dictionary:
  - list_value_one
  - list_value_two
  - list_value_three

更多關注:http://www.mknight.cn/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 學習地址[http://tech.mainwise.cn/?p=438] 更新于 3.25 23:16 salt簡...
    J書越來越垃圾了閱讀 30,912評論 9 36
  • 本文參考:Saltstack SLS文件解讀 前言:state是salt最核心的功能,通過預先制定好的sls文件對...
    擼大師閱讀 2,336評論 0 2
  • 西藏是我一直以來的夢想。趁著假期終于可以去西藏完成夢想了!喜歡西藏的朋友可以關注我。隨我一起去感受西藏的無限風光!...
    孫家二小姐閱讀 574評論 0 1
  • 有時候人會突然傷悲,不是因為倒了一霉,而且悲傷就這么來了。 那顆柔軟的心啊,就像激流中的一顆小石頭,被流水無情的撥...
    你當時咋想的閱讀 799評論 0 0
  • 小湯姆望著月亮,問:為什么月亮缺了一角?滿是蛀牙的湯姆叔叔說,月亮也許糖吃多了,她甜蜜過了頭,蛀牙把她咬了一口,那...
    拂曉的星閱讀 180評論 0 0