1. 程式人生 > >第三十九課預習任務

第三十九課預習任務

1.grains

1.2 saltstack – 自定義grains

2.pillar

3.安裝配置httpd

4.配置管理檔案

5.配置管理目錄

6.配置管理遠端命令

7.配置管理計劃任務

8.saltstack – 其它可能會用到的命令

9.salt-ssh使用


1.grains

grains是在minion啟動時收集到的一些資訊,比如作業系統型別、網絡卡ip、核心版本、cpu架構等。

//列出所有的grains專案名字
[[email protected] ~]# salt 'knightlai02' grains.ls
knightlai02:
    - SSDs
    - biosreleasedate
    - biosversion
    - cpu_flags
    - cpu_model
    - cpuarch
    - disks
    - dns
    - domain
    - fqdn
    - fqdn_ip4
    - fqdn_ip6
    - gid
    - gpus
    - groupname
    - host
    - hwaddr_interfaces
    - id
    - init
    - ip4_gw
    - ip4_interfaces
    - ip6_gw
    - ip6_interfaces
    - ip_gw
    - ip_interfaces

salt 'knightlai02' grains.items 列出所有grains專案以及值

//列出所有grains專案以及值
[[email protected] ~]# salt 'knightlai02' grains.items
knightlai02:
    ----------
    SSDs:
    biosreleasedate:
        07/02/2015
    biosversion:
        6.00
..................................................
cpu_model:
        Intel(R) Core(TM) i3-4170 CPU @ 3.70GHz
    cpuarch:
        x86_64
    disks:
        - sda
        - sr0
    dns:
        ----------
        domain:
        ip4_nameservers:
            - 192.168.139.1
        ip6_nameservers:
        nameservers:
            - 192.168.139.1
        options:
        search:
        sortlist:
  • grains的資訊並不是動態的,並不會實時變更,它是在minion啟動時收集到的。  
  • 我們可以根據grains收集到的一些資訊,做配置管理工作。  
  • grains支援自定義資訊。

1.2 saltstack – 自定義grains

 

 master上:

[[email protected] ~]# salt '*' grains.item role env
knightlai02:
    ----------
    env:
        test
    role:
        nginx
knightlai01:
    ----------
    env:
    role:

//可以藉助grains的一些屬性資訊來執行
[[email protected] ~]# salt -G role:nginx cmd.run 'hostname'
knightlai02:
    knightlai02

2.pillar

pillar和grains不一樣,是在master上定義的,並且是針對minion定義的一些資訊。像一些比較重要的資料(密碼)可以存在pillar裡,還可以定義變數等。

//配置自定義pillar
//找到如下配置://去掉前面的警號
[[email protected] ~]# vim /etc/salt/master
pillar_roots:
  base:  #此行前面有兩個空格
    - /srv/pillar #此行前面有4個空格


vim /srv/pillar/test.sls  //內容如下
 conf: /etc/123.conf

vi /srv/pillar/top.sls  //內容如下
base:
  'knightlai02': #此行前面有兩個空格
    - test #此行前面有4個空格

配置pillar

[[email protected] ~]# salt '*' saltutil.refresh_pillar
knightlai02:
    True
knightlai01:
    True
[[email protected] ~]# salt  '*' pillar.item conf
knightlai02:
    ----------
    conf:
knightlai01:
    ----------
    conf:

pillar同樣可以用來作為salt的匹配物件。

[[email protected] ~]# salt  -I 'conf:/etc/123.conf' 
Usage: salt [options] '<target>' <function> [arguments]

Salt allows for commands to be executed across a swath of remote systems in
parallel, so they can be both controlled and queried with ease.

Options:
  --version             show program's version number and exit
  -V, --versions-report
                        Show program's dependencies version number and exit.
  -h, --help            show this help message and exit
  --saltfile=SALTFILE   Specify the path to a Saltfile. If not passed, one
                        will be searched for in the current working directory.
  -c CONFIG_DIR, --config-dir=CONFIG_DIR
                        Pass in an alternative configuration directory.
                        Default: '/etc/salt'.
  -t TIMEOUT, --timeout=TIMEOUT
..............................................................................

3.安裝配置httpd

master上file_roots:  

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

[[email protected] ~]# vi /etc/salt/master 
//開啟如下內容的註釋:
file_roots:
   base:
     - /srv/salt/

[[email protected] ~]# mkdir  /srv/salt
[[email protected] ~]# cd /srv/salt
[[email protected] salt]# vi /srv/salt/top.sls
base:
  '*':  #前面有兩個空格
    - httpd #前面有4個空格


意思是,在所有的客戶端上執行httpd模組

重啟 systemctl restart salt-master

saltstack – 安裝配置httpd

master上vi /srv/salt/httpd.sls  //加入如下內容,這個就是httpd模組的內容
httpd-service:
  pkg.installed:
    - names:    //這裡如果只有一個服務,那麼就可以寫成 –name: httpd 不用再換一行了。
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
 說明: httpd-service是id的名字,自定義的。pkg.installed 為包安裝函式,下面是要安裝的包的名字。service.running也是一個函式,來保證指定的服務啟動,enable表示開機啟動。


