zoukankan      html  css  js  c++  java
  • 自动化运维

    自动化运维介绍

    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  

      

      

      

      

     

  • 相关阅读:
    sln、sdf、vcxproj、vcxproj.filter各是什么文件
    服务器开发——性能评估
    HOOK技术
    C++绘制箭头—原理和代码
    线程共享内容和独享内容
    字节多路通道、选择通道、数组多路通道
    操作系统中常见算法汇总
    LRU(最近最少使用)和LFU(最近最不常用)算法的区别
    移动端meta标签的使用和设置
    js和jq获取宽度和高度
  • 原文地址:https://www.cnblogs.com/sunyujun/p/9080559.html
Copyright © 2011-2022 走看看