24.5 saltstack遠程執行命令

24.5 saltstack遠程執行命令linux

24.6 grainsios

24.7 pillarnginx

24.8 安裝配置httpdvim

24.9 配置管理文件 (分發文件)api

 

 

24.5 saltstack遠程執行命令bash

 

1.salt '*' test.ping //這裏的*表示全部已經簽名的minion端,也能夠指定一個架構

2.salt 'aming-01' test.pingdom

3.salt '*' cmd.run "hostname"函數

說明: 這裏的*必須是在master上已經被接受過認證的客戶端,能夠經過salt-key查到,一般是咱們已經設定的id值。關於這部份內容,它支持通配、列表以及正則。 好比兩臺客戶端aming-01,aming-02, 那咱們能夠寫成salt 'aming-*', salt 'aming-0[12]' salt -L 'aming-01,aming-02' salt -E 'aming-(01|02)'等形式,使用列表,即多個機器用逗號分隔,並且須要加-L,使用正則必需要帶-E選項。 它還支持grains,加-G選項,pillar 加-I選項,下面會介紹到。oop

[root@axinlinux-02 minion]# systemctl start salt-minion
[root@axinlinux-01 ~]# systemctl start salt-master
[root@axinlinux-01 ~]# systemctl start salt-minion
[root@axinlinux-01 ~]# salt-key -a axinlinux-02 
The key glob 'axinlinux-02' does not match any unaccepted keys.
[root@axinlinux-01 ~]# salt-key
Accepted Keys:
axinlinux-01
axinlinux-02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@axinlinux-01 ~]# salt '*' test.ping 測試全部機器
axinlinux-02:
    True
axinlinux-01:
    Minion did not return. [No response]
ERROR: Minions returned with non-zero exit code
[root@axinlinux-01 ~]# salt '*' cmd.run "hostname"統計各個電腦的名稱
axinlinux-02:
    axinlinux-02
axinlinux-01:
    axinlinux-01
[root@axinlinux-01 ~]# salt 'axinlinux-02' cmd.run "ip addr"也能夠指定單個主機
axinlinux-02:
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 00:0c:29:eb:b1:71 brd ff:ff:ff:ff:ff:ff
        inet 192.168.193.129/24 brd 192.168.193.255 scope global noprefixroute ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::513b:6cc5:d791:38ea/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
        inet6 fe80::79f6:2f1:99cb:9c4f/64 scope link tentative noprefixroute dadfailed 
           valid_lft forever preferred_lft forever
    3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
        link/ether 52:54:00:8d:04:55 brd ff:ff:ff:ff:ff:ff
        inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
           valid_lft forever preferred_lft forever
    4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
        link/ether 52:54:00:8d:04:55 brd ff:ff:ff:ff:ff:ff
[root@axinlinux-01 ~]# salt 'axin*' cmd.run "hostname"可匹配正則統配
axinlinux-02:
    axinlinux-02
axinlinux-01:
    axinlinux-01

24.6 grains

 

 

 

1.grains是在minion啓動時收集到的一些信息,好比操做系統類型、網卡ip、內核版本、cpu架構等。

#靜態的,不會去變動

2.salt 'aming-02' grains.ls 列出全部的grains項目名字

3.salt 'aming-02' grains.items 列出全部grains項目以及值

4.grains的信息並非動態的,並不會實時變動,它是在minion啓動時收集到的。

5.咱們能夠根據grains收集到的一些信息,作配置管理工做。

6.grains支持自定義信息。

 

saltstack – 自定義grains

1.minion上:

vim /etc/salt/grains(文件不存在) //添加:

role: nginx #至關於一個key,一個value

env: test

重啓minion服務

systemctl restart salt-minion

master上:

獲取grains:

salt '*' grains.item role env

2.能夠藉助grains的一些屬性信息來執行

salt -G role:nginx cmd.run 'hostname'

#-G針對機器上role爲nginx的機器,執行hostname命令

#那麼,若是咱們想針對一組機器執行一些命令。那麼咱們就能夠針對這一些機器定義一個自定義的grains,而後用-G來執行