mkdir /srv/salt/test/123
 cp /etc/passwd /srv/salt/test/123/1.txt
 vi /srv/salt/top.sls //改為如下內容
base:
  '*':
    - test
 執行: salt 'aming-02' state.highstate
 檢查aming-02上是否有/tmp/aminglinux.com,檢查內容以及許可權

4.配置管理檔案

master上vi /srv/salt/test.sls  //加入如下內容
file_test:
  file.managed:
    - name: /tmp/aminglinux.com
    - source: salt://test/123/1.txt
    - user: root
    - group: root
    - mode: 600
說明:第一行的file_test為自定的名字,表示該配置段的名字,可以在別的配置段中引用它,source指定檔案從哪裡拷貝,這裡的salt://test/123/1.txt相當於是/srv/salt/test/123/1.txt

mkdir /srv/salt/test/123
 cp /etc/passwd /srv/salt/test/123/1.txt
 vi /srv/salt/top.sls //改為如下內容
base:
  '*':
    - test
 執行: salt 'aming-02' state.highstate
 檢查aming-02上是否有/tmp/aminglinux.com,檢查內容以及許可權



master上vi /srv/salt/test_dir.sls  //加入如下內容
file_dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test/123
    - user: root
    - file_mode: 640
    - dir_mode: 750
    - mkdir: True
    - clean: True //加上它之後,源刪除檔案或目錄,目標也會跟著刪除,否則不會刪除


修改top.sls, vi /srv/salt/top.sls //改為如下內容
base:
  '*':
    - test_dir 
 執行: salt 'aming-02' state.highstate
 檢查aming-02上是否有/tmp/testdir,檢查裡面的目錄、檔案以及許可權
 說明:這裡有一個問題,如果source對應的目錄裡有空目錄的話,客戶端上不會建立該目錄

5.配置管理目錄

master上vi /srv/salt/test_dir.sls  //加入如下內容
file_dir:
  file.recurse:
    - name: /tmp/testdir
    - source: salt://test/123
    - user: root
    - file_mode: 640
    - dir_mode: 750
    - mkdir: True
    - clean: True //加上它之後,源刪除檔案或目錄,目標也會跟著刪除,否則不會刪除
修改top.sls, vi /srv/salt/top.sls //改為如下內容
base:
  '*':
    - test_dir 
 執行: salt 'knightlai02' state.highstate
 檢查knightlai02上是否有/tmp/testdir,檢查裡面的目錄、檔案以及許可權
 說明:這裡有一個問題,如果source對應的目錄裡有空目錄的話,客戶端上不會建立該目錄

6.配置管理遠端命令

master上

vi /srv/salt/shell_test.sls  //加入如下內容
 shell_test:
  cmd.script:
    - source: salt://test/1.sh
    - user: root
 vi /srv/salt/test/1.sh //加入如下內容
#!/bin/bash
touch /tmp/111.txt 
if [ ! -d /tmp/1233 ]
then
    mkdir /tmp/1233
fi
更改top.sls內容
base:
  '*':
    - shell_test
 執行: salt 'aming-02' state.highstate
 檢查是否有/tmp/111.txt和/tmp/1233

7.配置管理計劃任務

master上

vi /srv/salt/cron_test.sls  //加入如下內容
cron_test:
  cron.present:
    - name: /bin/touch /tmp/111.txt
    - user: root
    - minute: '*'
    - hour: 20
    - daymonth: '*'
    - month: '*'
    - dayweek: '*

注意,*需要用單引號引起來。當然我們還可以使用file.managed模組來管理cron,因為系統的cron都是以配置檔案的形式存在的。想要刪除該cron,需要增加: cron.absent:   - name: /bin/touch /tmp/111.txt  兩者不能共存,要想刪除一個cron,那之前的present就得去掉。

更改top.sls
base:
  '*':
    - cron_test
 執行: salt 'knightlai02' state.highstate
 到knightlai02上檢查cron,會看到提示# Lines below here are managed by Salt, do not edit
 我們不能隨意改動它,否則就沒法刪除或者修改這個cron了。

8.saltstack – 其它可能會用到的命令

cp.get_file 拷貝master上的檔案到客戶端  salt '*' cp.get_file salt://test/1.txt  /tmp/123.txt  

cp.get_dir 拷貝目錄  salt '*' cp.get_dir salt://test/conf /tmp/ //會自動在客戶端建立conf目錄,所以後面不要加conf,如果寫成 /tmp/conf/  則會在/tmp/conf/目錄下又建立conf  salt-run manage.up  

顯示存活的minion  salt '*' cmd.script salt://test/1.sh  命令列下執行master上的shell指令碼

9.salt-ssh使用

salt-ssh不需要對客戶端做認證,客戶端也不用安裝salt-minion,它類似pssh/expect
 安裝很簡單yum install -y https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
 yum install -y salt-ssh
 vi /etc/salt/roster //增加如下內容
knightlai01:
  host: 192.168.139.138
  user: root
  passwd: 123456
knightlai02:
  host: 192.168.139.135
  user: root
  passwd: 123456
 salt-ssh --key-deploy '*' -r 'w' //第一次執行的時候會自動把本機的公鑰放到對方機器上,然後就可以把roster裡面的密碼去掉