自动化运维

自动化运维介绍

saltstack安装

https://www.jianshu.com/p/624b9cf51c64

1.两台机器都做一下host,都安装saltstack yum源 https://repo.saltstack.com/#rhel

[root@centos-02 ~]# hostname
centos-02
[root@centos-02 ~]# vim /etc/hosts
[root@centos-02 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.133.88 centos-02
192.168.133.66 centos-03
[root@centos-02 ~]# 
[root@centos-03 ~]# hostname
centos-03
[root@centos-03 ~]# vim /etc/hosts
[root@centos-03 ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.133.88 centos-02
192.168.133.66 centos-03

[root@centos-03 ~]# 
[root@centos-02 ~]# sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm
[root@centos-03 ~]# sudo yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest-2.el7.noarch.rpm

2.查看下yum源安装的包

[root@centos-02 ~]# yum list |grep salt

3.服务器安装两个包,客户端安装一个包

[root@centos-02 ~]# yum install -y salt-master salt-minion
[root@centos-03 ~]# yum install -y salt-minion

1.查看已安装的包

[root@centos-02 ~]# rpm -qa |grep salt
salt-master-2018.3.0-1.el7.noarch
salt-repo-latest-2.el7.noarch
salt-2018.3.0-1.el7.noarch
salt-minion-2018.3.0-1.el7.noarch
[root@centos-02 ~]# 

2.如果将那台机器作为控制中心就安装saltmaster,如果不是控制中心只安装一个saltminion就可以了

3.修改配置文件,将master前面的注释去掉,修改为自己的主机名 

[root@centos-02 ~]# vim /etc/salt/minion
[[root@centos-02 ~]# cat /etc/salt/minion|grep 'master: centos-02'
master: centos-02
[root@centos-02 ~]# 
[root@centos-03 ~]# vim /etc/salt/minion
[root@centos-03 ~]# cat /etc/salt/minion|grep 'centos-02'
master: centos-02
[root@centos-03 ~]# 

4.启动minion,minion是不监听端口的

[root@centos-03 ~]# systemctl start salt-minion
[root@centos-03 ~]# ps aux|grep salt
root       3523 32.5  2.1 313608 21292 ?        Ss   22:43   0:04 /usr/bin/python /usr/bin/salt-minion
root       3533 51.3  2.7 455036 27640 ?        Dl   22:43   0:03 /usr/bin/python /usr/bin/salt-minion
root       3541  0.3  2.0 410996 20064 ?        S    22:43   0:00 /usr/bin/python /usr/bin/salt-minion
root       3543  0.0  0.0 112664   932 pts/0    R+   22:43   0:00 grep --color=auto salt
[root@centos-03 ~]# netstat -lntp
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      1365/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2155/master         
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      1212/zabbix_agentd  
tcp        0      0 192.168.133.66:27017    0.0.0.0:*               LISTEN      2276/mongod         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      2276/mongod         
tcp6       0      0 :::3306                 :::*                    LISTEN      1591/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      1365/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2155/master         
tcp6       0      0 :::10050                :::*                    LISTEN      1212/zabbix_agentd  
[root@centos-03 ~]# 

5.启动marster(如果启动失败解决方案:sudo pip install --upgrade psutil

[root@centos-02 ~]# systemctl start salt-minion
[root@centos-02 ~]# 
[root@centos-02 ~]# systemctl start salt-master
[root@centos-02 ~]# ps aux|grep salt
root       3838  6.5  4.1 396068 41556 ?        Ss   23:15   0:03 /usr/bin/python /usr/bin/salt-master
root       3847  0.0  2.0 314108 20896 ?        S    23:15   0:00 /usr/bin/python /usr/bin/salt-master
root       3852  0.3  3.5 476912 35224 ?        Sl   23:15   0:00 /usr/bin/python /usr/bin/salt-master
root       3855  0.0  3.4 394984 34744 ?        S    23:15   0:00 /usr/bin/python /usr/bin/salt-master
root       3856  4.8  3.9 405652 39740 ?        S    23:15   0:02 /usr/bin/python /usr/bin/salt-master
root       3857  2.2  3.5 396068 35488 ?        S    23:15   0:01 /usr/bin/python /usr/bin/salt-master
root       3858  0.2  3.5 576316 35972 ?        Sl   23:15   0:00 /usr/bin/python /usr/bin/salt-master
root       3865 13.5  4.1 402888 41708 ?        S    23:15   0:06 /usr/bin/python /usr/bin/salt-master
root       3866  1.3  3.5 469800 35764 ?        Sl   23:15   0:00 /usr/bin/python /usr/bin/salt-master
root       3868 12.5  4.1 401372 41268 ?        R    23:15   0:05 /usr/bin/python /usr/bin/salt-master
root       3869 12.1  4.1 401380 41448 ?        R    23:15   0:05 /usr/bin/python /usr/bin/salt-master
root       3870 12.3  4.1 401376 41460 ?        R    23:15   0:05 /usr/bin/python /usr/bin/salt-master
root       3872 12.6  4.1 401508 41544 ?        R    23:15   0:05 /usr/bin/python /usr/bin/salt-master
root       3895  3.0  0.0 112664   936 pts/0    R+   23:16   0:00 grep --color=auto salt
root       3896  0.0  4.0 401760 40456 ?        R    23:16   0:00 /usr/bin/python /usr/bin/salt-master
[root@centos-02 ~]# netstat -lntp
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      1041/sshd           
tcp        0      0 0.0.0.0:4505            0.0.0.0:*               LISTEN      3852/python         
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1867/master         
tcp        0      0 0.0.0.0:4506            0.0.0.0:*               LISTEN      3858/python         
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      1406/zabbix_server  
tcp        0      0 192.168.133.88:27017    0.0.0.0:*               LISTEN      2147/mongod         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      2147/mongod         
tcp6       0      0 :::3306                 :::*                    LISTEN      1394/mysqld         
tcp6       0      0 :::80                   :::*                    LISTEN      743/httpd           
tcp6       0      0 :::22                   :::*                    LISTEN      1041/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1867/master         
tcp6       0      0 :::10051                :::*                    LISTEN      1406/zabbix_server  
[root@centos-02 ~]# 

saltstack配置认证

1.认证指定主机03服务器,现在已经接受了03服务器的公钥

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

2.在minions目录生成了centos-03文件并且文件内容和03服务器上的公钥内容是一样的。

[root@centos-02 ~]# 
[root@centos-02 ~]# ls /etc/salt/pki/master/minions
centos-03
[root@centos-02 ~]# cat /etc/salt/pki/master/minions/centos-03 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnKfs8F87Zu10FZritvJs
nbjsogW1Wtz5a3b6hRWGyQfMQEO/FYTQ0X/nL2Dvb5UVHol7SBTqmigFYU3oyXg+
86oGQD2EVQDDP2e+Zx20WhusMTLNr2XEDs+D6cK/42SFXkRVACh9KZONJM1sc9gt
5JJqMRJKS/9u79Pk2wStRFZ+PaxPdCSMuuIX7fL4E2uQHpqPTjNO13+H288wQQSv
iN+enII4TLovcm2oURihVdfeZFmcMglKrgAMDK8ikXTkIeaf1ovZEfjTHO44ug9X
Qet/wPLdXoeMA//niWTFvvfUGzY2kZLM8UiI2VCikG6Rmh1HtZUdqD3Z9ZClM4Mj
UwIDAQAB
-----END PUBLIC KEY-----[root@centos-02 ~]# 
[root@centos-03 ~]# cat /etc/salt/pki/minion/minion.pub 
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnKfs8F87Zu10FZritvJs
nbjsogW1Wtz5a3b6hRWGyQfMQEO/FYTQ0X/nL2Dvb5UVHol7SBTqmigFYU3oyXg+
86oGQD2EVQDDP2e+Zx20WhusMTLNr2XEDs+D6cK/42SFXkRVACh9KZONJM1sc9gt
5JJqMRJKS/9u79Pk2wStRFZ+PaxPdCSMuuIX7fL4E2uQHpqPTjNO13+H288wQQSv
iN+enII4TLovcm2oURihVdfeZFmcMglKrgAMDK8ikXTkIeaf1ovZEfjTHO44ug9X
Qet/wPLdXoeMA//niWTFvvfUGzY2kZLM8UiI2VCikG6Rmh1HtZUdqD3Z9ZClM4Mj
UwIDAQAB
-----END PUBLIC KEY-----[root@centos-03 ~]# 

3.再给02本机做一个access

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

1.删掉所有的认证主机后发现minions目录下面也没内容了

[root@centos-02 ~]# salt-key -D
The following keys are going to be deleted:
Accepted Keys:
centos-02
centos-03
Proceed? [N/y] Y
Key for minion centos-02 deleted.
Key for minion centos-03 deleted.
[root@centos-02 ~]# ls /etc/salt/pki/master/minions
[root@centos-02 ~]# 

2.认证所有主机

[root@centos-02 ~]# ls /etc/salt/pki/master/minions
[root@centos-02 ~]# salt-key -A -y
The key glob '*' does not match any unaccepted keys.
[root@centos-02 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
Rejected Keys:
[root@centos-02 ~]# systemctl restart salt-minion (重启让master端识别秘钥端)
[root@centos-03 ~]# systemctl restart salt-minion (重启让master端识别秘钥端)
[root@centos-03 ~]#
[root@centos-02 ~]# salt-key
Accepted Keys:
Denied Keys:
Unaccepted Keys:
centos-02
Rejected Keys:
[root@centos-02 ~]# salt-key -A -y
The following keys are going to be accepted:
Unaccepted Keys:
centos-02
centos-03
Key for minion centos-02 accepted.
Key for minion centos-03 accepted.
[root@centos-02 ~]# 

saltstack远程执行命令

1.ping一下看看通不通

[root@centos-02 ~]# salt '*' test.ping
centos-03:
    True
centos-02:
    True
[root@centos-02 ~]# 

2.执行系统命令hostname

[root@centos-02 ~]# salt '*' cmd.run "hostname"
centos-03:
    centos-03
centos-02:
    centos-02
[root@centos-02 ~]# 

3.*号可以换成主机名

[root@centos-02 ~]# salt 'centos-03' cmd.run "hostname"
centos-03:
    centos-03
[root@centos-02 ~]# 

4.支持正则表达式

[root@centos-02 ~]# salt 'centos-*' cmd.run "hostname"
centos-03:
    centos-03
centos-02:
    centos-02
[root@centos-02 ~]# salt 'centos-0[23]' cmd.run "hostname"
centos-03:
    centos-03
centos-02:
    centos-02
[root@centos-02 ~]# 

5.-L已列表形式

[root@centos-02 ~]# salt -L 'centos-02,centos-03' test.ping
centos-03:
    True
centos-02:
    True
[root@centos-02 ~]#

6.-E执行正则

[root@centos-02 ~]# salt -E 'centos-[0-9]+' test.ping
centos-03:
    True
centos-02:
    True
[root@centos-02 ~]# 

grains

1.查看信息

[root@centos-02 ~]# salt 'centos-03' grains.ls^C
[root@centos-02 ~]# salt 'centos-03' grains.items

1.自定义信息

[root@centos-03 ~]# vim /etc/salt/grains
[root@centos-03 ~]# cat !$
cat /etc/salt/grains
role:nginx
env:test
[root@centos-03 ~]# systemctl restart salt-minion
[root@centos-03 ~]# 
[root@centos-02 ~]# salt '*' grains.item role env
centos-03:
    ----------
    env:
    role:
centos-02:
    ----------
    env:
    role:
[root@centos-02 ~]# 
[root@centos-02 ~]# salt -G role:nginx cmd.run 'hostname'

pillar  

 1.配置pillar,编辑配置文件去掉pillar_roots和后面两行下面的#号

[root@centos-02 ~]# vim /etc/salt/master
[root@centos-02 ~]# cat /etc/salt/master|grep pillar_roots
pillar_roots:
[root@centos-02 ~]# 
[root@centos-02 ~]# systemctl restart salt-master
[root@centos-02 ~]# ls /srv/pillar
ls: cannot access /srv/pillar: No such file or directory
[root@centos-02 ~]# mkdir /srv/pillar
[root@centos-02 ~]# cd /srv/pillar/
[root@centos-02 pillar]# vim test.sls
[root@centos-02 pillar]# cat test.sls 
conf: /etc/123.conf
[root@centos-02 pillar]# vi top.sls
[root@centos-02 pillar]# cat top.sls 
base:
  'centos-02':
    - test
[root@centos-02 pillar]# ls
test.sls  top.sls
[root@centos-02 pillar]# 

  

2.添加多个test,不用重启服务,因为改过master配置文件了它会自动找到的,只有修改/etc/salt/master文件才需要重启服务

[root@centos-02 pillar]# vi top.sls
[root@centos-02 pillar]# cat top.sls 
base:
  'centos-02':
    - test
    - test2
[root@centos-02 pillar]# ls
test.sls  top.sls
[root@centos-02 pillar]# cp test.sls test2.sls
[root@centos-02 pillar]# vim test2.sls 
[root@centos-02 pillar]# cat test2.sls 
dir: /data/123
[root@centos-02 pillar]# 

3.测试,刷新下

[root@centos-02 pillar]# salt '*' saltutil.refresh_pillar
centos-02:
    True
centos-03:
    True
[root@centos-02 pillar]# salt '*' pillar.item conf
centos-03:
    ----------
    conf:
centos-02:
    ----------
    conf:
        /etc/123.conf
[root@centos-02 pillar]# salt '*' pillar.item conf dir
centos-03:
    ----------
    conf:
    dir:
centos-02:
    ----------
    conf:
        /etc/123.conf
    dir:
        /data/123
[root@centos-02 pillar]# 
[root@centos-02 pillar]# cat top.sls 
base:
  'centos-02':
    - test
    - test2
[root@centos-02 pillar]# vim top.sls 
[root@centos-02 pillar]# cat top.sls 
base:
  'centos-02':
    - test
  'centos-03':	
    - test2
[root@centos-02 pillar]# salt '*' saltutil.refresh_pillar
centos-03:
    True
centos-02:
    True
[root@centos-02 pillar]# salt '*' pillar.item conf dir
centos-03:
    ----------
    conf:
    dir:
centos-02:
    ----------
    conf:
    dir:
[root@centos-02 pillar]# 

安装配置httpd

1.配置配置文件,找到file_roots打开注释及下面两行的注释,这个是定义主入口的

[root@centos-02 pillar]# vim /etc/salt/master
[root@centos-02 pillar]# cat /etc/salt/master|grep file_roots
file_roots:
#file_roots:
# The master_roots setting configures a master-only copy of the file_roots dictionary,
# "roots" which uses the "file_roots" option.
[root@centos-02 pillar]# 
[root@centos-02 pillar]# systemctl restart salt-master
[root@centos-02 pillar]# mkdir /srv/salt
[root@centos-02 pillar]# cd /srv/salt/
[root@centos-02 salt]# vim /srv/salt/top.sls
[root@centos-02 salt]# cat !$
cat /srv/salt/top.sls
base:
  '*':
    - httpd
[root@centos-02 salt]# systemctl restart salt-master
[root@centos-02 salt]# 

1.创建httpd.sls

[root@centos-02 salt]# vim httpd.sls
[root@centos-02 salt]# cat !$
cat httpd.sls
http-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
[root@centos-02 salt]# 
[root@centos-02 salt]# salt 'centos-02' state.highstate

2.httpd成功了

[root@centos-02 salt]# ps aux |grep httpd
root      12764  1.0  1.6 394396 16212 ?        Ss   23:15   0:00 /usr/sbin/httpd -DFOREGROUND
apache    12765  0.0  0.8 394532  8216 ?        S    23:15   0:00 /usr/sbin/httpd -DFOREGROUND
apache    12766  0.0  0.8 394532  8216 ?        S    23:15   0:00 /usr/sbin/httpd -DFOREGROUND
apache    12767  0.0  0.8 394532  8216 ?        S    23:15   0:00 /usr/sbin/httpd -DFOREGROUND
apache    12768  0.0  0.8 394532  8216 ?        S    23:15   0:00 /usr/sbin/httpd -DFOREGROUND
apache    12769  0.0  0.8 394532  8216 ?        S    23:15   0:00 /usr/sbin/httpd -DFOREGROUND
root      12890  0.0  0.0 112664   936 pts/0    R+   23:16   0:00 grep --color=auto http
[root@centos-02 salt]# 

3.涉及到的配置文件

[root@centos-02 salt]# date
Wed May 30 23:19:18 CST 2018
[root@centos-02 salt]# cat top.sls 
base:
  '*':
    - httpd
[root@centos-02 salt]# cat httpd.sls 
http-service:
  pkg.installed:
    - names:
      - httpd
      - httpd-devel
  service.running:
    - name: httpd
    - enable: True
[root@centos-02 salt]# 
[root@centos-02 salt]# ls /lib/systemd/system/httpd.service 
/lib/systemd/system/httpd.service
[root@centos-02 salt]# 

配置管理文件

https://www.kevintaolinux.cn/?p=199

[root@centos-02 ~]# vim /srv/salt/test.sls
[root@centos-02 ~]# cat /srv/salt/test.sls 
file_test: (id)
  file.managed:
    - name: /tmp/linux.com (对方机器的路径)
    - source: salt://test/123/1.txt (从那里来)
    - user: root
    - group: root
    - mode: 600
[root@centos-02 ~]# cd /srv/salt/
[root@centos-02 salt]# mkdir test
[root@centos-02 salt]# cd test
[root@centos-02 test]# mkdir 123
[root@centos-02 test]# cp /etc/inittab ../test/123/1.txt
[root@centos-02 test]# cd ../
[root@centos-02 salt]# vim top.sls 
[root@centos-02 salt]# cat top.sls (总入口top,top找到了test)
base:
  '*':
    - test
[root@centos-02 salt]# salt 'centos-03' state.highstate
[root@centos-02 salt]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: file_test
    Function: file.managed
        Name: /tmp/linux.com
      Result: True
     Comment: File /tmp/linux.com updated
     Started: 22:34:02.956919
    Duration: 1624.217 ms
     Changes:   
              ----------
              diff:
                  New file

Summary for centos-03
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   1.624 s
[root@centos-02 salt]#

2.检查minion上是否生成了linux.com

[root@centos-03 ~]# ls -lt /tmp/linux.com 
-rw------- 1 root root 511 5月  31 22:34 /tmp/linux.com
[root@centos-03 ~]# 

配置管理目录  

1.minion上不仅有testdir目录还创建了1.txt文件

[root@centos-02 salt]# vim test_dir.sls
[root@centos-02 salt]# cat 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
[root@centos-02 salt]# vim top.sls 
[root@centos-02 salt]# cat top.sls 
base:
  '*':
    - test
    - test_dir
[root@centos-02 salt]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: file_test
    Function: file.managed
        Name: /tmp/linux.com
      Result: True
     Comment: File /tmp/linux.com is in the correct state
     Started: 22:57:30.893487
    Duration: 938.246 ms
     Changes:   
----------
          ID: file_dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 22:57:31.857699
    Duration: 1311.945 ms
     Changes:   
              ----------
              /tmp/testdir/1.txt:
                  ----------
                  diff:
                      New file
                  mode:
                      0640

Summary for centos-03
------------
Succeeded: 2 (changed=1)
Failed:    0
------------
Total states run:     2
Total run time:   2.250 s
[root@centos-02 salt]# 
[root@centos-03 ~]# ls -l /tmp/testdir/
总用量 4
-rw-r----- 1 root root 511 5月  31 22:57 1.txt
[root@centos-03 ~]# 

2.现在在test上创建一个新的目录并创建一个文件

[root@centos-02 salt]# cd test
[root@centos-02 test]# ls
123
[root@centos-02 test]# mkdir abc
[root@centos-02 test]# touch 1.txt
[root@centos-02 test]# rm -rf 1
123/   1.txt  
[root@centos-02 test]# rm -rf 123/
[root@centos-02 test]# ls
1.txt  abc
[root@centos-02 test]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: file_test
    Function: file.managed
        Name: /tmp/linux.com
      Result: False
     Comment: Source file salt://test/123/1.txt not found
     Started: 23:02:40.435153
    Duration: 733.812 ms
     Changes:   
----------
          ID: file_dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: False
     Comment: Recurse failed: none of the specified sources were found
     Started: 23:02:41.171355
    Duration: 139.599 ms
     Changes:   

Summary for centos-03
------------
Succeeded: 0
Failed:    2
------------
Total states run:     2
Total run time: 873.411 ms
ERROR: Minions returned with non-zero exit code
[root@centos-02 test]#

3.报错是因为我们把1.txt删掉了,为了不影响我们实验我们改下配置

[root@centos-02 test]# cd ../
[root@centos-02 salt]# ls
httpd.sls  test  test_dir.sls  test.sls  top.sls
[root@centos-02 salt]# vim test.sls 
[root@centos-02 salt]# vim test.top
[root@centos-02 salt]# vim top.sls 
[root@centos-02 salt]# cat top.sls 
base:
  '*':
    - test_dir
[root@centos-02 salt]# cat 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
[root@centos-02 salt]# mkdir test/123/
[root@centos-02 salt]# mv test/abc/ test/1.txt test/123/
[root@centos-02 salt]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: file_dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 23:10:26.183198
    Duration: 1132.273 ms
     Changes:   
              ----------
              /tmp/testdir/1.txt:
                  ----------
                  diff:
                      --- 
                      +++ 
                      @@ -1,17 +0,0 @@
                      -# inittab is no longer used when using systemd.
                      -#
                      -# ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
                      -#
                      -# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
                      -#
                      -# systemd uses 'targets' instead of runlevels. By default, there are two main targets:
                      -#
                      -# multi-user.target: analogous to runlevel 3
                      -# graphical.target: analogous to runlevel 5
                      -#
                      -# To view current default target, run:
                      -# systemctl get-default
                      -#
                      -# To set a default target, run:
                      -# systemctl set-default TARGET.target
                      -#

Summary for centos-03
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   1.132 s
[root@centos-02 salt]# 

4.检查是否生成了abc目录,没有abc目录,这是因为saltstack有一个特性如果这个目录是空目录它就不去同步了,如果想同步怎么办,需要在这个目录搞一个文件,哪怕是空文件也行

[root@centos-03 ~]# ls /tmp/testdir/
1.txt
[root@centos-03 ~]# 
[root@centos-02 salt]# touch test/123/abc/2.txt
[root@centos-02 salt]# tree test
test
└── 123
    ├── 1.txt
    └── abc
        └── 2.txt

2 directories, 2 files
[root@centos-02 salt]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: file_dir
    Function: file.recurse
        Name: /tmp/testdir
      Result: True
     Comment: Recursively updated /tmp/testdir
     Started: 23:18:07.681431
    Duration: 1985.497 ms
     Changes:   
              ----------
              /tmp/testdir/abc:
                  ----------
                  /tmp/testdir/abc:
                      New Dir
              /tmp/testdir/abc/2.txt:
                  ----------
                  diff:
                      New file
                  mode:
                      0640

Summary for centos-03
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   1.985 s
[root@centos-02 salt]# 

5.再次查看发现我x生成了

[root@centos-03 ~]# ls /tmp/testdir/
1.txt  abc
[root@centos-03 ~]# ls /tmp/testdir/abc/
2.txt
[root@centos-03 ~]# 

配置管理远程命令

 1.新建shell_test.sls文件

[root@centos-02 salt]# vim /srv/salt/shell_test.sls
[root@centos-02 salt]# cat /srv/salt/shell_test.sls 
shell_test:  (文件的id)
  cmd.script: (加载的模块)
    - source: salt://test/1.sh (脚本路径)
    - user: root (执行的用户)
[root@centos-02 salt]# vim /srv/salt/test/1.sh (编辑脚本)
[root@centos-02 salt]# cat /srv/salt/test/1.sh 
#!/bin/bash
touch /tmp/111.txt
if [ ! -d /tmp/1233 ]
then
  mkdir /tmp/1233
fi
[root@centos-02 salt]# vim top.sls 
[root@centos-02 salt]# cat top.sls 
base:
  '*':
    - shell_test
[root@centos-02 salt]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: shell_test
    Function: cmd.script
      Result: True
     Comment: Command 'shell_test' run
     Started: 21:46:54.865773
    Duration: 580.834 ms
     Changes:   
              ----------
              pid:
                  5481
              retcode:
                  0
              stderr:
              stdout:

Summary for centos-03
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 580.834 ms
[root@centos-02 salt]# 

2.验证是否执行成功,查看03服务器是否有111.txt文件和1233目录,发现有,说明脚本执行成功了。

[root@centos-03 tmp]# ls -lt
总用量 4
drwxr-xr-x 2 root   root     6 6月   3 21:46 1233
-rw-r--r-- 1 root   root     0 6月   3 21:46 111.txt

配置管理计划任务

1.编辑任务计划文件

[root@centos-02 salt]# vim /srv/salt/cron_test.sls
[root@centos-02 salt]# cat /srv/salt/cron_test.sls 
cron_test:
  cron.present:
    - name: /bin/touch /tmp/111.txt (计划任务执行的文件)
    - user: root (用户)
    - minute: '*' (分)
    - hour: 20 (时)
    - daymonth: '*' (日)
    - month: '*' (月)
    - dayweek: '*' (周)
[root@centos-02 salt]# 

2.修改top.sls

[root@centos-02 salt]# vim top.sls 
[root@centos-02 salt]# cat top.sls 
base:
  '*':
    - cron_test
[root@centos-02 salt]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: cron_test
    Function: cron.present
        Name: /bin/touch /tmp/111.txt
      Result: True
     Comment: Cron /bin/touch /tmp/111.txt added to root's crontab
     Started: 23:56:36.086544
    Duration: 4184.541 ms
     Changes:   
              ----------
              root:
                  /bin/touch /tmp/111.txt

Summary for centos-03
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   4.185 s
[root@centos-02 salt]# 

3.minion03上验证,成功添加了计划任务

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

4.删除cron

[root@centos-02 salt]# vim /srv/salt/cron_test.sls 
[root@centos-02 salt]# cat /srv/salt/cron_test.sls 
cron_test:
  cron.absent:
    - name: /bin/touch /tmp/111.txt
[root@centos-02 salt]# salt 'centos-03' state.highstate
centos-03:
----------
          ID: cron_test
    Function: cron.absent
        Name: /bin/touch /tmp/111.txt
      Result: True
     Comment: Cron /bin/touch /tmp/111.txt removed from root's crontab
     Started: 00:02:56.270655
    Duration: 3511.174 ms
     Changes:   
              ----------
              root:
                  /bin/touch /tmp/111.txt

Summary for centos-03
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time:   3.511 s
[root@centos-02 salt]# 
[root@centos-03 tmp]# crontab -l
# Lines below here are managed by Salt, do not edit
[root@centos-03 tmp]# 

其他命令

1.拷贝master上的文件到客户端

[root@centos-02 salt]# cp /etc/passwd test/1.txt
[root@centos-02 salt]# salt '*' cp.get_file salt://test/1.txt /tmp/123.txt
centos-03:
    /tmp/123.txt
centos-02:
    /tmp/123.txt
[root@centos-02 salt]# ls -l /tmp/123.txt 
-rw-r--r-- 1 root root 2060 Jun  4 22:14 /tmp/123.txt
[root@centos-02 salt]# 

2.拷贝目录

[root@centos-02 salt]# ls test
123  1.sh  1.txt
[root@centos-02 salt]# salt '*' cp.get_dir salt://test/123 /tmp/
centos-02:
    - /tmp//123/1.txt
    - /tmp//123/abc/2.txt
centos-03:
    - /tmp//123/1.txt
    - /tmp//123/abc/2.txt
[root@centos-02 salt]# 

3.显示存活的minion

[root@centos-02 salt]# salt-run manage.up
- centos-02
- centos-03
[root@centos-02 salt]# 

4.命令行执行shell上的脚本

[root@centos-02 salt]# salt '*' cmd.script salt://test/1.sh
centos-03:
    ----------
    pid:
        7204
    retcode:
        0
    stderr:
    stdout:
centos-02:
    ----------
    pid:
        34092
    retcode:
        0
    stderr:
    stdout:
[root@centos-02 salt]# 

salt-ssh使用

1.安装yum包

[root@centos-02 salt]# yum install -y salt-ssh

2.编辑roster配置文件

[root@centos-02 yum.repos.d]# vim /etc/salt/roster 
[root@centos-02 yum.repos.d]# cat /etc/salt/roster 
# Sample salt-ssh config file
#web1:
#  host: 192.168.42.1 # The IP addr or DNS hostname
#  user: fred         # Remote executions will be executed as user fred
#  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
#  sudo: True         # Whether to sudo to root, not enabled by default
#web2:
#  host: 192.168.42.2
centos-02:
  host: 192.168.133.88
  user: root
  passwd: root
centos-03:
  host: 192.168.133.66
  user: root
  passwd: root

[root@centos-02 yum.repos.d]# 

3.登录成功执行w命令

[root@centos-02 yum.repos.d]# vim /etc/salt/roster 
[root@centos-02 yum.repos.d]# 
[root@centos-02 yum.repos.d]# salt-ssh --key-deploy '*' -r 'w'
centos-03:
    ----------
    retcode:
        0
    stderr:
    stdout:
        root@192.168.133.66's password: 
         23:47:54 up  8:50,  2 users,  load average: 0.69, 0.28, 0.23
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/1    192.168.133.1    21:52    1:35m  0.20s  0.20s -bash
        root     pts/2    192.168.133.1    22:52   55:21   0.05s  0.05s -bash
centos-02:
    ----------
    retcode:
        0
    stderr:
    stdout:
        root@192.168.133.88's password: 
         23:47:57 up  8:49,  2 users,  load average: 1.03, 0.93, 1.42
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/1    192.168.133.1    21:52    1:22m  0.54s  0.54s -bash
        root     pts/2    192.168.133.1    22:52   45.00s 16.07s  0.21s salt-ssh
[root@centos-02 yum.repos.d]# ssh centos-03
The authenticity of host 'centos-03 (192.168.133.66)' can't be established.
ECDSA key fingerprint is bf:dc:4b:e3:1c:99:f4:12:6f:d0:a8:e0:13:8a:d0:dd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'centos-03' (ECDSA) to the list of known hosts.
root@centos-03's password: 
Last login: Mon Jun  4 22:52:34 2018 from 192.168.133.1
[root@centos-03 ~]# ^C
[root@centos-03 ~]# exit
logout
Connection to centos-03 closed.
[root@centos-02 yum.repos.d]# salt-ssh --key-deploy '*' -r 'w'
centos-03:
    ----------
    retcode:
        0
    stderr:
    stdout:
         23:49:12 up  8:51,  2 users,  load average: 0.20, 0.22, 0.21
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/1    192.168.133.1    21:52    1:37m  0.20s  0.20s -bash
        root     pts/2    192.168.133.1    22:52   56:39   0.05s  0.05s -bash
centos-02:
    ----------
    retcode:
        0
    stderr:
    stdout:
         23:49:12 up  8:50,  2 users,  load average: 0.92, 0.90, 1.37
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/1    192.168.133.1    21:52    1:23m  0.54s  0.54s -bash
        root     pts/2    192.168.133.1    22:52    8.00s  2.55s  0.15s /usr/bin/python /usr/bin/salt-ssh --key-deploy * -r w
[root@centos-02 yum.repos.d]# 

4.查看更改公钥时间

[root@centos-02 yum.repos.d]# ls -l /root/.ssh/authorized_keys 
-r--------. 1 root root 1188 Jun  4 23:48 /root/.ssh/authorized_keys
[root@centos-02 yum.repos.d]# date
Mon Jun  4 23:52:12 CST 2018
[root@centos-02 yum.repos.d]# 
[root@centos-03 ~]# ls -l /root/.ssh/authorized_keys 
-rw-r--r--. 1 root root 777 6月   4 23:47 /root/.ssh/authorized_keys
[root@centos-03 ~]# date
2018年 06月 04日 星期一 23:54:07 CST
[root@centos-03 ~]# 

5.查看公钥、私钥内容

[root@centos-03 ~]# cat /root/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4Wpl8Dh8Tj4yqOphBTc0O5nZGZF24z86LsL46rPH95Hr0tjG/V4ulyW7VBtRvMe3Rbxv92DUYwcpeaM8v7BaVCzhn/I/FxK3gXcWfQWrfKz+Zr10QBv1RG5lZDEvZvFWfZSJySywG1mq10f6h
hwvsQmazVF9sJkb4nZ61/uC9bIENQ/QwGNBd02XgTkl2WfhxG3C+dF08Cdd/iRv9ybn/6jMAFh8aGyKdeBTrlZw2ZyU64zvDSpqRsHjMypNrL/jH3vK0EYKqEmQVgbTsBpO1NCEcTXuuM+M6i7DlPfSltdMRWqkfw2rcZDkLXcxIyAuyhv7o7
7j6bEtAX2SrH9brQ== ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCw1DhoGQzR46NloLYewjjPGWpyYkVfG0IPh9wryoU2lC5Najw6P+4C3ryLezE3B2Cs0m71e8ygHi3RN5fy5AgD8D9rT5TFusOwY5yk4fXi5D7Is2ACx2HGDIXpOcUTmSfe/2Mr/wk/7sGyFj
ci7Cj88iwDvzjmOzB5AYcfkb+fhW27eDpkrteq4Y58AqMv0bi2aaH+mBzV51/Ox4/NrREaZRW323RilPMDz2mgfV2y6vcDcWZHReJAI5MHzJRcAsK13JLjgs7Tn6IczXrFKIlBIHhfvf0lte8EEbgCybZydmP9hbsO6odzsAVPeebgu5wtIzWZ
Y8GU8ORhoCelUITZ root@centos-02 [root@centos-03 ~]#
[root@centos-02 yum.repos.d]# cat /root/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4Wpl8Dh8Tj4yqOphBTc0O5nZGZF24z86LsL46rPH95Hr0tjG/V4ulyW7VBtRvMe3Rbxv92DUYwcpeaM8v7BaVCzhn/I/FxK3gXcWfQWrfKz+Zr10QBv1RG5lZDEvZvFWfZSJySywG1mq10f6hh
wvsQmazVF9sJkb4nZ61/uC9bIENQ/QwGNBd02XgTkl2WfhxG3C+dF08Cdd/iRv9ybn/6jMAFh8aGyKdeBTrlZw2ZyU64zvDSpqRsHjMypNrL/jH3vK0EYKqEmQVgbTsBpO1NCEcTXuuM+M6i7DlPfSltdMRWqkfw2rcZDkLXcxIyAuyhv7o77j
6bEtAX2SrH9brQ== ###sunyujun02 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYzwzucn1JkSSXBDNAZ9KNAbRFLUGn27xeJ/3H7bkXC8FpdNfesSuoHDHg3+RxLnOa7h5M2fLb/ThvPzpl8BA5PYdzY+adqjYzkaCubU/Yjt5GvZV0lTJN+Xsxf8X4wXQtZKQdgKKf+ejo6O
7fIlwPmypk9nd6RjgKoDe45s4jWHt0HttYCG+2IHLT+gMKcNPvkEPvRqnOlZMFW4e6fsyaBzfP+venLMU+ykuvmH9g3Sjh2dUF1wd3czxYcnxCFWbxxqkuH8VAUZFJ8DpBh3G6Cy/A4/5MzprKY/x3jpMfKbkrXkngcnfuCg9oEhTX9cNdbb3U
USrc+lQNbj3aOMmL root@sunyujun02 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCw1DhoGQzR46NloLYewjjPGWpyYkVfG0IPh9wryoU2lC5Najw6P+4C3ryLezE3B2Cs0m71e8ygHi3RN5fy5AgD8D9rT5TFusOwY5yk4fXi5D7Is2ACx2HGDIXpOcUTmSfe/2Mr/wk/7sGyFj
ci7Cj88iwDvzjmOzB5AYcfkb+fhW27eDpkrteq4Y58AqMv0bi2aaH+mBzV51/Ox4/NrREaZRW323RilPMDz2mgfV2y6vcDcWZHReJAI5MHzJRcAsK13JLjgs7Tn6IczXrFKIlBIHhfvf0lte8EEbgCybZydmP9hbsO6odzsAVPeebgu5wtIzWZ
Y8GU8ORhoCelUITZ root@centos-02 [root@centos-02 yum.repos.d]#

6.删除配置文件密码看看还能执行w命令吗

[root@centos-02 yum.repos.d]# vim /etc/salt/roster 
[root@centos-02 yum.repos.d]# cat /etc/salt/roster 
# Sample salt-ssh config file
#web1:
#  host: 192.168.42.1 # The IP addr or DNS hostname
#  user: fred         # Remote executions will be executed as user fred
#  passwd: foobarbaz  # The password to use for login, if omitted, keys are used
#  sudo: True         # Whether to sudo to root, not enabled by default
#web2:
#  host: 192.168.42.2
centos-02:
  host: 192.168.133.88
  user: root
centos-03:
  host: 192.168.133.66
  user: root

[root@centos-02 yum.repos.d]# 

7.完全可以,说明我们将公钥推送过去了,第一次需要输入密码第二次就不用了

[root@centos-02 yum.repos.d]# salt-ssh --key-deploy '*' -r 'w'
centos-03:
    ----------
    retcode:
        0
    stderr:
    stdout:
         00:06:26 up  9:08,  2 users,  load average: 0.00, 0.03, 0.10
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/1    192.168.133.1    21:52    1:54m  0.20s  0.20s -bash
        root     pts/2    192.168.133.1    22:52   10:34   0.15s  0.15s -bash
centos-02:
    ----------
    retcode:
        0
    stderr:
    stdout:
         00:06:26 up  9:07,  2 users,  load average: 0.32, 0.26, 0.60
        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
        root     pts/1    192.168.133.1    21:52    1:40m  0.54s  0.54s -bash
        root     pts/2    192.168.133.1    22:52   10.00s  3.55s  0.48s /usr/bin/python /usr/bin/salt-ssh --key-deploy * -r w
[root@centos-02 yum.repos.d]# 

ansible介绍  

http://www.ansible.com.cn/docs/intro.html

ansible安装 

1.首先yum list查看下是否有ansible包,我们安装前两个包

[root@centos-02 ~]# yum list|grep ansible
ansible.noarch                            2.5.3-1.el7                  epel     
ansible-doc.noarch                        2.5.3-1.el7                  epel     
ansible-inventory-grapher.noarch          2.4.4-1.el7                  epel     
ansible-lint.noarch                       3.4.21-1.el7                 epel     
ansible-openstack-modules.noarch          0-20140902git79d751a.el7     epel     
ansible-review.noarch                     0.13.4-1.el7                 epel     
kubernetes-ansible.noarch                 0.6.0-0.1.gitd65ebd5.el7     epel     
python2-ansible-runner.noarch             1.0.1-1.el7                  epel     
python2-ansible-tower-cli.noarch          3.3.0-2.el7                  epel     
[root@centos-02 ~]# yum install -y ansible ansible-doc

2.在02上做秘钥认证,把公钥放到03服务器上

[root@centos-02 ~]# cd /root/.ssh/
[root@centos-02 .ssh]# 
[root@centos-02 .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
11:2b:16:96:01:b4:a2:28:6a:e2:0a:46:78:b6:55:ff root@centos-02
The key's randomart image is:
+--[ RSA 2048]----+
|   .o.+o.        |
|     o.. o       |
|  . . + o        |
|o. . o o .       |
|=.o .   S        |
|+o o     .       |
|+o.       E      |
|*                |
|o.               |
+-----------------+
[root@centos-02 .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  jump  jump.pub  known_hosts  zhangsan  zhangsan.pub
[root@centos-02 .ssh]# 

3.将生成的公钥放到03服务器上

[root@centos-02 .ssh]# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD810lCxBhCtMzrmSx302M6PUMKRxNK0TBrFQzwbsL8KAcgJXvH0ysc5OIw8lEFpIQirmZODVHg85I/2u3Xgz9yEf5ucF33R0xjJpcD0sq9LvMj0A2lO2RppsjgNyA4wcYcxfOg9HcYI97622l
ssO5012qWbr6k9Bv3QOD0r+F6mdoFXvXFIF2YL//60kPcPXzyPgW6ErDkA1Pum9DQOiys6iN/tH4iCa7ynRzCkLlVxt21V8mrewAldn/JOMuJVEcUtKrmtH+6wny6sJHqEStlF46xZyIH1/SeDyd8oCDwC+PU2HLTc3hishe/ny8ofm9QcC+zgb
BSPnm+I1+/vwfZ root@centos-02 [root@centos-02 .ssh]# [root@centos-03 ~]# vim .ssh/authorized_keys [root@centos-03 ~]# cat .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4Wpl8Dh8Tj4yqOphBTc0O5nZGZF24z86LsL46rPH95Hr0tjG/V4ulyW7VBtRvMe3Rbxv92DUYwcpeaM8v7BaVCzhn/I/FxK3gXcWfQWrfKz+Zr10QBv1RG5lZDEvZvFWfZSJySywG1mq10f6hhw
vsQmazVF9sJkb4nZ61/uC9bIENQ/QwGNBd02XgTkl2WfhxG3C+dF08Cdd/iRv9ybn/6jMAFh8aGyKdeBTrlZw2ZyU64zvDSpqRsHjMypNrL/jH3vK0EYKqEmQVgbTsBpO1NCEcTXuuM+M6i7DlPfSltdMRWqkfw2rcZDkLXcxIyAuyhv7o77j6b
EtAX2SrH9brQ== ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCw1DhoGQzR46NloLYewjjPGWpyYkVfG0IPh9wryoU2lC5Najw6P+4C3ryLezE3B2Cs0m71e8ygHi3RN5fy5AgD8D9rT5TFusOwY5yk4fXi5D7Is2ACx2HGDIXpOcUTmSfe/2Mr/wk/7sGyFjc
i7Cj88iwDvzjmOzB5AYcfkb+fhW27eDpkrteq4Y58AqMv0bi2aaH+mBzV51/Ox4/NrREaZRW323RilPMDz2mgfV2y6vcDcWZHReJAI5MHzJRcAsK13JLjgs7Tn6IczXrFKIlBIHhfvf0lte8EEbgCybZydmP9hbsO6odzsAVPeebgu5wtIzWZY8
GU8ORhoCelUITZ root@centos-02 sh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD810lCxBhCtMzrmSx302M6PUMKRxNK0TBrFQzwbsL8KAcgJXvH0ysc5OIw8lEFpIQirmZODVHg85I/2u3Xgz9yEf5ucF33R0xjJpcD0sq9LvMj0A2lO2RppsjgNyA4wcYcxfOg9HcYI97622ls
sO5012qWbr6k9Bv3QOD0r+F6mdoFXvXFIF2YL//60kPcPXzyPgW6ErDkA1Pum9DQOiys6iN/tH4iCa7ynRzCkLlVxt21V8mrewAldn/JOMuJVEcUtKrmtH+6wny6sJHqEStlF46xZyIH1/SeDyd8oCDwC+PU2HLTc3hishe/ny8ofm9QcC+zgbB
SPnm+I1+/vwfZ root@centos-02 [root@centos-03 ~]#

4.测试02ssh是否能够正常登录03,ssh登录成功。 

[root@centos-02 .ssh]# ssh centos-03
Last login: Wed Jun  6 21:12:41 2018 from 192.168.133.1
[root@centos-03 ~]# 

5.编辑ansible配置文件,配置主机组,我们管理机器可以分成多个组,我们实验添加一个testhost组,并添加两台主机,可以写ip或者主机名,写主机名需要先在/etc/host下配置下ip主机名对应关系  

[root@centos-03 ~]# logout
Connection to centos-03 closed.
[root@centos-02 .ssh]# vim /etc/ansible/hosts
[testhost]
127.0.0.1
centos-03
[root@centos-02 .ssh]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.133.88 centos-02
192.168.133.66 centos-03
[root@centos-02 .ssh]#

6.本机也需要做认证

[root@centos-02 ~]# cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4Wpl8Dh8Tj4yqOphBTc0O5nZGZF24z86LsL46rPH95Hr0tjG/V4ulyW7VBtRvMe3Rbxv92DUYwcpeaM8v7BaVCzhn/I/FxK3gXcWfQWrfKz+Zr10QBv1RG5lZDEvZvFWfZSJySywG1mq10f6hhw
vsQmazVF9sJkb4nZ61/uC9bIENQ/QwGNBd02XgTkl2WfhxG3C+dF08Cdd/iRv9ybn/6jMAFh8aGyKdeBTrlZw2ZyU64zvDSpqRsHjMypNrL/jH3vK0EYKqEmQVgbTsBpO1NCEcTXuuM+M6i7DlPfSltdMRWqkfw2rcZDkLXcxIyAuyhv7o77j6b
EtAX2SrH9brQ== ###sunyujun02 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYzwzucn1JkSSXBDNAZ9KNAbRFLUGn27xeJ/3H7bkXC8FpdNfesSuoHDHg3+RxLnOa7h5M2fLb/ThvPzpl8BA5PYdzY+adqjYzkaCubU/Yjt5GvZV0lTJN+Xsxf8X4wXQtZKQdgKKf+ejo6O7
fIlwPmypk9nd6RjgKoDe45s4jWHt0HttYCG+2IHLT+gMKcNPvkEPvRqnOlZMFW4e6fsyaBzfP+venLMU+ykuvmH9g3Sjh2dUF1wd3czxYcnxCFWbxxqkuH8VAUZFJ8DpBh3G6Cy/A4/5MzprKY/x3jpMfKbkrXkngcnfuCg9oEhTX9cNdbb3UUS
rc+lQNbj3aOMmL root@sunyujun02 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCw1DhoGQzR46NloLYewjjPGWpyYkVfG0IPh9wryoU2lC5Najw6P+4C3ryLezE3B2Cs0m71e8ygHi3RN5fy5AgD8D9rT5TFusOwY5yk4fXi5D7Is2ACx2HGDIXpOcUTmSfe/2Mr/wk/7sGyFjc
i7Cj88iwDvzjmOzB5AYcfkb+fhW27eDpkrteq4Y58AqMv0bi2aaH+mBzV51/Ox4/NrREaZRW323RilPMDz2mgfV2y6vcDcWZHReJAI5MHzJRcAsK13JLjgs7Tn6IczXrFKIlBIHhfvf0lte8EEbgCybZydmP9hbsO6odzsAVPeebgu5wtIzWZY8
GU8ORhoCelUITZ root@centos-02 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD810lCxBhCtMzrmSx302M6PUMKRxNK0TBrFQzwbsL8KAcgJXvH0ysc5OIw8lEFpIQirmZODVHg85I/2u3Xgz9yEf5ucF33R0xjJpcD0sq9LvMj0A2lO2RppsjgNyA4wcYcxfOg9HcYI97622ls
sO5012qWbr6k9Bv3QOD0r+F6mdoFXvXFIF2YL//60kPcPXzyPgW6ErDkA1Pum9DQOiys6iN/tH4iCa7ynRzCkLlVxt21V8mrewAldn/JOMuJVEcUtKrmtH+6wny6sJHqEStlF46xZyIH1/SeDyd8oCDwC+PU2HLTc3hishe/ny8ofm9QcC+zgbB
SPnm+I1+/vwfZ root@centos-02 [root@centos-02 ~]#
[root@centos-02 ~]# ssh 127.0.0.1
Last login: Wed Jun  6 21:11:55 2018 from 192.168.133.1
[root@centos-02 ~]#

ansible远程执行命令  

1.远程执行w命令,两台机器都执行了w命令

[root@centos-02 ~]# ansible testhost -m command -a 'w'
centos-03 | SUCCESS | rc=0 >>
 22:34:45 up 10:38,  2 users,  load average: 0.29, 0.15, 0.22
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.133.1    21:12   24:45   0.10s  0.10s -bash
root     pts/1    centos-02        22:34   11.00s  7.97s  0.37s w

127.0.0.1 | SUCCESS | rc=0 >>
 22:34:45 up 10:39,  3 users,  load average: 1.24, 0.47, 0.39
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.133.1    21:11   37.00s  0.63s  0.08s ssh 127.0.0.1
root     pts/1    localhost        22:27   37.00s 13.85s  0.05s ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssap
i-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/21f0e6a9ae -tt 127.0.0.1 /bin/sh -c '/usr/bin/python '"'
"'~None/.ansible/tmp/ansible-tmp-1528295668.9-116784222039411/command.py'"'"' && sleep 0' root pts/4 localhost 22:34 10.00s 5.67s 0.58s w [root@centos-02 ~]# ansible testhost -m command -a 'hostname' centos-03 | SUCCESS | rc=0 >> centos-03 127.0.0.1 | SUCCESS | rc=0 >> centos-02 [root@centos-02 ~]#

2.也可以访问一台机器

[root@centos-02 ~]# ansible 127.0.0.1 -m command -a 'hostname'
127.0.0.1 | SUCCESS | rc=0 >>
centos-02

[root@centos-02 ~]# 

3.也支持shell模块

[root@centos-02 ~]# ansible 127.0.0.1 -m shell -a 'hostname'
127.0.0.1 | SUCCESS | rc=0 >>
centos-02

[root@centos-02 ~]# 

ansible拷贝文件或目录

 1.命令是将本地etc/ansible/目录拷贝到远程03服务器上/tmp/ansible_test目录下,下面我们到03服务器验证下

[root@centos-02 ~]# ansible centos-03 -m copy -a "src=/etc/ansible dest=/tmp/ansible_test owner=root group=root mode=0755"
centos-03 | SUCCESS => {
    "changed": true, 
    "dest": "/tmp/ansible_test/", 
    "src": "/etc/ansible"
}
[root@centos-02 ~]# 
[root@centos-03 ~]# ls /tmp/ansible_test/
ansible
[root@centos-03 ~]# cd /tmp/ansible_test/ansible/
[root@centos-03 ansible]# ls
ansible.cfg  hosts  roles
[root@centos-03 ansible]# 

2.针对文件拷贝

[root@centos-02 ~]# ansible centos-03 -m copy -a "src=/etc/passwd dest=/tmp/ansible_test owner=root group=root mode=0755"
centos-03 | SUCCESS => {
    "changed": true, 
    "checksum": "433544a73db6492e59d37e53399bb94d574ba97e", 
    "dest": "/tmp/ansible_test/passwd", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d7c5478065eb1697f01b5a8bf5d36e54", 
    "mode": "0755", 
    "owner": "root", 
    "size": 2060, 
    "src": "~None/.ansible/tmp/ansible-tmp-1528384844.06-4438665225310/source", 
    "state": "file", 
    "uid": 0
}
[root@centos-02 ~]# 
[root@centos-03 ansible_test]# ls
ansible  passwd
[root@centos-03 ansible_test]# 

3.如果目标路径不是文件是个文件,则前面复制的文件将会直接命名为后面的文件名

[root@centos-02 ~]# ansible centos-03 -m copy -a "src=/etc/passwd dest=/tmp/ansible_test/1.txt owner=root group=root mode=0755"
centos-03 | SUCCESS => {
    "changed": true, 
    "checksum": "433544a73db6492e59d37e53399bb94d574ba97e", 
    "dest": "/tmp/ansible_test/1.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "d7c5478065eb1697f01b5a8bf5d36e54", 
    "mode": "0755", 
    "owner": "root", 
    "size": 2060, 
    "src": "~None/.ansible/tmp/ansible-tmp-1528385166.92-37275315457835/source", 
    "state": "file", 
    "uid": 0
}
[root@centos-02 ~]# 

ansible远程执行脚本

1.首先建立一个脚本

[root@centos-02 ~]# vim /tmp/1.sh
[root@centos-02 ~]# cat /tmp/1.sh 
#!/bin/bash
echo 'date' > /tmp/ansible_test.txt
[root@centos-02 ~]# 

2.把该脚本分发到各个机器上

[root@centos-02 ~]# ansible testhost -m copy -a "src=/tmp/1.sh dest=/tmp/test.sh mode=0755"
centos-03 | SUCCESS => {
    "changed": true, 
    "checksum": "a094de1e64b947adffdcb4a10923340c5d44122f", 
    "dest": "/tmp/test.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "1f4604666d1ffdb2d23976057f9ac59d", 
    "mode": "0755", 
    "owner": "root", 
    "size": 48, 
    "src": "~None/.ansible/tmp/ansible-tmp-1528385778.31-196433195400666/source", 
    "state": "file", 
    "uid": 0
}
127.0.0.1 | SUCCESS => {
    "changed": true, 
    "checksum": "a094de1e64b947adffdcb4a10923340c5d44122f", 
    "dest": "/tmp/test.sh", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "1f4604666d1ffdb2d23976057f9ac59d", 
    "mode": "0755", 
    "owner": "root", 
    "size": 48, 
    "src": "~None/.ansible/tmp/ansible-tmp-1528385778.22-196688321343541/source", 
    "state": "file", 
    "uid": 0
}
[root@centos-02 ~]# 

3.发现拷贝成功

[root@centos-02 ~]# ls /tmp/test.sh 
/tmp/test.sh
[root@centos-02 ~]# cat /tmp/test.sh 
#!/bin/bash
echo ·date· > /tmp/ansible_test.txt
[root@centos-03 ~]# cat /tmp/test.sh 
#!/bin/bash
echo ·date· > /tmp/ansible_test.txt
[root@centos-03 ~]# 

4.下面远程执行成功

[root@centos-02 ~]# ansible testhost -m shell -a "/tmp/test.sh"
127.0.0.1 | SUCCESS | rc=0 >>


centos-03 | SUCCESS | rc=0 >>


[root@centos-02 ~]# cat /tmp/ansible_test.txt 
date
[root@centos-02 ~]# 
[root@centos-03 ~]# cat /tmp/ansible_test.txt 
date
[root@centos-03 ~]# 

5.comment不支持管道,执行报错,shell可以

[root@centos-02 ~]# ansible testhost -m command -a "cat /etc/passwd|wc -l"
127.0.0.1 | FAILED | rc=1 >>
cat: invalid option -- 'l'
Try 'cat --help' for more information.non-zero return code

centos-03 | FAILED | rc=1 >>
cat: invalid option -- 'l'
Try 'cat --help' for more information.non-zero return code

[root@centos-02 ~]# 
[root@centos-02 ~]# ansible testhost -m shell -a "cat /etc/passwd|wc -l"
centos-03 | SUCCESS | rc=0 >>
27

127.0.0.1 | SUCCESS | rc=0 >>
40

[root@centos-02 ~]# 

ansible管理任务计划

1.使用cron模块给03服务器生成计划任务

[root@centos-02 ~]# ansible centos-03 -m cron -a "name='test cron' job='/bin/touch /tmp/1212.txt' weekday=6"
centos-03 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "test cron"
    ]
}
[root@centos-02 ~]# 

2.验证生成结果

[root@centos-03 ~]# crontab -l
# Lines below here are managed by Salt, do not edit
#Ansible: test cron
* * * * 6 /bin/touch /tmp/1212.txt
[root@centos-03 ~]# 

3.删除计划任务

[root@centos-02 ~]# ansible centos-03 -m cron -a "name='test cron' state=absent"
centos-03 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": []
}
[root@centos-02 ~]# 
[root@centos-03 ~]# crontab -l
# Lines below here are managed by Salt, do not edit
[root@centos-03 ~]# 

4.给计划任务加上、分时日月周 

[root@centos-02 ~]# ansible centos-03 -m cron -a "name='test cron' job='/bin/touch /tmp/1212.txt' minute=20 hour=10 weekday=6"
centos-03 | SUCCESS => {
    "changed": true, 
    "envs": [], 
    "jobs": [
        "test cron"
    ]
}
[root@centos-03 ~]# crontab -l
# Lines below here are managed by Salt, do not edit
#Ansible: test cron
20 10 * * 6 /bin/touch /tmp/1212.txt
[root@centos-03 ~]# 

ansible安装包和管理服务

1.使用yum模块安装httpd,因为我们之前已经安装过了,所有提示已经安装过了。

[root@centos-02 ~]# ansible centos-03 -m yum -a "name=httpd"
centos-03 | SUCCESS => {
    "changed": false, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "httpd-2.4.6-80.el7.centos.x86_64 providing httpd is already installed"
    ]
}
[root@centos-02 ~]# 

2.卸载一个包

[root@centos-02 ~]# ansible centos-03 -m yum -a "name=httpd state=removed" 
centos-03 | SUCCESS => {
    "changed": true, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-80.el7.centos will be erased
--> Finished Dependency
Resolution Dependencies Resolved ================================================================================ Package Arch Version
Repository Size ================================================================================ Removing: httpd x86_64 2.4.6-80.el7.centos @base
9.4 M Transaction Summary ================================================================================ Remove 1 Package Installed size: 9.4 M Downloading packages
: Running transaction check Running transaction test Transaction test succeeded Running transaction Erasing : httpd-2.4.6-80.el7.centos.x86_64
1/1 Verifying : httpd-2.4.6-80.el7.centos.x86_64 1/1 Removed: httpd.x86_64 0:2.4.6-80.el7.centos
Complete! " ] } [root@centos-02 ~]#

3.验证httpd包已经没有了

[root@centos-03 ~]# rpm -qa httpd
[root@centos-03 ~]# 

4.我们再次安装httpd,安装成功。

[root@centos-02 ~]# ansible centos-03 -m yum -a "name=httpd state=installed" 
centos-03 | SUCCESS => {
    "changed": true, 
    "msg": "", 
    "rc": 0, 
    "results": [
        "Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.tuna.tsinghua.edu.cn
 * epel: mirrors.tongji.edu.cn
 * extras: mirrors.huaweicl
oud.com * updates: mirrors.huaweicloud.com Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.4.6-80.el7.centos will be installed --> Finished
Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version
Repository Size ================================================================================ Installing: httpd x86_64 2.4.6-80.el7.centos
base 2.7 M Transaction Summary ================================================================================ Install 1 Package Total download size: 2.7
M Installed size: 9.4 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction Installing :
httpd-2.4.6-80.el7.centos.x86_64 1/1 Verifying : httpd-2.4.6-80.el7.centos.x86_64 1/1 Installed:
httpd.x86_64 0:2.4.6-80.el7.centos Complete! " ] } [root@centos-02 ~]#
[root@centos-03 ~]# rpm -qa httpd
httpd-2.4.6-80.el7.centos.x86_64
[root@centos-03 ~]# 

5.启动httpd服务,enabled=no开启不启动,设置为yes是开机启动。

[root@centos-02 ~]# ansible centos-03 -m service -a "name=httpd state=started enabled=no" 
centos-03 | SUCCESS => {
    "changed": true, 
    "enabled": false, 
    "name": "httpd", 
    "state": "started", 
    "status": {
        "ActiveEnterTimestampMonotonic": "0", 
        "ActiveExitTimestampMonotonic": "0", 
        "ActiveState": "inactive", 
        "After": "-.mount system.slice remote-fs.target nss-lookup.target network.target tmp.mount systemd-journald.socket basic.target", 
        "AllowIsolate": "no", 
        "AmbientCapabilities": "0", 
        "AssertResult": "no", 
        "AssertTimestampMonotonic": "0", 
        "Before": "shutdown.target", 
        "BlockIOAccounting": "no", 
        "BlockIOWeight": "18446744073709551615", 
        "CPUAccounting": "no", 
        "CPUQuotaPerSecUSec": "infinity", 
        "CPUSchedulingPolicy": "0", 
        "CPUSchedulingPriority": "0", 
        "CPUSchedulingResetOnFork": "no", 
        "CPUShares": "18446744073709551615", 
        "CanIsolate": "no", 
        "CanReload": "yes", 
        "CanStart": "yes", 
        "CanStop": "yes", 
        "CapabilityBoundingSet": "18446744073709551615", 
        "ConditionResult": "no", 
        "ConditionTimestampMonotonic": "0", 
        "Conflicts": "shutdown.target", 
        "ControlPID": "0", 
        "DefaultDependencies": "yes", 
        "Delegate": "no", 
        "Description": "The Apache HTTP Server", 
        "DevicePolicy": "auto", 
        "Documentation": "man:httpd(8) man:apachectl(8)", 
        "EnvironmentFile": "/etc/sysconfig/httpd (ignore_errors=no)", 
        "ExecMainCode": "0", 
        "ExecMainExitTimestampMonotonic": "0", 
        "ExecMainPID": "0", 
        "ExecMainStartTimestampMonotonic": "0", 
        "ExecMainStatus": "0", 
        "ExecReload": "{ path=/usr/sbin/httpd ; argv[]=/usr/sbin/httpd $OPTIONS -k graceful ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; 
status=0/0 }", "ExecStart": "{ path=/usr/sbin/httpd ; argv[]=/usr/sbin/httpd $OPTIONS -DFOREGROUND ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ;
status=0/0 }", "ExecStop": "{ path=/bin/kill ; argv[]=/bin/kill -WINCH ${MAINPID} ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(null) ; status=0/0 }", "FailureAction": "none", "FileDescriptorStoreMax": "0", "FragmentPath": "/usr/lib/systemd/system/httpd.service", "GuessMainPID": "yes", "IOScheduling": "0", "Id": "httpd.service", "IgnoreOnIsolate": "no", "IgnoreOnSnapshot": "no", "IgnoreSIGPIPE": "yes", "InactiveEnterTimestampMonotonic": "0", "InactiveExitTimestampMonotonic": "0", "JobTimeoutAction": "none", "JobTimeoutUSec": "0", "KillMode": "control-group", "KillSignal": "18", "LimitAS": "18446744073709551615", "LimitCORE": "18446744073709551615", "LimitCPU": "18446744073709551615", "LimitDATA": "18446744073709551615", "LimitFSIZE": "18446744073709551615", "LimitLOCKS": "18446744073709551615", "LimitMEMLOCK": "65536", "LimitMSGQUEUE": "819200", "LimitNICE": "0", "LimitNOFILE": "4096", "LimitNPROC": "3829", "LimitRSS": "18446744073709551615", "LimitRTPRIO": "0", "LimitRTTIME": "18446744073709551615", "LimitSIGPENDING": "3829", "LimitSTACK": "18446744073709551615", "LoadState": "loaded", "MainPID": "0", "MemoryAccounting": "no", "MemoryCurrent": "18446744073709551615", "MemoryLimit": "18446744073709551615", "MountFlags": "0", "Names": "httpd.service", "NeedDaemonReload": "no", "Nice": "0", "NoNewPrivileges": "no", "NonBlocking": "no", "NotifyAccess": "main", "OOMScoreAdjust": "0", "OnFailureJobMode": "replace", "PermissionsStartOnly": "no", "PrivateDevices": "no", "PrivateNetwork": "no", "PrivateTmp": "yes", "ProtectHome": "no", "ProtectSystem": "no", "RefuseManualStart": "no", "RefuseManualStop": "no", "RemainAfterExit": "no", "Requires": "-.mount basic.target", "RequiresMountsFor": "/var/tmp", "Restart": "no", "RestartUSec": "100ms", "Result": "success", "RootDirectoryStartOnly": "no", "RuntimeDirectoryMode": "0755", "SameProcessGroup": "no", "SecureBits": "0", "SendSIGHUP": "no", "SendSIGKILL": "yes", "Slice": "system.slice", "StandardError": "inherit", "StandardInput": "null", "StandardOutput": "journal", "StartLimitAction": "none", "StartLimitBurst": "5", "StartLimitInterval": "10000000", "StartupBlockIOWeight": "18446744073709551615", "StartupCPUShares": "18446744073709551615", "StatusErrno": "0", "StopWhenUnneeded": "no", "SubState": "dead", "SyslogLevelPrefix": "yes", "SyslogPriority": "30", "SystemCallErrorNumber": "0", "TTYReset": "no", "TTYVHangup": "no", "TTYVTDisallocate": "no", "TasksAccounting": "no", "TasksCurrent": "18446744073709551615", "TasksMax": "18446744073709551615", "TimeoutStartUSec": "1min 30s", "TimeoutStopUSec": "1min 30s", "TimerSlackNSec": "50000", "Transient": "no", "Type": "notify", "UMask": "0022", "UnitFilePreset": "disabled", "UnitFileState": "disabled", "Wants": "system.slice", "WatchdogTimestampMonotonic": "0", "WatchdogUSec": "0" } } [root@centos-02 ~]#
[root@centos-03 ~]# ps aux|grep httpd
root      29490  0.1  0.4 223964  4924 ?        Ss   23:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache    29491  0.0  0.2 223964  2940 ?        S    23:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache    29492  0.0  0.2 223964  2940 ?        S    23:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache    29493  0.0  0.2 223964  2940 ?        S    23:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache    29494  0.0  0.2 223964  2940 ?        S    23:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache    29495  0.0  0.2 223964  2940 ?        S    23:03   0:00 /usr/sbin/httpd -DFOREGROUND
root      29625  0.0  0.0 112664   928 pts/1    R+   23:05   0:00 grep --color=auto http
[root@centos-03 ~]# 

6.查看ansiable所有的模块,常用的就几个server 、yum等。

[root@centos-02 ~]# ansible-doc -l

7.查看包用法

[root@centos-02 ~]# ansible-doc service

使用ansible playbook

 1.playbook把所有的配置放到一个配置文件里

[root@centos-02 ~]# cd /etc/ansible/
[root@centos-02 ansible]# vi test.yml
[root@centos-02 ansible]# cat test.yml 
---
- hosts: centos-03
  remote_user: root
  tasks:
    - name: test_playbook
      shell: touch /tmp/linux.txt
[root@centos-02 ansible]# 

2.执行文件

[root@centos-02 ansible]# ansible-playbook test.yml 

PLAY [centos-03] ************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [test_playbook] ********************************************************************
 [WARNING]: Consider using the file module with state=touch rather than running touch.
If you need to use command because file is insufficient you can add warn=False to this
command task or set command_warnings=False in ansible.cfg to get rid of this message.

changed: [centos-03]

PLAY RECAP ******************************************************************************
centos-03                  : ok=2    changed=1    unreachable=0    failed=0   

[root@centos-02 ansible]# 

3.检查03服务器是否有文件

[root@centos-03 ~]# ls -l /tmp/linux.txt 
-rw-r--r-- 1 root root 0 6月  12 22:12 /tmp/linux.txt
[root@centos-03 ~]# 

playbook里的变量

1.创建用户的playbooks

[root@centos-02 ansible]# vim /etc/ansible/create_user.yml
[root@centos-02 ansible]# cat /etc/ansible/create_user.yml 
---
- name: create_user
  hosts: centos-03
  user: root
  gather_facts: false
  vars:
    - user: "test"
  tasks:
    - name: create user
      user: name="{{ user }}"
[root@centos-02 ansible]# ansible-playbook create_user.yml 
[root@centos-02 ansible]# ansible-playbook create_user.yml 

PLAY [create_user] **********************************************************************

TASK [create user] **********************************************************************
changed: [centos-03]

PLAY RECAP ******************************************************************************
centos-03                  : ok=1    changed=1    unreachable=0    failed=0   

[root@centos-02 ansible]# 

2.检查是否创建成功test用户

[root@centos-03 ~]# id test
uid=1002(test) gid=1002(test) 组=1002(test)
[root@centos-03 ~]# 

 playbook循环

1.编辑循环配置文件提示03服务器没有文件

[root@centos-02 ansible]# vim /etc/ansible/while.yml
[root@centos-02 ansible]# cat /etc/ansible/while.yml 
---
- hosts: centos-03
  user: root
  tasks:
    - name: change mode for files
      file: path=/tmp/{{ item }} mode=600
      with_items:
        - 1.txt
        - 2.txt
        - 3.txt
[root@centos-02 ansible]# 
[root@centos-02 ansible]# ansible-playbook while.yml 

PLAY [centos-03] ************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [change mode for files] ************************************************************
failed: [centos-03] (item=1.txt) => {"changed": false, "item": "1.txt", "msg": "file (/tmp/1.txt) is absent, cannot continue", "path": "/tmp/1.txt", "state": "absent"}
failed: [centos-03] (item=2.txt) => {"changed": false, "item": "2.txt", "msg": "file (/tmp/2.txt) is absent, cannot continue", "path": "/tmp/2.txt", "state": "absent"}
failed: [centos-03] (item=3.txt) => {"changed": false, "item": "3.txt", "msg": "file (/tmp/3.txt) is absent, cannot continue", "path": "/tmp/3.txt", "state": "absent"}
	to retry, use: --limit @/etc/ansible/while.retry

PLAY RECAP ******************************************************************************
centos-03                  : ok=1    changed=0    unreachable=0    failed=1   

[root@centos-02 ansible]# 

2.我们再编辑配置文件创建3个文件

[root@centos-02 ansible]# vim /etc/ansible/while.yml
[root@centos-02 ansible]# cat /etc/ansible/while.yml 
---
- hosts: centos-03
  user: root
  tasks:
    - name: change mode for files
      file: path=/tmp/{{ item }} state=touch mode=600
      with_items:
        - 1.txt
        - 2.txt
        - 3.txt
[root@centos-02 ansible]# 
[root@centos-02 ansible]# ansible-playbook while.yml 

PLAY [centos-03] ************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [change mode for files] ************************************************************
changed: [centos-03] => (item=1.txt)
changed: [centos-03] => (item=2.txt)
changed: [centos-03] => (item=3.txt)

PLAY RECAP ******************************************************************************
centos-03                  : ok=2    changed=1    unreachable=0    failed=0   

[root@centos-02 ansible]# 
[root@centos-03 ~]# ls -l /tmp/1.txt /tmp/2.txt /tmp/3.txt
-rw------- 1 root root 0 6月  12 22:48 /tmp/1.txt
-rw------- 1 root root 0 6月  12 22:48 /tmp/2.txt
-rw------- 1 root root 0 6月  12 22:48 /tmp/3.txt
[root@centos-03 ~]#  

playbook中的条件判断  

1.执行setup命令查看ip地址路径,针对ip地址做为判断条件

[root@centos-02 ~]# ansible centos-03 -m setup (命令结果就是gather_facts)
centos-03 | SUCCESS => {
        "ansible_ens33": {
            "ipv4": {
                "address": "192.168.133.66", 

2.编辑配置文件

[root@centos-02 ~]# vim when.yml
[root@centos-02 ~]# cat when.yml 
---
- hosts: testhost
  user: root
  gather_facts: True
  tasks:
    - name: use when
      shell: touch /tmp/when.txt
      when: ansible_ens33.ipv4.address == "192.168.133.66"
[root@centos-02 ~]# 

3.执行

[root@centos-02 ~]# ansible-playbook when.yml 

PLAY [testhost] *************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]
ok: [127.0.0.1]

TASK [use when] *************************************************************************
skipping: [127.0.0.1]
 [WARNING]: Consider using the file module with state=touch rather than running touch.
If you need to use command because file is insufficient you can add warn=False to this
command task or set command_warnings=False in ansible.cfg to get rid of this message.

changed: [centos-03]

PLAY RECAP ******************************************************************************
127.0.0.1                  : ok=1    changed=0    unreachable=0    failed=0   
centos-03                  : ok=2    changed=1    unreachable=0    failed=0   

[root@centos-02 ~]# 

playbook中的handlers  

 

1.hander相当于&&并且的意思,前面的命令执行完成之后执行后面的命令,用notify关联起来

[root@centos-02 ~]# vim hand.yml
[root@centos-02 ~]# cat hand.yml 
---
- name: handlers test
  hosts: centos-03
  user: root
  tasks:
    - name: copy file
      copy: src=/etc/passwd dest=/tmp/aaa.txt
      notify: test handlers
  handlers:
    - name: test handlers
      shell: echo "11111" >> /tmp/aaa.txt
[root@centos-02 ~]# 

2.执行命令

[root@centos-02 ~]# ansible-playbook hand.yml 

PLAY [handlers test] ********************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [copy file] ************************************************************************
changed: [centos-03]

RUNNING HANDLER [test handlers] *********************************************************
changed: [centos-03]

PLAY RECAP ******************************************************************************
centos-03                  : ok=3    changed=2    unreachable=0    failed=0   

[root@centos-02 ~]# 

3.查看03服务器

[root@centos-03 ~]# tail /tmp/aaa.txt 
mongod:x:993:991:mongod:/var/lib/mongo:/bin/false
git:x:1007:1007::/home/git:/usr/bin/git-shell
zhangsan:x:1008:1008::/home/jail/./home/zhangsan:/usr/sbin/jk_chrootsh
admin:x:1009:1009::/home/admin:/bin/bash
lisi:x:1010:1010::/home/lisi:/home/jumpserver-0.3.3/init.sh
wangwu:x:1011:1011::/home/wangwu:/home/jumpserver-0.3.3/init.sh
zhaoliu:x:1012:1012::/home/zhaoliu:/home/jumpserver-0.3.3/init.sh
sun4:x:1013:1013::/home/sun4:/home/jumpserver-0.3.3/init.sh
saslauth:x:992:76:Saslauthd user:/run/saslauthd:/sbin/nologin
11111
[root@centos-03 ~]# 

用playbook安装nginx(上)  

1.建目录

[root@centos-02 ansible]# pwd
/etc/ansible
[root@centos-02 ansible]# mkdir nginx_install
[root@centos-02 ansible]# cd nginx_install/
[root@centos-02 nginx_install]# mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
[root@centos-02 nginx_install]# ls
roles
[root@centos-02 nginx_install]# ls roles/
common  install
[root@centos-02 nginx_install]# ls roles/install/
files  handlers  meta  tasks  templates  vars
[root@centos-02 nginx_install]# ls roles/common/
files  handlers  meta  tasks  templates  vars
[root@centos-02 nginx_install]# 

2.准备文件

 1.安装nginx后

[root@centos-02 conf]# ls /usr/local/nginx/  (nginx安装目录)
client_body_temp  fastcgi_temp  logs        sbin       uwsgi_temp
conf              html          proxy_temp  scgi_temp
[root@centos-02 conf]# ls /etc/init.d/nginx (nignx启动脚本)
/etc/init.d/nginx
[root@centos-02 conf]# ls /usr/local/nginx/conf/nginx.conf (nginx配置文件)
/usr/local/nginx/conf/nginx.conf
[root@centos-02 conf]# 

2.打包

[root@centos-02 conf]# cd /usr/local/
[root@centos-02 local]# tar czvf nginx.tar.gz --exclude "nginx.conf" --exclude "vhost" nginx/
nginx/
nginx/sbin/
nginx/sbin/nginx
nginx/conf/
nginx/conf/koi-win
nginx/conf/koi-utf
nginx/conf/win-utf
nginx/conf/mime.types
nginx/conf/mime.types.default
nginx/conf/fastcgi_params
nginx/conf/fastcgi_params.default
nginx/conf/fastcgi.conf
nginx/conf/fastcgi.conf.default
nginx/conf/uwsgi_params
nginx/conf/uwsgi_params.default
nginx/conf/scgi_params
nginx/conf/scgi_params.default
nginx/conf/nginx.conf.default
nginx/conf/nginx.conf.bak
nginx/logs/
nginx/logs/error.log
nginx/logs/nginx.pid
nginx/logs/nginx_error.log
nginx/logs/access.log
nginx/html/
nginx/html/50x.html
nginx/html/index.html
nginx/client_body_temp/
nginx/proxy_temp/
nginx/fastcgi_temp/
nginx/uwsgi_temp/
nginx/scgi_temp/
[root@centos-02 local]# 

3.拷贝文件

[root@centos-02 local]# mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/
[root@centos-02 local]# cp nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/
[root@centos-02 local]# cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/
[root@centos-02 local]# 

4.创建main文件

[root@centos-02 local]# cd /etc/ansible/nginx_install/roles/
[root@centos-02 roles]# ls
common  install
[root@centos-02 roles]# cd common/
[root@centos-02 common]# ls
files  handlers  meta  tasks  templates  vars
[root@centos-02 common]# vi tasks/main.yml
[root@centos-02 common]# cat tasks/main.yml 
- name: Install initializtion require software
  yum: name={{ item }} state=installed (如果不行,可以修改成:yum: name="pcre-devel,zlib-devel" state=installed)
  with_items:
    - zlib-devel
    - pcre-devel
[root@centos-02 common]# 

5.定义变量

[root@centos-02 common]# vim /etc/ansible/nginx_install/roles/install/vars/main.yml
[root@centos-02 common]# cat /etc/ansible/nginx_install/roles/install/vars/main.yml 
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
[root@centos-02 common]#

6.拷贝配置文件(子配置文件)

[root@centos-02 common]# vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml
[root@centos-02 common]# cat /etc/ansible/nginx_install/roles/install/tasks/copy.yml
- name: Copy Nginx Software
  copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Software
  shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
- name: Copy Nginx Start Script
  template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Config
  template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644
[root@centos-02 common]# 

用playbook安装nginx(下)

1.编辑安装的配置文件

[root@centos-02 common]# vim /etc/ansible/nginx_install/roles/install/tasks/install.yml
[root@centos-02 common]# cat /etc/ansible/nginx_install/roles/install/tasks/install.yml
- name: Create Nginx User
  user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Service
  shell: /etc/init.d/nginx start
- name: Add Boot Start Nginx Service
  shell: chkconfig --level 345 nginx on
- name: Delete Nginx compression files
  shell: rm -rf /tmp/nginx.tar.gz
[root@centos-02 common]# 

[root@centos-02 common]# cd ..
[root@centos-02 roles]# 
[root@centos-02 roles]# ls
common  install
[root@centos-02 roles]# cd install/
[root@centos-02 install]# ls
files  handlers  meta  tasks  templates  vars
[root@centos-02 install]# cd tasks/
[root@centos-02 tasks]# ls
copy.yml  install.yml
[root@centos-02 tasks]# vim main.yml
[root@centos-02 tasks]# cat main.yml 
- include: copy.yml
- include: install.yml
[root@centos-02 tasks]# 

1.添加入口文件

[root@centos-02 tasks]# vim /etc/ansible/nginx_install/install.yml
[root@centos-02 tasks]# cat /etc/ansible/nginx_install/install.yml
---
- hosts: testhost
  remote_user: root
  gather_facts: True
  roles:
    - common
    - install
[root@centos-02 tasks]# 

2.运行失败

[root@centos-02 tasks]# ansible-playbook /etc/ansible/nginx_install/install.yml 

PLAY [testhost] *************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]
ok: [127.0.0.1]

TASK [common : Install initializtion require software] **********************************
failed: [centos-03] (item=[u'zlib-devel', u'pcre-devel']) => {"changed": false, "item": ["zlib-devel", "pcre-devel"], "msg": "No Package matching '['zlib-devel'' found available, 
installed or updated", "rc": 0, "results": []} failed: [127.0.0.1] (item=[u'zlib-devel', u'pcre-devel']) => {"changed": false, "item": ["zlib-devel", "pcre-devel"], "msg": "No Package matching '['zlib-devel'' found available,
installed or updated", "rc": 0, "results": []} to retry, use: --limit @/etc/ansible/nginx_install/install.retry PLAY RECAP ****************************************************************************** 127.0.0.1 : ok=1 changed=0 unreachable=0 failed=1 centos-03 : ok=1 changed=0 unreachable=0 failed=1 [root@centos-02 tasks]#

3.编辑配置文件并重新启动

[root@centos-02 tasks]# vim /etc/ansible/nginx_install/roles/common/tasks/main.yml 
[root@centos-02 tasks]# cat /etc/ansible/nginx_install/roles/common/tasks/main.yml 
- name: Install initializtion require software
  yum: name="pcre-devel,zlib-devel" state=installed
[root@centos-02 tasks]# ansible-playbook /etc/ansible/nginx_install/install.yml 

PLAY [testhost] *************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]
ok: [127.0.0.1]

TASK [common : Install initializtion require software] **********************************
ok: [127.0.0.1]
changed: [centos-03]

TASK [install : Copy Nginx Software] ****************************************************
changed: [centos-03]
changed: [127.0.0.1]

TASK [install : Uncompression Nginx Software] *******************************************
 [WARNING]: Consider using the unarchive module rather than running tar.  If you need to
use command because unarchive is insufficient you can add warn=False to this command
task or set command_warnings=False in ansible.cfg to get rid of this message.

changed: [centos-03]
changed: [127.0.0.1]

TASK [install : Copy Nginx Start Script] ************************************************
changed: [centos-03]
ok: [127.0.0.1]

TASK [install : Copy Nginx Config] ******************************************************
ok: [127.0.0.1]
changed: [centos-03]

TASK [install : Create Nginx User] ******************************************************
changed: [centos-03]
changed: [127.0.0.1]

TASK [install : Start Nginx Service] ****************************************************
changed: [127.0.0.1]
changed: [centos-03]

TASK [install : Add Boot Start Nginx Service] *******************************************
changed: [127.0.0.1]
changed: [centos-03]

TASK [install : Delete Nginx compression files] *****************************************
 [WARNING]: Consider using the file module with state=absent rather than running rm.  If
you need to use command because file is insufficient you can add warn=False to this
command task or set command_warnings=False in ansible.cfg to get rid of this message.

changed: [centos-03]
changed: [127.0.0.1]

PLAY RECAP ******************************************************************************
127.0.0.1                  : ok=10   changed=6    unreachable=0    failed=0   
centos-03                  : ok=10   changed=9    unreachable=0    failed=0   

[root@centos-02 tasks]# 

4.我x不成功启动了系统自带的nginx,我们将自带的nginx卸载,重新执行

[root@centos-03 ~]# netstat -lntp
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      998/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1942/master         
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      931/zabbix_agentd   
tcp        0      0 192.168.133.66:27017    0.0.0.0:*               LISTEN      1893/mongod         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      1893/mongod         
tcp6       0      0 :::3306                 :::*                    LISTEN      1399/mysqld         
tcp6       0      0 :::22                   :::*                    LISTEN      998/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1942/master         
tcp6       0      0 :::10050                :::*                    LISTEN      931/zabbix_agentd   
[root@centos-03 ~]# ps aux|grep nginx
root      51783  0.0  0.2 122896  2108 ?        Ss   23:38   0:00 nginx: master process /usr/sbin/nginx
nginx     51784  0.0  0.3 123360  3136 ?        S    23:38   0:00 nginx: worker process
root      51993  0.0  0.0 112668   932 pts/1    R+   23:39   0:00 grep --color=auto ngin
[root@centos-03 ~]# 
[root@centos-03 ~]# yum remove nginx
[root@centos-02 tasks]# ansible-playbook /etc/ansible/nginx_install/install.yml

5.这次就对了

[root@centos-03 ~]# ps aux|grep nginx
root      52822  0.0  0.0  20496   624 ?        Ss   23:44   0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
nobody    52823  0.0  0.3  22984  3200 ?        S    23:44   0:00 nginx: worker process
nobody    52824  0.0  0.3  22984  3200 ?        S    23:44   0:00 nginx: worker process
root      52967  0.0  0.0 112668   932 pts/1    R+   23:44   0:00 grep --color=auto ngin
[root@centos-03 ~]# 

playbook管理配置文件(上)  

1.创建nginxconfig的目录

[root@centos-02 tasks]# cd 
[root@centos-02 ~]# mkdir -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks}
[root@centos-02 ~]# cd /etc/ansible/
[root@centos-02 ansible]# ls
ansible.cfg        create_user.yml  nginx_config   roles     while.retry
create_user.retry  hosts            nginx_install  test.yml  while.yml
[root@centos-02 ansible]# cd nginx_config/
[root@centos-02 nginx_config]# ls
roles
[root@centos-02 nginx_config]# ls roles/
new  old
[root@centos-02 nginx_config]# 

2.拷贝文件

[root@centos-02 conf]# cp -r  nginx.conf /etc/ansible/nginx_config/roles/new/files/
cp: overwrite ‘/etc/ansible/nginx_config/roles/new/files/nginx.conf’? y
[root@centos-02 conf]# 

[root@centos-02 conf]# vim /etc/ansible/nginx_config/roles/new/vars/main.yml
[root@centos-02 conf]# cat /etc/ansible/nginx_config/roles/new/vars/main.yml
nginx_basedir: /usr/local/nginx
[root@centos-02 conf]# vim /etc/ansible/nginx_config/roles/new/handlers/main.yml
[root@centos-02 conf]# cat /etc/ansible/nginx_config/roles/new/handlers/main.yml
- name: restart nginx
  shell: /etc/init.d/nginx reload
[root@centos-02 conf]# vim /etc/ansible/nginx_config/roles/new/tasks/main.yml
[root@centos-02 conf]# cat /etc/ansible/nginx_config/roles/new/tasks/main.yml
- name: copy conf file
  copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644
  with_items:
    - { src: nginx.conf, dest: conf/nginx.conf }
###    - { src: vhosts, dest: conf/ }
  notify: restart nginx
[root@centos-02 conf]# 

1.总入口文件

[root@centos-02 ~]# vim /etc/ansible/nginx_config/update.yml
[root@centos-02 ~]# cat /etc/ansible/nginx_config/update.yml
---
- hosts: centos-03
  user: root
  roles:
  - new
[root@centos-02 ~]# 

2.成功

[root@centos-02 ~]# ansible-playbook /etc/ansible/nginx_config/update.yml 

PLAY [centos-03] ************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [new : copy conf file] *************************************************************
ok: [centos-03] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})

PLAY RECAP ******************************************************************************
centos-03                  : ok=2    changed=0    unreachable=0    failed=0   

[root@centos-02 ~]# 

3.我们给nginx文件做个变更试试

[root@centos-02 ~]# cd /etc/ansible/nginx_config/roles/new/files/
[root@centos-02 files]# vim nginx.conf 
[root@centos-02 files]# cat nginx.conf 
user nobody nobody;                               
worker_processes 2;                            
error_log /usr/local/nginx/logs/nginx_error.log crit;           
pid /usr/local/nginx/logs/nginx.pid;                     
worker_rlimit_nofile 51200;                            
events
{
    use epoll;
    worker_connections 6000;                           
}
http
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
   # gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm
    application/xml;
    server                                 
    {
        listen 8080;                                
        server_name localhost;                         
        index index.html index.htm index.php;                
        root /usr/local/nginx/html;                      
        location ~ .php$                               
        {
            include fastcgi_params;
            fastcgi_pass unix:/tmp/php-fcgi.sock;
           #fastcgi_pass 127.0.0.1:9000;   (和上面一行的意思相同,只是不同的写法,监听127.0.0.1:9000)
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
        }   
    }
}
[root@centos-02 files]# 
[root@centos-02 files]# ansible-playbook /etc/ansible/nginx_config/update.yml 

PLAY [centos-03] ************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [new : copy conf file] *************************************************************
changed: [centos-03] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})

RUNNING HANDLER [new : restart nginx] ***************************************************
changed: [centos-03]

PLAY RECAP ******************************************************************************
centos-03                  : ok=3    changed=2    unreachable=0    failed=0   

[root@centos-02 files]# 

4.03服务器也做了变更了

[root@centos-03 ansible]# cat /usr/local/nginx/conf/nginx.conf
user nobody nobody;                               
worker_processes 2;                            
error_log /usr/local/nginx/logs/nginx_error.log crit;           
pid /usr/local/nginx/logs/nginx.pid;                     
worker_rlimit_nofile 51200;                            
events
{
    use epoll;
    worker_connections 6000;                           
}
http
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
   # gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm
    application/xml;
    server                                 
    {
        listen 8080;                                
        server_name localhost;                         
        index index.html index.htm index.php;                
        root /usr/local/nginx/html;                      
        location ~ .php$                               
        {
            include fastcgi_params;
            fastcgi_pass unix:/tmp/php-fcgi.sock;
           #fastcgi_pass 127.0.0.1:9000;   (和上面一行的意思相同,只是不同的写法,监听127.0.0.1:9000)
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
        }   
    }
}
[root@centos-03 ansible]# 

playbook管理配置文件(下)  

1.首先需要将new下面的文件都拷贝到old下面

[root@centos-02 files]# rsync -av /etc/ansible/nginx_config/roles/new/ /etc/ansible/nginx_config/roles/old/
sending incremental file list
files/
files/nginx.conf
handlers/
handlers/main.yml
tasks/
tasks/main.yml
vars/
vars/main.yml

sent 2873 bytes  received 104 bytes  5954.00 bytes/sec
total size is 2485  speedup is 0.83
[root@centos-02 files]# 
[root@centos-02 files]# rsync -av ./ /etc/ansible/nginx_config/roles/old/files/
sending incremental file list

sent 45 bytes  received 12 bytes  114.00 bytes/sec
total size is 2176  speedup is 38.18
[root@centos-02 files]# 
[root@centos-02 files]# vim nginx.conf 
[root@centos-02 files]# cat nginx.conf 
user nobody nobody;                               
worker_processes 2;                            
error_log /usr/local/nginx/logs/nginx_error.log crit;           
pid /usr/local/nginx/logs/nginx.pid;                     
worker_rlimit_nofile 51200;                            
events
{
    use epoll;
    worker_connections 6000;                           
}
http
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm
    application/xml;
    server                                 
    {
        listen 8080;                                
        server_name localhost;                         
        index index.html index.htm index.php;                
        root /usr/local/nginx/html;                      
        location ~ .php$                               
        {
            include fastcgi_params;
            fastcgi_pass unix:/tmp/php-fcgi.sock;
           #fastcgi_pass 127.0.0.1:9000;   (和上面一行的意思相同,只是不同的写法,监听127.0.0.1:9000)
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
        }   
    }
}
[root@centos-02 files]# ansible-playbook /etc/ansible/nginx_config/update.yml 

PLAY [centos-03] ************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [new : copy conf file] *************************************************************
changed: [centos-03] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})