[root@axinlinux-01 ~]# salt 'axinlinux-02' grains.ls 僅列出項目名字
axinlinux-02:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - disks
    - dns
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
[root@axinlinux-01 ~]# salt 'axinlinux-02' grains.items 列出項目的名字和值,數據等等

這裏數據能夠作一個資產管理系統

axinlinux-02:
    ----------
    SSDs:
    biosreleasedate:
        07/02/2015
    biosversion:
        6.00
    cpu_flags:
        - fpu
        - vme
        - de
        - pse
        - tsc
        - msr
        - pae
        - mce
        - cx8
        - apic
        - sep
        - mtrr
        - pge
        - mca
        - cmov
        - pat
        - pse36
        - clflush
        - dts
        - mmx
        - fxsr
        - sse
        - sse2
        - ss
        - syscall
        - nx
        - pdpe1gb
        - rdtscp
        - lm
        - constant_tsc
        - arch_perfmon
        - pebs
        - bts
        - nopl
        - xtopology
        - tsc_reliable
        - nonstop_tsc
        - aperfmperf
        - eagerfpu
        - pni
        - pclmulqdq
        - ssse3
        - fma
        - cx16
        - pcid
        - sse4_1
        - sse4_2
        - x2apic
        - movbe
        - popcnt
        - tsc_deadline_timer
        - aes
        - xsave
        - avx
        - f16c
        - rdrand
        - hypervisor
        - lahf_lm
        - abm
        - 3dnowprefetch
        - epb
        - fsgsbase
        - tsc_adjust
        - bmi1
        - avx2
        - smep
        - bmi2
        - invpcid
        - rdseed
        - adx
        - smap
        - xsaveopt
        - dtherm
        - ida
        - arat
        - pln
        - pts
        - hwp
        - hwp_notify
        - hwp_act_window
        - hwp_epp
    cpu_model:
        Intel(R) Core(TM) i5-6200U CPU @ 2.30GHz
    cpuarch:
        x86_64
    disks:
        - sda
        - sr0
    dns:
        ----------
        domain:
        ip4_nameservers:
            - 202.106.0.20
        ip6_nameservers:
        nameservers:
            - 202.106.0.20
        options:
        search:
        sortlist:
    domain:
    fqdn:
        axinlinux-02
    fqdn_ip4:
        - 192.168.193.129
    fqdn_ip6:
        - fe80::513b:6cc5:d791:38ea
        - fe80::79f6:2f1:99cb:9c4f
    fqdns:
    gid:
        0
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              vmware
    groupname:
        root
    host:
        axinlinux-02
    hwaddr_interfaces:
        ----------
        ens33:
            00:0c:29:eb:b1:71
        lo:
            00:00:00:00:00:00
        virbr0:
            52:54:00:8d:04:55
        virbr0-nic:
            52:54:00:8d:04:55
    id:
        axinlinux-02
    init:
        systemd
    ip4_gw:
        192.168.193.2
[root@axinlinux-02 ~]# vim /etc/salt/grains
role: nginx#注意冒號後面空格

env: test

[root@axinlinux-02 ~]# systemctl start salt-minion
[root@axinlinux-02 ~]# systemctl restart salt-minion
[root@axinlinux-01 ~]# salt '*' grains.item role env#這樣就會看到咱們剛纔設置的key和value
axinlinux-02:
    ----------
    env:
        test
    role:
        nginx
axinlinux-01:
    ----------
    env:
    role:

24.7 pillar

 

 

 

1.pillar和grains不同,是在master上定義的,而且是針對minion定義的一些信息。像一些比較重要的數據(密碼)能夠存在pillar裏,還能夠定義變量等。

2.配置自定義pillar

vim /etc/salt/master

找到以下配置://去掉前面的警號

pillar_roots:

base: #此行前面有兩個空格

- /srv/pillar #此行前面有4個空格

3.mkdir /srv/pillar

4.vim /srv/pillar/test.sls(salt的配置文件,後綴名爲sls) //內容以下

conf: /etc/123.conf

5.vi /srv/pillar/top.sls //內容以下

base:

'aming-02': #此行前面有兩個空格(針對那些機器,主機名)

- test #此行前面有4個空格(test表示的是這個目錄下的test.sls)。若是寫多個能夠在下面寫test1等等

6.重啓master,修改/etc/salt/master文件才從新。寫test.sls和top.sls的是不須要重啓

