第三十九課預習任務
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
- minion上:[[email protected] ~]# vi /etc/salt/grains
- //新增: role: nginx env: test
- 重啟minion服務 [[email protected]
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裡面的密碼去掉