自动化运维之saltstack(一)安装及常用方法

1、软件环境:

十余年的枞阳网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整枞阳建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“枞阳网站设计”,“枞阳网站推广”以来,每个客户项目都认真落实执行。

[root@localhost ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]#

(1)修改selinux配置文件:

[root@localhost ~]# vim /etc/sysconfig/selinux 
SELINUX=enforcing 改为 SELINUX=disabled

(2)关闭防火墙:

[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -L

IP分配如下:

master 192.168.112.140

minion 192.168.112.141

minion 192.168.112.142

(3)master和minion端部署安装

master端执行:

[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install -y salt-master

minion端执行:

[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install salt-minion

(4)修改配置文件:

[root@localhost ~]# vim /etc/salt/minion 
master: 192.168.112.140
id:  server02
[root@localhost ~]#
[root@localhost ~]# systemctl start salt-minion
[root@localhost ~]# ps -ef|grep salt-minion
root      2505     1  2 23:06 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
root      2508  2505  8 23:06 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
root      2536  2318  0 23:06 pts/0    00:00:00 grep --color=auto salt-minion
[root@localhost ~]# netstat -lnupt|grep 4505
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      2304/python         
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]# vim /etc/salt/minion
master: 192.168.112.140
id:  server03
[root@localhost ~]#
[root@localhost ~]# systemctl start salt-minion
[root@localhost ~]# ps -ef|grep salt-minion
root      2487     1  1 23:05 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
root      2490  2487  4 23:06 ?        00:00:00 /usr/bin/python /usr/bin/salt-minion
root      2521  2320  0 23:06 pts/0    00:00:00 grep --color=auto salt-minion
[root@localhost ~]# 
[root@localhost ~]# 
[root@localhost ~]#

(5)设置salt-master和salt-minion开机启动

[root@localhost ~]# systemctl enable salt-master
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.
[root@localhost ~]#
[root@localhost ~]# systemctl enable salt-minion
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-minion.service to /usr/lib/systemd/system/salt-minion.service.
[root@localhost ~]#

2、配置saltstack认证

salt-key        //查看已经签名的客户端

salt-key -a    //签名指定的主机

salt-key -A    //签名所有的主机

salt-key -d    //删除指定主机的签名

salt-key --help   //查看各命令的用法

[root@localhost ~]# salt-key 
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server02
server03
Rejected Keys:
[root@localhost ~]# 
[root@localhost ~]# salt-key -a server02
The following keys are going to be accepted:
Unaccepted Keys:
server02
Proceed? [n/Y] Y
Key for minion server02 accepted.
[root@localhost ~]# 
[root@localhost ~]# salt-key 
Accepted Keys:
server02
server03
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@localhost ~]#

3、日常用法

test.ping用户检查master到minion端的网络连通性,返回True即正常,False为异常

[root@localhost ~]# salt '*' test.ping
server02:
    True
server03:
    True
[root@localhost ~]#

cmd.run 在minion端执行shell命令,记住这模块只能执行短连接命令,比如df命令;长连接的无法返回结果,比如top命令

[root@localhost ~]# salt '*' cmd.run 'hostname'
server03:
    localhost.localdomain
server02:
    localhost.localdomain
[root@localhost ~]# salt '*' cmd.run 'df -Th'
server02:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda3      xfs        90G  1.8G   89G   2% /
    devtmpfs       devtmpfs  231M     0  231M   0% /dev
    tmpfs          tmpfs     241M   12K  241M   1% /dev/shm
    tmpfs          tmpfs     241M  4.6M  236M   2% /run
    tmpfs          tmpfs     241M     0  241M   0% /sys/fs/cgroup
    /dev/sda1      xfs      1014M  131M  884M  13% /boot
    tmpfs          tmpfs      49M     0   49M   0% /run/user/0
server03:
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda3      xfs        90G  1.8G   89G   2% /
    devtmpfs       devtmpfs  231M     0  231M   0% /dev
    tmpfs          tmpfs     241M   12K  241M   1% /dev/shm
    tmpfs          tmpfs     241M  4.6M  236M   2% /run
    tmpfs          tmpfs     241M     0  241M   0% /sys/fs/cgroup
    /dev/sda1      xfs      1014M  131M  884M  13% /boot
    tmpfs          tmpfs      49M     0   49M   0% /run/user/0
[root@localhost ~]#

 显示被控主机的操作系统类型

[root@localhost ~]# salt '*' grains.item os
server02:
    ----------
    os:
        CentOS
server03:
    ----------
    os:
        CentOS
[root@localhost ~]#

远程代码执行测试

(1)(通配符*匹配)

[root@localhost ~]# salt '*' cmd.exec_code python 'import sys;print sys.version'
server02:
    2.7.5 (default, Nov  6 2016, 00:28:07) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
server03:
    2.7.5 (default, Nov  6 2016, 00:28:07) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
[root@localhost ~]#

(2)正则匹配

[root@localhost ~]# salt -E 'server(02|03)' test.ping
server03:
    True
server02:
    True
[root@localhost ~]#

(3)列表匹配

[root@localhost ~]# salt -L 'server02,server03' test.ping
server02:
    True
server03:
    True
[root@localhost ~]#

(4)grains匹配,其命令salt grains.items

[root@localhost ~]# salt  'server02' grains.items
server02:
    ----------
    SSDs:
    biosreleasedate:
        07/31/2013
    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
        - ht
        - syscall
        - nx
        - rdtscp
        - lm
        - constant_tsc
        - arch_perfmon
        - pebs
        - bts
        - nopl
        - xtopology
        - tsc_reliable
        - nonstop_tsc
        - aperfmperf
        - eagerfpu
        - pni
        - pclmulqdq
        - ssse3
        - cx16
        - pcid
        - sse4_1
        - sse4_2
        - x2apic
        - popcnt
        - xsave
        - avx
        - f16c
        - hypervisor
        - lahf_lm
        - arat
        - epb
        - pln
        - pts
        - dtherm
        - fsgsbase
        - smep
        - xsaveopt
    cpu_model:
        Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz
    cpuarch:
        x86_64
    domain:
    fqdn:
        server02
    fqdn_ip4:
        - 192.168.112.141
    fqdn_ip6:
        - ::1
    gpus:
        |_
          ----------
          model:
              SVGA II Adapter
          vendor:
              unknown
    host:
        server02
    hwaddr_interfaces:
        ----------
        eth0:
            00:0c:29:0b:28:95
        lo:
            00:00:00:00:00:00
    id:
        server02
    init:
        systemd
    ip4_interfaces:
        ----------
        eth0:
            - 192.168.112.141
        lo:
            - 127.0.0.1
    ip6_interfaces:
        ----------
        eth0:
        lo:
    ip_interfaces:
        ----------
        eth0:
            - 192.168.112.141
        lo:
            - 127.0.0.1
    ipv4:
        - 127.0.0.1
        - 192.168.112.141
    ipv6:
    kernel:
        Linux
    kernelrelease:
        3.10.0-514.el7.x86_64
    locale_info:
        ----------
        defaultencoding:
            UTF-8
        defaultlanguage:
            en_US
        detectedencoding:
            UTF-8
    localhost:
        server02
    lsb_distrib_id:
        CentOS Linux
    machine_id:
        09e12c5f3a7948af9747ee938feee87f
    manufacturer:
        VMware, Inc.
    master:
        192.168.112.140
    mdadm:
    mem_total:
        480
    nodename:
        server02
    num_cpus:
        4
    num_gpus:
        1
    os:
        CentOS
    os_family:
        RedHat
    osarch:
        x86_64
    oscodename:
        Core
    osfinger:
        CentOS Linux-7
    osfullname:
        CentOS Linux
    osmajorrelease:
        7
    osrelease:
        7.3.1611
    osrelease_info:
        - 7
        - 3
        - 1611
    path:
        /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
    productname:
        VMware Virtual Platform
    ps:
        ps -efH
    pythonexecutable:
        /usr/bin/python
    pythonpath:
        - /usr/bin
        - /usr/lib64/python27.zip
        - /usr/lib64/python2.7
        - /usr/lib64/python2.7/plat-linux2
        - /usr/lib64/python2.7/lib-tk
        - /usr/lib64/python2.7/lib-old
        - /usr/lib64/python2.7/lib-dynload
        - /usr/lib64/python2.7/site-packages
        - /usr/lib64/python2.7/site-packages/gtk-2.0
        - /usr/lib/python2.7/site-packages
    pythonversion:
        - 2
        - 7
        - 5
        - final
        - 0
    saltpath:
        /usr/lib/python2.7/site-packages/salt
    saltversion:
        2015.5.10
    saltversioninfo:
        - 2015
        - 5
        - 10
        - 0
    selinux:
        ----------
        enabled:
            False
        enforced:
            Disabled
    serialnumber:
        VMware-56 4d 19 57 3d 1d 44 0d-99 bf 1a ff c4 0b 28 95
    server_id:
        1264512667
    shell:
        /bin/sh
    systemd:
        ----------
        features:
            +PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
        version:
            219
    virtual:
        VMware
    zmqversion:
        3.2.5
[root@localhost ~]#

如果要获取具体某一项内容,可以直接在该命令后加项名,比如获取操作系统,则:

[root@localhost ~]# salt -L 'server02,server03' grains.item os
server03:
    ----------
    os:
        CentOS
server02:
    ----------
    os:
        CentOS
[root@localhost ~]#

同样可以获取host、ip_interfaces、fqdn_ipv4、cpu_model对应的值:

[root@localhost ~]# salt  'server02' grains.item host
server02:
    ----------
    host:
        server02
[root@localhost ~]#
[root@localhost ~]# salt  'server02' grains.item ip_interfaces
server02:
    ----------
    ip_interfaces:
        ----------
        eth0:
            - 192.168.112.141
        lo:
            - 127.0.0.1
[root@localhost ~]#
[root@localhost ~]# salt  'server02' grains.item fqdn_ip4
server02:
    ----------
    fqdn_ip4:
        - 192.168.112.141
[root@localhost ~]#
[root@localhost ~]# salt  'server02' grains.item cpu_model
server02:
    ----------
    cpu_model:
        Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz
[root@localhost ~]#

4、常用模块介绍

(1)、cp模块(实现远程文件、目录的复制,以及下载URL文件等操作)


#将主服务器file_roots指定位置下的目录复制到被控主机

打开master文件中的

#file_roots:

  base:

    - /srv/salt

改为:

file_roots:

  base:

    - /srv/salt

# salt '*' cp.get_dir salt://test_dir /data

salt:// --->表示file_root指定的路径,这里是/srv/salt,salt://test_dir 表示/srv/salt/test_dir

/data   --->表示目标主机上的根目录下的data目录

[root@localhost ~]# ll /srv/salt/test_dir/
total 672
-rw-r--r-- 1 root root 686011 May  7 22:37 nginx-1.0.10.tar.gz
[root@localhost ~]# salt '*' cp.get_dir salt://test_dir /data
server02:
    - /data/test_dir/nginx-1.0.10.tar.gz
server03:
    - /data/test_dir/nginx-1.0.10.tar.gz
[root@localhost ~]# salt '*' cmd.run 'ls -l  /data'
server03:
    total 0
    drwxr-xr-x 2 root root 33 Jun  1 02:12 test_dir
server02:
    total 0
    drwxr-xr-x 2 root root 33 Jun  1 02:12 test_dir
[root@localhost ~]#

#将主服务器file_roots指定位置下的文件复制到被控主机

# salt '*' cp.get_file salt://nginx-1.0.10.tar.gz /root/nginx-1.0.10.tar.gz

[root@localhost salt]# salt '*' cp.get_file salt://nginx-1.0.10.tar.gz /root/nginx-1.0.10.tar.gz
server02:
    /root/nginx-1.0.10.tar.gz
server03:
    /root/nginx-1.0.10.tar.gz
[root@localhost salt]# salt '*' cmd.run 'ls -l /root/'
server02:
    total 676
    -rw-------. 1 root root   1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root 686011 Jun  1 02:15 nginx-1.0.10.tar.gz
server03:
    total 676
    -rw-------. 1 root root   1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root 686011 Jun  1 02:15 nginx-1.0.10.tar.gz
[root@localhost salt]#

对于大文件,cp_get_file支持gzip压缩,在参数中指定gzip的压缩级别,如下:

[root@server01 salt]# pwd
/srv/salt
[root@server01 salt]# ll -th test
-rw-r--r-- 1 root root 1.0G Jun 13 22:04 test
[root@server01 salt]# salt '*' cp.get_file salt://test /root/test gzip=5
server02:
    /root/test
server03:
    /root/test
[root@server01 salt]#
[root@server01 salt]# salt '*' cmd.run 'ls -htl /root/test'
server02:
    -rw-r--r-- 1 root root 1.0G Jun 13 22:06 /root/test
server03:
    -rw-r--r-- 1 root root 1.0G Jun 13 22:06 /root/test
[root@server01 salt]#

其中,1代表最小压缩,9代表最大压缩,gzip参数是在传输过程中对文件进行压缩。

cp.get_file默认不会在客户端上建立目录,如果客户端上没有这个目录了,文件拷贝将失败,所以这里又有一个参数makedirs,当客户端上的目标目录不存在时,直接将该参数的值设置为True,即makedirs=True;


[root@server01 salt]# salt '*' cmd.run 'ls -l /root/'
server02:
    total 1049372
    -rw-r--r--  1 root root     115316 Jun  1 02:26 GeoIP-1.6.5.-1.e16.x86_64.rpm
    -rw-------. 1 root root       1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root        260 Jun  5 22:08 connect.py
    -rw-r--r--  1 root root     686011 Jun  1 02:15 nginx-1.0.10.tar.gz
    -rw-r--r--  1 root root 1073741824 Jun 13 22:06 test
    drwxr-xr-x  2 root root         33 Jun 13 22:54 web
server03:
    total 1049368
    -rw-r--r--  1 root root     115316 Jun  1 02:26 GeoIP-1.6.5.-1.e16.x86_64.rpm
    -rw-------. 1 root root       1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root     686011 Jun  1 02:15 nginx-1.0.10.tar.gz
    -rw-r--r--  1 root root 1073741824 Jun 13 22:06 test
    drwxr-xr-x  2 root root         33 Jun 13 22:54 web
[root@server01 salt]#
[root@server01 salt]# salt '*' cp.get_file salt://nginx-1.0.10.tar.gz /root/web/nginx-1.0.10.tar.gz  makedirs=True
server02:
    /root/web/nginx-1.0.10.tar.gz
server03:
    /root/web/nginx-1.0.10.tar.gz
[root@server01 salt]#
[root@server01 salt]# salt '*' cmd.run 'ls -l /root/'
server02:
    total 1049372
    -rw-r--r--  1 root root     115316 Jun  1 02:26 GeoIP-1.6.5.-1.e16.x86_64.rpm
    -rw-------. 1 root root       1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root        260 Jun  5 22:08 connect.py
    -rw-r--r--  1 root root     686011 Jun  1 02:15 nginx-1.0.10.tar.gz
    -rw-r--r--  1 root root 1073741824 Jun 13 22:06 test
   
 
drwxr-xr-x  2 root root         33 Jun 13 22:54 web
server03:
    total 1049368
    -rw-r--r--  1 root root     115316 Jun  1 02:26 GeoIP-1.6.5.-1.e16.x86_64.rpm
    -rw-------. 1 root root       1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root     686011 Jun  1 02:15 nginx-1.0.10.tar.gz
    -rw-r--r--  1 root root 1073741824 Jun 13 22:06 test
    
drwxr-xr-x  2 root root         33 Jun 13 22:54 web
[root@server01 salt]#

注意:cp.get_file从字面上就可以看出是操作对象是文件,即只有在拷贝文件的时候,目标主机上对应的目录不存在使用makedirs参数才有用,否则该参数无效。

#下载指定URL内容到被控主机指定位置

salt '*' cp.get_url http://dl.fedoraproject.org/pub/epel/6/x86_64/GeoIP-1.6.5-1.el6.x86_64.rpm  /root/GeoIP-1.6.5.-1.e16.x86_64.rpm

cp.get_url 根据指定的url地址下载文件到被控端主机的对应目录下,这里被控端目录/root/下面

[root@localhost salt]# salt '*' cmd.run 'ls -l /root/'
server02:
    total 676
    -rw-------. 1 root root   1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root 686011 Jun  1 02:15 nginx-1.0.10.tar.gz
server03:
    total 676
    -rw-------. 1 root root   1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root 686011 Jun  1 02:15 nginx-1.0.10.tar.gz
[root@localhost salt]# salt '*' cp.get_url http://dl.fedoraproject.org/pub/epel/6/x86_64/GeoIP-1.6.5-1.el6.x86_64.rpm  /root/GeoIP-1.6.5.-1.e16.x86_64.rpm
server03:
    /root/GeoIP-1.6.5.-1.e16.x86_64.rpm
server02:
    /root/GeoIP-1.6.5.-1.e16.x86_64.rpm
[root@localhost salt]# salt '*' cmd.run 'ls -l /root/'
server02:
    total 792
    -rw-r--r--  1 root root 115316 Jun  1 02:26 GeoIP-1.6.5.-1.e16.x86_64.rpm
    -rw-------. 1 root root   1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root 686011 Jun  1 02:15 nginx-1.0.10.tar.gz
server03:
    total 792
    -rw-r--r--  1 root root 115316 Jun  1 02:26 GeoIP-1.6.5.-1.e16.x86_64.rpm
    -rw-------. 1 root root   1496 Jan 17 09:03 anaconda-ks.cfg
    -rw-r--r--  1 root root 686011 Jun  1 02:15 nginx-1.0.10.tar.gz
[root@localhost salt]#

当然URL也可以是master上的路径(salt://)

[root@server01 salt]# salt '*' cp.get_url salt://nginx-1.0.10.tar.gz /opt/nginx-1.0.10.tar.gz
server02:
    /opt/nginx-1.0.10.tar.gz
server03:
    /opt/nginx-1.0.10.tar.gz
[root@server01 salt]# salt '*' cmd.run 'ls -l /opt'
server02:
    total 672
    -rw-r--r-- 1 root root 686011 Jun 13 23:05 nginx-1.0.10.tar.gz
server03:
    total 672
    -rw-r--r-- 1 root root 686011 Jun 13 23:05 nginx-1.0.10.tar.gz
[root@server01 salt]#

#salt '*' cp.hash_file salt://test-file

cp.hash_file获取从主控端下发到被控端后文件的hash值,一般用于对比某个被控端某个文件的hash值

[root@localhost ~]# salt '*' cp.hash_file salt://nginx-1.0.10.tar.gz
server02:
    ----------
    hash_type:
        md5
    hsum:
        930b297b00fa1018fb0a1dd3e6b7e17e
server03:
    ----------
    hash_type:
        md5
    hsum:
        930b297b00fa1018fb0a1dd3e6b7e17e
[root@localhost ~]#

(2)、cmd模块(实现远程的命令行调用执行)

# salt '*' cmd.run 'netstat -ntlp'

[root@localhost salt]# salt '*' cmd.run 'netstat -lnupt'
server02:
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1184/sshd           
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2013/master         
    tcp6       0      0 :::22                   :::*                    LISTEN      1184/sshd           
    tcp6       0      0 ::1:25                  :::*                    LISTEN      2013/master         
    udp        0      0 0.0.0.0:32525           0.0.0.0:*                           737/dhclient        
    udp        0      0 127.0.0.1:323           0.0.0.0:*                           672/chronyd         
    udp        0      0 0.0.0.0:68              0.0.0.0:*                           737/dhclient        
    udp6       0      0 ::1:323                 :::*                                672/chronyd         
    udp6       0      0 :::14472                :::*                                737/dhclient
server03:
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1191/sshd           
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1835/master         
    tcp6       0      0 :::22                   :::*                    LISTEN      1191/sshd           
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1835/master         
    udp        0      0 0.0.0.0:32525           0.0.0.0:*                           729/dhclient        
    udp        0      0 127.0.0.1:323           0.0.0.0:*                           661/chronyd         
    udp        0      0 0.0.0.0:68              0.0.0.0:*                           729/dhclient        
    udp6       0      0 ::1:323                 :::*                                661/chronyd         
    udp6       0      0 :::14472                :::*                                729/dhclient
[root@localhost salt]#

(3)、cron模块(实现被控主机的crontab操作)

## 为指定的被控主机、root用户添加crontab信息

# salt '*' cron.set_job root '*/5' '*' '*' '*' '*' 'date >/dev/null 2>&1'

# salt '*' cron.raw_cron root

[root@localhost salt]# salt '*' cron.set_job root '*/60' '*' '*' '*' '*' '/usr/local/nginx/sbin/nginx -s reload >/dev/null 2>&1'
server02:
    new
server03:
    new
[root@localhost salt]#
[root@localhost salt]# salt '*' cmd.run 'crontab -l'
server03:
    # Lines below here are managed by Salt, do not edit
    */60 * * * * /usr/local/nginx/sbin/nginx -s reload >/dev/null 2>&1
server02:
    # Lines below here are managed by Salt, do not edit
    */60 * * * * /usr/local/nginx/sbin/nginx -s reload >/dev/null 2>&1
[root@localhost salt]#

## 删除指定的被控主机、root用户的crontab信息

[root@localhost salt]# salt '*' cron.rm_job root '/usr/local/nginx/sbin/nginx -s reload >/dev/null 2>&1'
server02:
    removed
server03:
    removed
[root@localhost salt]# salt '*' cmd.run 'crontab -l'
server03:
    # Lines below here are managed by Salt, do not edit
server02:
    # Lines below here are managed by Salt, do not edit
[root@localhost salt]#

(4)、DNSutil模块(实现被控主机通用DNS操作)

给被控制端添加指定的hosts配置项目,即host主机记录

#salt '*' dnsutil.hosts_append /etc/hosts 192.168.112.140 server01

#salt '*' dnsutil.hosts_append /etc/hosts 192.168.112.141 server02

#salt '*' dnsutil.hosts_append /etc/hosts 192.168.112.142 server03

[root@localhost salt]# salt '*' dnsutil.hosts_append /etc/hosts 192.168.112.140 server01
server02:
    The following line was added to /etc/hosts:
    192.168.112.140 server01
server03:
    The following line was added to /etc/hosts:
    192.168.112.140 server01
[root@localhost salt]# salt '*' dnsutil.hosts_append /etc/hosts 192.168.112.141 server02
server03:
    The following line was added to /etc/hosts:
    192.168.112.141 server02
server02:
    The following line was added to /etc/hosts:
    192.168.112.141 server02
[root@localhost salt]# salt '*' dnsutil.hosts_append /etc/hosts 192.168.112.142 server03
server03:
    The following line was added to /etc/hosts:
    192.168.112.142 server03
server02:
    The following line was added to /etc/hosts:
    192.168.112.142 server03
[root@localhost salt]# salt '*' cmd.run 'grep 192.168.112.* /etc/hosts'
server03:
    192.168.112.140 server01
    192.168.112.141 server02
    192.168.112.142 server03
server02:
    192.168.112.140 server01
    192.168.112.141 server02
    192.168.112.142 server03
[root@localhost salt]#

(5)、file模块(被控主机文件常见操作,包括文件读写、权限、查找、校验等)

# salt '*' file.get_sum /etc/hosts md5

# salt '*' file.stats /etc/hosts

[root@localhost salt]# salt '*' file.get_sum /etc/hosts md5
server03:
    7895e4dd8df907aa29d026a75f2a035a
server02:
    7895e4dd8df907aa29d026a75f2a035a
[root@localhost salt]# salt '*' file.stats /etc/hosts
server02:
    ----------
    atime:
        1496299480.63
    ctime:
        1496299455.14
    gid:
        0
    group:
        root
    inode:
        67128992
    mode:
        0644
    mtime:
        1496299455.14
    size:
        234
    target:
        /etc/hosts
    type:
        file
    uid:
        0
    user:
        root
server03:
    ----------
    atime:
        1496299480.62
    ctime:
        1496299455.14
    gid:
        0
    group:
        root
    inode:
        67109270
    mode:
        0644
    mtime:
        1496299455.14
    size:
        234
    target:
        /etc/hosts
    type:
        file
    uid:
        0
    user:
        root
[root@localhost salt]#

(6)、network模块(返回被控主机网络信息)

# salt '*' network.ip_addrs

# salt '*' network.interfaces

[root@localhost salt]# salt '*' network.ip_addrs
server03:
    - 192.168.112.142
server02:
    - 192.168.112.141
[root@localhost salt]# salt '*' network.interfaces
server02:
    ----------
    eth0:
        ----------
        hwaddr:
            00:0c:29:0b:28:95
        inet:
            |_
              ----------
              address:
                  192.168.112.141
              broadcast:
                  192.168.112.255
              label:
                  eth0
              netmask:
                  255.255.255.0
        inet6:
            |_
              ----------
              address:
                  fe80::bf36:72fd:ae66:3183
              prefixlen:
                  64
              scope:
                  link
        up:
            True
    lo:
        ----------
        hwaddr:
            00:00:00:00:00:00
        inet:
            |_
              ----------
              address:
                  127.0.0.1
              broadcast:
                  None
              label:
                  lo
              netmask:
                  255.0.0.0
        inet6:
            |_
              ----------
              address:
                  ::1
              prefixlen:
                  128
              scope:
                  host
        up:
            True
server03:
    ----------
    eth0:
        ----------
        hwaddr:
            00:0c:29:63:9d:12
        inet:
            |_
              ----------
              address:
                  192.168.112.142
              broadcast:
                  192.168.112.255
              label:
                  eth0
              netmask:
                  255.255.255.0
        inet6:
            |_
              ----------
              address:
                  fe80::7f27:a270:df5d:d68
              prefixlen:
                  64
              scope:
                  link
        up:
            True
    lo:
        ----------
        hwaddr:
            00:00:00:00:00:00
        inet:
            |_
            &nbs            
            
                                
分享题目:自动化运维之saltstack(一)安装及常用方法
本文链接:http://csdahua.cn/article/jjooec.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流