RUNNING HANDLER [new : restart nginx] ***************************************************
changed: [centos-03]

PLAY RECAP ******************************************************************************
centos-03                  : ok=3    changed=2    unreachable=0    failed=0   

[root@centos-02 files]# rsync -av ./ /etc/ansible/nginx_config/roles/old/files/
sending incremental file list
./
nginx.conf

sent 2266 bytes  received 34 bytes  4600.00 bytes/sec
total size is 2175  speedup is 0.95
[root@centos-02 files]# 
[root@centos-02 files]# vim nginx.conf 
[root@centos-02 files]# cat nginx.conf 
user nobody nobody;                               
worker_processes 2;                            
error_log /usr/local/nginx/logs/nginx_error.log crit;           
pid /usr/local/nginx/logs/nginx.pid;                     
worker_rlimit_nofile 51200;                            
events
{
    use epoll;
    worker_connections 6000;                           
}
http
{
    include mime.types;
    default_type application/octet-stream;
    server_names_hash_bucket_size 3526;
    server_names_hash_max_size 4096;
    log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 30;
    client_header_timeout 3m;
    client_body_timeout 3m;
    send_timeout 3m;
    connection_pool_size 256;
    client_header_buffer_size 1k;
    large_client_header_buffers 8 4k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 10m;
    client_body_buffer_size 256k;
    client_body_temp_path /usr/local/nginx/client_body_temp;
    proxy_temp_path /usr/local/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;
   # gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css text/htm
    application/xml;
    server                                 
    {
        listen 8080;                                
        server_name localhost;                         
        index index.html index.htm index.php;                
        root /usr/local/nginx/html;                      
        location ~ .php$                               
        {
            include fastcgi_params;
            fastcgi_pass unix:/tmp/php-fcgi.sock;
           #fastcgi_pass 127.0.0.1:9000;   (和上面一行的意思相同,只是不同的写法,监听127.0.0.1:9000)
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
        }   
    }
}
[root@centos-02 files]# 
[root@centos-02 files]# cd ..
[root@centos-02 new]# cd ..
[root@centos-02 roles]# ls
new  old
[root@centos-02 roles]# cd ..
[root@centos-02 nginx_config]# cp update.yml rollback.yml
[root@centos-02 nginx_config]# vim rollback.yml 
[root@centos-02 nginx_config]# cat rollback.yml 
---
- hosts: centos-03
  user: root
  roles:
  - old
[root@centos-02 nginx_config]# 
[root@centos-02 nginx_config]# ansible-playbook rollback.yml 

PLAY [centos-03] ************************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [centos-03]

TASK [old : copy conf file] *************************************************************
ok: [centos-03] => (item={u'dest': u'conf/nginx.conf', u'src': u'nginx.conf'})

PLAY RECAP ******************************************************************************
centos-03                  : ok=2    changed=0    unreachable=0    failed=0   

[root@centos-02 nginx_config]# 

总结:要想回滚肯定是把变更之前的文件拷贝回去,拷贝回去的前提是原来的文件要有,所以我们在变更之前就要把new下面的文件先拷贝到old下,之后再做更改,执行update,有问题执行rollback  

  

  

  

  

 

原文地址:https://www.cnblogs.com/sunyujun/p/9080559.html