1. 程式人生 > >saltstack計劃任務工具和其他命令

saltstack計劃任務工具和其他命令

src 同時 51cto 修改 圖片 mon 8.0 ont hat

配置管理目錄

要實現目錄批量管理,也需要在top中配置管理項的文件,然後再子管理項文件中配置相應的目錄信息
編輯top.sls配置文件,將base: 下的修改為指定名稱,這裏我修改為dir

[root@nfs3 salt]# cat top.sls 
base:
 ?‘*‘:
 ? ?- dir ? ? ?  //指定子配置文件名稱

接下來修改top中指定的dir名稱的配置文件,配置文件全稱名字為dir.sls
查看配置文件的配置參數信息

[root@nfs3 salt]# cat dir.sls 
file_dir:
  file.recurse: ? ? ? ? ? ? ? ?  配置項函數
 ? ?- name: /tmp/testdir ? ? ? ? 下發到客戶端的目錄路徑
 ? ?- source: salt://test/dir ?  服務端保存目錄的路徑,這裏如果要同時同步目錄,這個目錄下(dir目錄)不能為空,否則不能成功下發到客戶端
 ? ?- user: root ? ? ? ? ? ? ? ? 同步目錄或文件時使用的用戶所屬主所屬組
 ? ?- file_mode: 640 ? ? ? ? ? ? 下發到客戶端的文件權限位
 ? ?- dir_mode: 750 ? ? ? ? ? ?  下發到客戶端目錄的權限
 ? ?- mkdir: True ? ? ? ? ? ? ?  當目錄不存在時,是否創建目錄。True為創建
 ? ?- clean: True ? ? ? ? ? ? ?  當客戶端刪除這個目錄或源文件時,客戶端上的目標是否也同時刪除,否則不會刪除。True表示跟同服務端增刪操作,服務端一旦刪除源目錄或文件,客戶端也會同時執行刪除操作

服務端創建dir該目錄,並在目錄下創建一個文件,再進行下發測試
需要的是下發linux和linux目錄下的2345.txt文件,如果這個linux目錄是個空目錄的話,在下發時客戶端上則不會創建該目錄的
可以看到同步結果是同步了linux目錄和該目錄下的文件
技術分享圖片

[root@nfs3 test]# tree dir
dir
├── 1.txt
├── 234.txt
└── linux
 ?  └── 2345.txt
?
1 directory, 3 files
[root@nfs3 test]#  salt ‘localzabbix.com‘ state.highstate
localzabbix.com:
----------
 ? ? ? ?  ID: file_dir
 ?  Function: file.recurse
 ? ? ?  Name: /tmp/testdir
 ? ?  Result: True
 ? ? Comment: Recursively updated /tmp/testdir
 ? ? Started: 22:34:56.449933
 ?  Duration: 438.987 ms
 ? ? Changes: ? 
 ? ? ? ? ? ? ?----------
 ? ? ? ? ? ?  /tmp/testdir/linux:
 ? ? ? ? ? ? ? ? ?----------
 ? ? ? ? ? ? ? ?  /tmp/testdir/linux:
 ? ? ? ? ? ? ? ? ? ?  New Dir
 ? ? ? ? ? ?  /tmp/testdir/linux/2345.txt:
 ? ? ? ? ? ? ? ? ?----------
 ? ? ? ? ? ? ? ? ?diff:
 ? ? ? ? ? ? ? ? ? ?  New file
 ? ? ? ? ? ? ? ?  mode:
 ? ? ? ? ? ? ? ? ? ? ?0640
?
Summary for localzabbix.com
------------
Succeeded: 1 (changed=1)
Failed: ? ?0
------------
Total states run: ? ? 1
Total run time: 438.987 ms

?
下發到客戶端結果
登入到客戶端上,進入/tmp/testdir目錄下,查看是否有發送過來的文件
技術分享圖片

[root@nfs2 /]# cd /tmp/testdir/
[root@nfs2 testdir]# tree
.
├── 1.txt
├── 234.txt
└── linux
 ?  └── 2345.txt
?
1 directory, 3 files

配置管理遠程命令

配置遠程命令也就是下發腳本到minion並批量執行腳本中的命令。可以針對特定主機群組來批量執行腳本,這個前面文章也有提及
配置格式也和下發文件或目錄基本相同,這裏就不再闡述
修改top的總配置文件,定義執行腳本的配置文件名稱

[root@nfs3 salt]# vim top.sls 
?
base:
 ?‘*‘:
 ? ?- shell_test

創建執行腳本的配置文件

[root@nfs3 salt]# vim shell_test.sls
?
shell_test:
  cmd.script:
 ? ?- source: salt://test/shell.sh ? ? ? ?  //salt的相對路徑
 ? ?- user: root ? ? ? ? ? ? ? ? ? ? ? ? ?  //以root身份執行

在相對路徑salt目錄下創建個腳本文件並測試執行結果

[root@nfs3 salt]# cd test
[root@nfs3 test]# vim shell.sh
?
#!/bin/bash
touch /tmp/1111.txt
if [ ! -d /tmp/2333 ]
then
 ?mkdir /tmp/2333
