昨天本來打算是寫salt的WebUi-halite的,不過想了想,仍是先寫一些「看得見、摸得着的」的一些顯而易見,最基本的用處吧。(嚐到一些甜頭後,纔會繼續去鑽研吧。。。哈哈~)node
那,什麼是Targeting呢?web
官方給到的解釋是:apache
Specifying which minions should run a command or execute a state by matching against hostnames, or system information, or defined groups, or even combinations thereof.ubuntu
這都看的懂的吧...舉個形象點的例子吧,咱們能夠用這句命令去重啓minion端,一臺名爲web1服務器上面的apache。
vim
salt web1 apache.signal restart
同時,咱們也能夠在top file裏面寫死,好比只讓minion端的web1,去執行webserver.sls
centos
base: ’web1’: - webserver
固然,正則什麼的也能夠用,好比:bash
salt ’web?.example.net’ test.ping #web1.example.net, web2.example.net . . .webN.example.net salt ’web[1-5]’ test.ping #web1到web5 salt ’web[1,3]’ test.ping #web1和web3 salt ’web-[x-z]’ test.ping #web-x、web-y和web-z
總之,在salt中,是有不少方法去限制特定的minions或者groups的。
服務器
下面是一張compound matcher表,能夠針對性的進行操做目標的篩選:
app
Letter | Match Type | Example |
G | Grans glob | G@os:Ubuntu |
E | PCRE Miniondom ID |
E@web\d+\.(dev|qa|prod)\.loc |
P | Grains PCRE | P@os:(RedHat|Fedora|CentOS) |
L | List of minions | L@minion1.example.com,minion3.domain.com or bl * .domain.com |
I | Pillar glob | I@pdata:foobar |
S | Subnet/IP address |
S@192.168.1.0/24 or S@192.168.1.100 |
R | Range cluster | R@%foo.bar |
官方的概念和介紹就到這裏,下面咱們進行實際操做一下:
先說明下,個人實驗環境:
IP | OS | id | character | |
192.168.139.131 | CentOS release 6.5 (Final) | 192.168.139.131 | master | |
192.168.139.128 | CentOS release 6.5 (Final) | 192.168.139.128-centos | minion | |
192.168.139.130 | Ubuntu 12.04.4 | 192.168.139.130-ubuntu | minion |
操做前,先照例看一下salt-key:
[root@ www]# salt-key -L Accepted Keys: 192.168.139.128-centos 192.168.139.130-ubuntu Unaccepted Keys: Rejected Keys:
咱們先在master端進行操做,先進行分組,由於只有2臺,咱們能夠按照上面表格的Grans glob進行簡單分組(分組這塊,感受應該是要着重考慮的。良好的roles,能夠大大提高效率。那麼,是按服務、OS、業務來分呢仍是他們某幾個的並集呢,等等,我也尚未想好。。。哈哈。。。)
打開master配置文件,並找到Node Groups,並進行相應的修改。
[root@ www]# vi /etc/salt/master
nodegroups: group1: 'G@os:Centos' group2: 'G@os:Ubuntu'
亂入一下....:這裏忽然想到一個問題,用戶權限的問題。好比我下發權限給Tom,只容許他有test.ping和status.uptime,沒有其餘權限。(好比,若是執行cmd.run rm -f 就會報錯)。咱們也能夠再/etc/salt/master裏這麼來增長:
client_acl:
Tom:
- test.ping
- status.uptime
修改好後,重啓salt-master服務,並看下一下結果:
[root@ www]# service salt-master restart Stopping salt-master daemon: [ OK ] Starting salt-master daemon: [ OK ] [root@ www]# salt -N group2 test.ping 192.168.139.130-ubuntu: True [root@ www]# salt -N group1 test.ping 192.168.139.128-centos: True
另外,咱們也能夠在不修改node groups,直接在命令行進行篩選操做。須要注意的是,這裏的matchers也能夠用and、or和not。
[root@ www]# salt -C 'G@os:Ubuntu or 192*' test.ping 192.168.139.130-ubuntu: True 192.168.139.128-centos: True
一樣的,也能夠再top file裏進行限制:
base: ’G@os:Ubuntu or 192* ’: - match: compound - webserver
須要注意的是,not 開頭是不支持上面那張compund matchers表格的,咱們能夠這樣來規避:
salt -C ’* and not G@kernel:Darwin’ test.ping salt -C ’* and not web-dc1-srv’ test.ping
接下來,講一下文件的手動推送。
首先,在master端的/srv/salt/下面建立一個名爲test的文件,裏面隨便打了一串,adada。而後經過salt進行傳送到minion端,root目錄下,並重命名爲1234。
[root@ salt]# pwd /srv/salt [root@ salt]# cat test adada [root@ salt]# salt '*' cp.get_file salt://test /root/1234 192.168.139.128-centos: /root/1234 192.168.139.130-ubuntu: /root/1234
而後,咱們去minion端,查看一下結果。
root@ubuntu:~# ll total 36 drwx------ 4 root root 4096 Jul 28 06:09 ./ drwxr-xr-x 22 root root 4096 Jul 1 23:55 ../ -rw-r--r-- 1 root root 6 Jul 28 06:09 1234 -rw------- 1 root root 525 Jul 28 02:01 .bash_history -rw-r--r-- 1 root root 3106 Apr 19 2012 .bashrc drwx------ 2 root root 4096 Jul 2 00:02 .cache/ -rw-r--r-- 1 root root 140 Apr 19 2012 .profile drwxr-xr-x 2 root root 4096 Jul 28 02:47 .rpmdb/ -rw------- 1 root root 749 Jul 28 01:52 .viminfo root@ubuntu:~# cat 1234 adada [root@ ~]# cd /root/ [root@ ~]# ll total 24 -rw-r--r--. 1 root root 6 Jul 29 12:06 1234 -rw-------. 1 root root 1090 Apr 10 00:44 anaconda-ks.cfg -rw-r--r--. 1 root root 9017 Apr 10 00:44 install.log -rw-r--r--. 1 root root 3091 Apr 10 00:41 install.log.syslog [root@ ~]# cat 1234 adada
呼。。。文件傳送演示好了。唉,你有可能會說,「我手動去那些服務器上,一個個改那些東西不是更快麼?」,的確(在數量少的狀況下,你不想"偷懶"誰也攔不住你。。。)。總之salt是在有必定規模的服務器後,才能顯示出其魅力的。
另外,咱們也能夠在master端,經過salt進行對某臺、某些或者所有minions的操做。(還記得上面提到的compound matcher表和and or not麼),稍微演示一下:
[root@ salt]# salt '*' cmd 'ps -ef|grep http' 192.168.139.130-ubuntu: 'cmd' is not available. 192.168.139.128-centos: 'cmd' is not available. [root@ salt]# salt '*' cmd.run 'ps -ef|grep http' 192.168.139.130-ubuntu: root 3584 3583 0 02:14 ? 00:00:00 /bin/sh -c vi /etc/www/httpd/conf/httpd.conf root 3585 3584 0 02:14 ? 00:00:00 vi /etc/www/httpd/conf/httpd.conf root 5724 5723 0 06:24 ? 00:00:00 /bin/sh -c ps -ef|grep http root 5726 5724 0 06:24 ? 00:00:00 grep http 192.168.139.128-centos: root 28979 1 0 09:40 ? 00:00:00 /usr/sbin/httpd apache 30026 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd apache 30027 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd apache 30028 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd apache 30029 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd apache 30030 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd apache 30031 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd
apache 30032 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd apache 30033 28979 0 11:19 ? 00:00:00 /usr/sbin/httpd root 30566 30565 0 12:21 ? 00:00:00 /bin/sh -c ps -ef|grep http root 30568 30566 0 12:21 ? 00:00:00 grep http [root@ salt]# salt '*' cmd.run 'date' 192.168.139.130-ubuntu: Mon Jul 28 06:24:17 EDT 2014 192.168.139.128-centos: Tue Jul 29 12:21:34 CST 2014 [root@ salt]# salt -N group1 cmd.run 'df -h' 192.168.139.128-centos: Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 19G 1.3G 17G 8% / tmpfs 242M 0 242M 0% /dev/shm /dev/sda1 485M 53M 407M 12% /boot
基本的操做寫的差很少了,嚐到甜頭了麼,那咱們後續的更新見~