systemctl restart salt-master

7.當更改完pillar配置文件後,咱們能夠經過刷新pillar配置來獲取新的pillar狀態:

salt '*' saltutil.refresh_pillar

驗證:salt '*' pillar.item conf

8.pillar一樣能夠用來做爲salt的匹配對象。好比 salt -I 'conf:/etc/123.conf' test.ping

#pillar匹配的時候用的是-I(大寫的i)。grains匹配的時候用的是-G(大寫的g)

 

 

兩個東西(grains和pillar)側重點不同。pillar在服務端上定義,能夠劃分客戶端,而grains倒是在客戶端上收集信息的,這個能夠在初始化系統的時候就設定好。

所謂初始化系統,你能夠認爲用通用的模板安裝系統,或者用通用的初始化腳本去執行一些配置,總之很容易作到。

vim /etc/salt/master
找到以下配置://去掉前面的警號

pillar_roots:

base: #此行前面有兩個空格

- /srv/pillar #此行前面有4個空格
[root@axinlinux-01 ~]# systemctl restart salt-master只有在修改/etc/salt/master文件的時候,才重啓服務
[root@axinlinux-01 ~]# ls /srv/pillar

ls: 沒法訪問/srv/pillar: 沒有那個文件或目錄
[root@axinlinux-01 ~]# mkdir /srv/pillar

[root@axinlinux-01 ~]# cd /srv/pillar/

[root@axinlinux-01 pillar]# #vim test.sls

conf: /etc/123.conf #冒號後面有個空格。跟定義grains的時候同樣的格式

[root@axinlinux-01 pillar]# vim top.sls

base:

'aming-02':

- test #這個test表示的是這個目錄下的test.sls文件

[root@axinlinux-01 pillar]# ls

test.sls top.sls

下面咱們在來寫多個

[root@axinlinux-01 pillar]# vim test2.sls

dir: /data/123.conf #寫個dir的,爲test2

[root@axinlinux-01 pillar]# vim top.sls #top.sls也要改一下

base:

'axinlinux-02':

- test

'axinlinux-01': #能夠這樣寫,02是test。01是test2

- test2 #test2對應的就是上面建立的test2文件

[root@axinlinux-01 pillar]# salt '*' saltutil.refresh_pillar #刷新一下。不須要重啓

axinlinux-02:

True

axinlinux-01:

True

[root@axinlinux-01 pillar]# salt '*' saltutil.refresh_pillar #刷新一下。不須要重啓

axinlinux-02:

True

axinlinux-01:

True

[root@axinlinux-01 pillar]# salt '*' pillar.item conf dir #查看一下就有了

axinlinux-02:

----------

conf:

/etc/123.conf

dir:

axinlinux-01:

----------

conf:

dir:

/data/123.conf

[root@axinlinux-01 pillar]# salt -I 'conf:/etc/123.conf' cmd.run "w" #匹配conf:/etc/123.conf的機器,執行w命令

axinlinux-02:

15:28:50 up 5:02, 1 user, load average: 0.03, 0.03, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 192.168.208.1 10:31 28:58 0.19s 0.19s -bash

???

24.8 安裝配置httpd

 

 

使用saltstack安裝httpd

1.master上 vi /etc/salt/master //搜索找到file_roots