fi

master服務端執行下發操作
技術分享圖片
客戶端minion上執行腳本的結果
可看見執行腳本後創建了2333這個目錄

技術分享圖片

配置管理計劃任務

配置計劃任務每個任務都是以單獨方式存在的,當然,也可以使用file.managed函數模塊來管理cron,因為系統的cron都是以配置文件來保存的
接下來在服務端上向客戶端上下發計劃任務配置
首先修改top,添加計劃任務的配置文件

[root@nfs3 salt]# vim top.sls 
?
base:
 ?‘*‘:
 ? ?- cron_test

再以top中指定的名稱來創建計劃任務配置文件
配置計劃任務使用的是cron.present函數模塊,name配置項下指定計劃任務的操作,user配置項指定root為執行用戶,接下來的就是計劃任務中的分鐘、小時、第幾日、月份、第幾周的意思,按照需求填寫這些參數就可以了
如果使用每一分鐘或者一小時、一天等這樣的配置,使用*號表示時需要使用單引號引用起來

[root@nfs3 salt]# vim cron_test.sls
?
cron_test:
  cron.present:
 ? ?- name: /bin/touch /tmp/666.txt
 ? ?- user: root
 ? ?- minute: ‘*‘
 ? ?- hour: 20
 ? ?- daymonth: ‘*‘
 ? ?- month: ‘*‘
 ? ?- dayweek: ‘*‘

?
創建多個計劃任務
-----------------創建多個計劃任務時,從name處復制並粘貼到下方,修改對應的操作參數即可
比如:

[root@nfs3 salt]# vim cron_test.sls
?
cron_test:
  cron.present:
 ? ?- name: /bin/touch /tmp/666.txt
 ? ?- user: root
 ? ?- minute: ‘*‘
 ? ?- hour: 20
 ? ?- daymonth: ‘*‘
 ? ?- month: ‘*‘
 ? ?- dayweek: ‘*‘
 ? ?- name: /bin/touch /tmp/777.txt
 ? ?- user: root
 ? ?- minute: ‘*‘
 ? ?- hour: 20
 ? ?- daymonth: ‘*‘
 ? ?- month: ‘*‘
 ? ?- dayweek: ‘*‘

在客戶機上查看多個計劃任務

[root@nfs2 tmp]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/666.txt
* 20 * * * /bin/touch /tmp/666.txt
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/777.txt
* 20 * * * /bin/touch /tmp/777.txt

在服務端執行下發操作,查看客戶端上是否成功加入了這些計劃任務配置

[root@nfs3 salt]# salt ‘localzabbix.com‘ state.highstate
localzabbix.com:
----------
 ? ? ? ?  ID: cron_test
 ?  Function: cron.present
 ? ? ?  Name: /bin/touch /tmp/666.txt
 ? ?  Result: True
 ? ? Comment: Cron /bin/touch /tmp/666.txt added to root‘s crontab
 ? ? Started: 00:41:41.339653
 ?  Duration: 619.598 ms
 ? ? Changes: ? 
 ? ? ? ? ? ? ?----------
 ? ? ? ? ? ?  root:
 ? ? ? ? ? ? ? ?  /bin/touch /tmp/666.txt
?
Summary for localzabbix.com
------------
Succeeded: 1 (changed=1)
Failed: 0
------------
Total states run: 1
Total run time: 619.598 ms

在客戶端上查看計劃任務是否有添加上

註意,計劃任務中以#號開頭的行是有用的,如果這些行被刪除後,那麽master會認為minion沒有這些計劃任務,在下次創建新的計劃任務時,這些計劃任務不會被刪掉,會導致不再需要的計劃任務會繼續運行
技術分享圖片

[root@nfs2 tmp]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/666.txt
* 20 * * * /bin/touch /tmp/666.txt

?
推送下發刪除計劃任務的操作
如果不再需要繼續執行某個計劃任務,可以修改計劃任務配置文件,將其內容改為刪除的函數模塊
刪除客戶端上的計劃任務

[root@nfs3 salt]# vim cron_test.sls
?
cron_test:
  cron.absent:
 ? ?- name: /bin/touch /tmp/666.txt
 ? ?- name: /bin/touch /tmp/777.txt
----------------------------------更新以刪除計劃任務
[root@nfs3 salt]# salt ‘localzabbix.com‘ state.highstate
localzabbix.com:
----------
 ? ? ? ?  ID: cron_test
 ?  Function: cron.absent
 ? ? ?  Name: /bin/touch /tmp/777.txt
 ? ?  Result: True
 ? ? Comment: Cron /bin/touch /tmp/777.txt removed from root‘s crontab
 ? ? Started: 00:54:43.322933
 ?  Duration: 294.103 ms
 ? ? Changes: ? 
 ? ? ? ? ? ? ?----------
 ? ? ? ? ? ?  root:
 ? ? ? ? ? ? ? ?  /bin/touch /tmp/777.txt
?
Summary for localzabbix.com
------------
Succeeded: 1 (changed=1)
Failed: ? ?0
------------
Total states run: ? ? 1
Total run time: 294.103 ms

?
在客戶端上查看計劃任務狀態
這裏註意的是,我在計劃任務的配置文件中指定了刪除兩個計劃任務的配置,但是執行master更新時只會匹配並執行最後一條的計劃任務,也就是這裏只會刪除創建777.txt計劃任務。如果想要刪除多條計劃任務還需要一條一條的進行刪除

[root@nfs2 tmp]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/666.txt
* 20 * * * /bin/touch /tmp/666.txt
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/777.txt
* 20 * * * /bin/touch /tmp/777.txt

------------------------------上面為更新刪除指令前的狀態

[root@nfs2 tmp]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/bin/touch /tmp/666.txt
* 20 * * * /bin/touch /tmp/666.txt

----------------------------刪除後的計劃任務

其他命令

通過命令行直接拷貝文件
可以指定主機或主機對象群組,將1.txt拷貝到localzabbix.com主機,並保存名字為3322.txt的文件

[root@nfs3 salt]# salt ‘localzabbix.com‘ cp.get_file salt://test/1.txt /tmp/3322.txt
localzabbix.com:
 ?  /tmp/3322.txt

客戶機上查看拷貝過來的文件

[root@nfs2 tmp]# ll /tmp/3322.txt 
-rw-r--r-- 1 root root 511 Dec ?6 01:22 /tmp/3322.txt

直接在命令行拷貝目錄
將test/dir目錄拷貝到客戶機/tmp/目錄下,使用cp.get_dir命令模塊

[root@nfs3 salt]# salt ‘localzabbix.com‘ cp.get_dir salt://test/dir /tmp/
localzabbix.com:
 ? ?- /tmp//dir/1.txt
 ? ?- /tmp//dir/234.txt
 ? ?- /tmp//dir/linux/2345.txt

查看客戶端拷貝過來的目錄

[root@nfs2 tmp]# tree dir/
dir/
├── 1.txt
├── 234.txt
└── linux
 ?  └── 2345.txt
?
1 directory, 3 files

通過命令行直接執行指定的腳本
可以寫好相應腳本文件,放入指定的目錄下,使用cmd.script命令模塊來指定主機批量執行腳本中的命令

[root@nfs3 salt]# ll test/shell.sh 
-rw-r--r-- 1 root root 82 Dec 5 23:20 test/shell.sh
[root@nfs3 salt]# salt ‘localzabbix.com‘ cmd.script salt://test/shell.sh
localzabbix.com:
 ? ?----------
 ?  pid:
 ? ? ? ?6478
 ?  retcode:
 ? ? ? ?0
 ?  stderr:
 ?  stdout:

salt-ssh的使用

使用salt-ssh 命令前首先需要安裝salt的官網yum源,並安裝salt-ssh的安裝包
安裝好salt-ssh後,還需要修改配置文件,在/etc/salt/roster中增加如下內容,根據自己主機名解析和用戶名密碼進行配置

[root@nfs3 ~]# vim /etc/salt/roster 
nfs2:
  host: 192.168.1.223
  user: root
  passwd: pwd@123
nfs3:
  host: 192.168.1.115
  user: root
  passwd: pwd@12

在第一次執行salt-ssh命令時,需要把自己本機的公鑰推送到對方機器上,第一次推送後就可以把配置文件中的passwd的密碼配置給刪除掉,之後只使用密鑰來驗證登陸

[root@nfs3 ~]# salt-ssh --key-deploy ‘*‘ -r ‘w‘
nfs3:
 ? ?----------
 ?  retcode:
 ? ? ? ?254
 ?  stderr:
 ?  stdout:
 ? ? ?  The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
 ? ? ?  The authenticity of host ‘192.168.1.115 (192.168.1.115)‘ can‘t be established.
 ? ? ?  ECDSA key fingerprint is SHA256:A4OrsgxgE/dfjkkfmaRKgGv/ckWLdH77aluUDbHwWlw.
 ? ? ?  ECDSA key fingerprint is MD5:90:7e:dc:6c:5f:b5:f2:2f:ce:ff:90:25:50:90:f5:e4.
 ? ? ?  Are you sure you want to continue connecting (yes/no)? 
nfs3:
 ? ?----------
 ?  retcode:
 ? ? ? ?0
 ?  stderr:
 ?  stdout:
 ? ? ? ? 02:05:20 up 6:18, 3 users, load average: 0.03, 0.08, 0.12
 ? ? ?  USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
 ? ? ?  root tty1 19:47 3:59m 6.74s 6.71s ping bilibili.com
 ? ? ?  root pts/0 192.168.1.112 01:50 8.00s 0.65s 0.00s /usr/bin/python /usr/bin/salt-ssh --key-deploy * -r w
 ? ? ?  root pts/1 192.168.1.112 22:05 33:28 0.19s 0.19s -bash

saltstack計劃任務工具和其他命令