打開以下內容的註釋:(刪掉#號)

file_roots:

base: #前面有兩個空格

- /srv/salt #前面有4個空格

#意思是找到他的根目錄,就是/srv/salt爲他的總入口,在這個目錄裏配置文件

2.mkdir /srv/salt ; cd /srv/salt

3.vi /srv/salt/top.sls //加入以下內容

base:

'*': #前面有兩個空格(*表示全部的機器,也能夠寫單獨的)

- httpd #前面有4個空格(也就是說還要建立一個httpd.sls的文件)

意思是,在全部的客戶端上執行httpd模塊

4.重啓 systemctl restart salt-master

5.master上vi /srv/salt/httpd.sls //加入以下內容,這個就是httpd模塊的內容

httpd-service: #定義配置或者服務的名字

pkg.installed: #salt內置的一個模塊,相似於cmd.run

- names: //就是你要安裝包的名字。

- httpd

- httpd-devel

service.running: #也是salt的一個模塊,用來啓動某一個服務的

- name: httpd #這裏也就是啓動httpd這個服務(/lib/systemd/system/目錄下的服務名字)

- enable: True #表示要啓動,若是是false就是關閉

說明: httpd-service是id的名字,自定義的。pkg.installed 爲包安裝函數,下面是要安裝的包的名字。service.running也是一個函數,來保證指定的服務啓動,enable表示開機啓動。

6.執行: salt 'aming-02' state.highstate

//執行過程會比較慢,由於客戶端上在yum install httpd httpd-devel。也能夠爲 '*' ,所有機器都安裝

#只要執行state.highstate,就會在/src/salt目錄下找top.sls文件,裏面相關的模塊都會去執行

[root@axinlinux-01 ~]# vim /etc/salt/master

file_roots: #注意空格

base:

- /srv/salt/

[root@axinlinux-01 ~]# systemctl restart salt-master

[root@axinlinux-01 ~]# mkdir /srv/salt

[root@axinlinux-01 ~]# cd /srv/salt/

[root@axinlinux-01 salt]# vim top.sls

base: #同樣注意空格

'*':

- httpd

[root@axinlinux-01 salt]# vim httpd.sls

httpd-service:

  pkg.installed:兩個空格

    - names:四個空格

      - httpd六個空格

      - httpd-devel六個空格

service.running:

    - name: httpd四個空格

    - enable: True四個空格

[root@axinlinux-01 salt]# ls /lib/systemd/system #這個,目錄下的服務的名字就是上面 - name: httpd,httpd的名字

[root@axinlinux-01 salt]# salt '*' state.highstate #由於安裝的是nginx,因此機器上要關閉nginx

24.9 配置管理文件

 

 

 

將master上的模板或是文件吧,分發到minion

1.master上vi /srv/salt/test.sls //加入以下內容

file_test:

  file.managed: #(用到salt的模塊)

    - name: /tmp/aminglinux.com #分發到minion上的路徑,也就是放到minion哪

    - source: salt://test/123/1.txt #也就是來源文件,master上的,從哪裏拷貝

    - user: root #屬主

    - group: root #屬組

    - mode: 600 #權限

說明:第一行的file_test爲自定的名字,表示該配置段的名字,能夠在別的配置段中引用它,source指定文件從哪裏拷貝,這裏的salt://test/123/1.txt至關因而/srv/salt/test/123/1.txt(master上/etc/sala/msater配置文件裏的file_roots定義的)

2.mkdir /srv/salt/test/123

#上面定義了source: salt://test/123/1.txt,因此要在/srv/salt下建立test和123目錄

3.cp /etc/passwd /srv/salt/test/123/1.txt

vi /srv/salt/top.sls //改成以下內容

base:

'*':

- test

4.執行: salt 'aming-02' state.highstate

5.檢查aming-02上是否有/tmp/aminglinux.com,檢查內容以及權限

實例:

[root@axinlinux-01 salt]# vim test.sls

file_test:

file.managed:

- name: /tmp/aminglinux.com

- source: salt://test/123/1.txt #salt;//表明的是/etc/salt/master文件裏file_roots定義的/src/salt、因此這裏的額路徑是/src/salt/test/123/1.txt

- user: root

- group: root

- mode: 600

[root@axinlinux-01 salt]# mkdir test

[root@axinlinux-01 salt]# cd test/

[root@axinlinux-01 test]# mkdir 123

[root@axinlinux-01 test]# cd 123/

[root@axinlinux-01 123]# cp /etc/inittab ./1.txt #拷貝個文件過來,做爲測試

[root@axinlinux-01 123]# ls

1.txt

[root@axinlinux-01 123]# vim /srv/salt/top.sls #修改一下他的總入口爲test

base:

'*':

- test

[root@axinlinux-01 123]# salt 'axinlinux-02' state.highstate

[root@axinlinux-02 ~]# ls -lt /tmp/aminglinux.com #回到minion上查看一下

-rw------- 1 root root 511 12月 7 17:37 /tmp/aminglinux.com

[root@axinlinux-02 ~]# cat !$

cat /tmp/aminglinux.com
相關文章
相關標籤/搜索