• 自动化运维之Saltstack


    第三十八课 自动化运维之Saltstack

    目录

    一、自动化运维介绍
    二、 saltstack安装
    三、 启动saltstack服务
    四、 saltstack配置认证
    五、 saltstack远程执行命令
    六、 grains
    七、 pillar
    八、 安装配置httpd
    九、 配置管理文件
    十、 配置管理目录
    十一、 配置管理远程命令
    十二、 配置管理计划任务
    十三、 其他命令
    十四、 salt-ssh使用


    一、自动化运维介绍

    认识自动化运维

    传统运维效率低,大多工作人为完成

    传统运维工作繁琐,容易出错

    传统运维每日重复做相同的事情

    传统运维没有标准化流程

    传统运维的脚本繁多,不能方便管理

    自动化运维就是要解决上面所有问题

    常见自动化运维工具

    Puppet (www.puppetlabs.com) 基于ruby开发,c/s架构,支持多平台,可管理配置文件、用户、cron任务、软件包、系统服务等。 分为社区版(免费)和企业版(收费),企业版支持图形化配置。

    Saltstack(官网 https://saltstack.com,文档docs.saltstack.com ) 基于python开发,c/s架构,支持多平台,比puppet轻量,在远程执行命令时非常快捷,配置和使用比puppet容易,能实现puppet几乎所有的功能。

    Ansible (www.ansible.com ) 更加简洁的自动化运维工具,不需要在客户端上安装agent,基于python开发。可以实现批量操作系统配置、批量程序的部署、批量运行命令。


    二、 saltstack安装

    saltstack介绍

    https://docs.saltstack.com/en/latest/topics/index.html

    saltstack既可以使用salt-ssh远程执行,类似ansible,也支持c/s模式。

    演示环境:

    saltserver 192.168.1.41 CentOS release 6.8 (Final)
    saltminion 192.168.1.43 CentOS release 6.8 (Final)
    saltminion01 192.168.1.42 CentOS release 6.8 (Final)

    三台机器都配置hosts

    # vim /etc/hosts
    // 添加
    192.168.1.41 saltserver.local
    1921.68.1.42 saltminion01.local
    192.168.1.43 saltminion.local
    

    Saltstack安装

    1.安装epel-release源

    // 也可以从http://repo.saltstack.com/yum/redhat/下载安装salt最新的源
    [root@saltserver ~]# yum -y install epel-release
    

    2.安装相应的salt包

    // 查看salt安装包
    [root@saltserver ~]# yum list | grep salt
    python-salttesting.noarch                      2015.7.10-1.el6              epel
    salt.noarch                                    2015.5.10-2.el6              epel
    salt-api.noarch                                2015.5.10-2.el6              epel
    salt-cloud.noarch                              2015.5.10-2.el6              epel
    salt-master.noarch                             2015.5.10-2.el6              epel
    salt-minion.noarch                             2015.5.10-2.el6              epel
    salt-ssh.noarch                                2015.5.10-2.el6              epel
    salt-syndic.noarch                             2015.5.10-2.el6              epel
    
    // 服务器端安装salt-master和salt-minion
    [root@saltserver ~]# yum -y install salt-master.noarch salt-minion.noarch
    
    // 客户端安装salt-minion即可
    [root@saltminion01 ~]# yum -y install salt-minion.noarch
    

    三、 启动saltstack服务

    1.启动salt-master

    [root@saltserver ~]# /etc/init.d/salt-master start
    // 服务端监听4505和4506两个端口,4505为消息发布的端口,4506为和客户端通信的端口
    [root@saltserver ~]# netstat -nltup | egrep "4505|4506"
    tcp        0      0 0.0.0.0:4505                0.0.0.0:*                   LISTEN      1589/python2.6      
    tcp        0      0 0.0.0.0:4506                0.0.0.0:*                   LISTEN      1609/python2.6      
    

    2.编辑minion端的配置文件,并启动minion

    // 以saltminion01为例 
    [root@saltminion01 ~]# vim /etc/salt/minion
    // 修改master为服务端的主机名或ip地址,如果规模较大也可以搭建本地dns服务来提供名称解析服务
    master: saltserver.local
    // 修改id值为客户端的主机名,这会做为服务端上显示的客户端标识
    #id:
    id: saltminion01.local
    // 启动minion
    [root@saltminion01 ~]# /etc/init.d/salt-minion start
    

    四、 saltstack配置认证

    master端和minion端通信需要建立一个安全通道,传输过程需要加密,所以得配置认证,也是通过密钥对来加密解密的

    minion在第一次启动时会在/etc/salt/pki/minion/下生成minion.pem和minion.pub,其中.pub为公钥,它会把公钥传输给master

    master第一次启动时也会在/etc/salt/pki/master下生成密钥对,当master接收到minion传过来的公钥后,通过salt-key工具接受这个公钥,一旦接受后就会在/etc/salt/pki/master/minions/目录里存放刚刚接受的公钥,同时客户端也会接受master传过去的公钥,把它放在/etc/salt/pki/minion目录下,并命名为minion_master.pub

    以上过程需要借助salt-key工具来实现

    salt-key常用选项

     -a  后面跟主机名,认证指定主机
     -A 认证所有主机
     -r  跟主机名,拒绝指定主机
     -R  拒绝所有主机
     -d 跟主机名,删除指定主机认证
     -D 删除全部主机认证
     -y 省略掉交互,相当于直接按了y
    
    

    显示key

    // 服务端
    [root@saltserver ~]# salt-key -L
    Accepted Keys:
    Denied Keys:
    Unaccepted Keys:
    saltminion.local
    saltminion01.local
    saltserver
    Rejected Keys:
    [root@saltserver ~]# 
    

    认证主机

    // 可以一台一台认证,也可以批量认证
    [root@saltserver ~]# salt-key -a saltserver
    The following keys are going to be accepted:
    Unaccepted Keys:
    saltserver
    Proceed? [n/Y] Y
    Key for minion saltserver accepted.
    [root@saltserver ~]# salt-key -L
    Accepted Keys:
    saltserver
    Denied Keys:
    Unaccepted Keys:
    saltminion.local
    saltminion01.local
    Rejected Keys:
    // 批量认证,也可通过修改配置文件实现
    // 在 /etc/salt/master中取消下句注释 #auto_accept: True
    [root@saltserver ~]# salt-key -A
    The following keys are going to be accepted:
    Unaccepted Keys:
    saltminion.local
    saltminion01.local
    Proceed? [n/Y] Y
    Key for minion saltminion.local accepted.
    Key for minion saltminion01.local accepted.
    [root@saltserver ~]# salt-key -L
    Accepted Keys:
    saltminion.local
    saltminion01.local
    saltserver
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    

    删除主机认证

    // 以saltminion01为例,在服务器上操作, -D删除所有认证
    [root@saltserver ~]# salt-key -d saltminion01.local -y
    Deleting the following keys:
    Accepted Keys:
    saltminion01.local
    Key for minion saltminion01.local deleted.
    // minion端重启服务
    [root@saltminion01 ~]# /etc/init.d/salt-minion restart
    Stopping salt-minion daemon:                               [  OK  ]
    Starting salt-minion daemon:                               [  OK  ]
    // 服务器再次检查key
    [root@saltserver ~]# salt-key -L
    Accepted Keys:
    saltminion.local
    saltserver
    Denied Keys:
    Unaccepted Keys:
    saltminion01.local
    Rejected Keys:
    

    拒绝key

    // -R 拒绝所有
    [root@saltserver ~]# salt-key -r saltminion01.local -y
    Key for minion saltminion01.local rejected.
    [root@saltserver ~]# salt-key -L
    Accepted Keys:
    saltminion.local
    saltserver
    Denied Keys:
    Unaccepted Keys:
    Rejected Keys:
    saltminion01.local
    

    五、 saltstack远程执行命令

    远程执行命令语法

    salt <target> <模块名>.<方法> [参数…]
    

    target支持以下类型

    Glob通配,salt的默认类型

    // 模块的保存位置/usr/lib/python2.6/site-packages/salt/modules/
    // 方法可以查看模块vim /usr/lib/python2.6/site-packages/salt/modules/test.py,
    // 也可以从salt的官方文档查询
    // 查看minion可用模块salt 'target' sys.list_modules
    // 查看模块的函数 salt 'target' sys.list_functions test
    // 系统帮助文件 salt 'target' sys.doc test.ping
    // *表示所有主机,test代表模块,ping是方法。
    [root@saltserver ~]# salt "*" test.ping
    saltminion01.local:
        True
    saltminion.local:
        True
    saltserver:
        True
    

    -L,长选项--list,该选项通个逗号分隔的列表来指定多个Minion。列表中不使用glob或正则表达式进行模式

    [root@saltserver ~]# salt -L saltminion.local,saltminion01.local test.ping
    saltminion.local:
        True
    saltminion01.local:
        True
    

    短选项:-S,长选项: --ipcidr。通过过指定一个IPv4地址或一个CIDR的ipv4子网来target minion。

    [root@saltserver ~]# salt -S 192.168.1.0/24 test.ping
    saltminion01.local:
        True
    saltminion.local:
        True
    saltserver:
        True
    

    短选项: -E 长选项: --pcre。Perl语言兼容正则表达式(PCRE)

    [root@saltserver ~]# salt -E  '^saltserver$' test.ping
    saltserver:
        True
        
    [root@saltserver ~]# salt -E  '.*.local$' test.ping            
    saltminion.local:
        True
    saltminion01.local:
        True
    

    短选项:-G 长选项: --grain。

    // 对os是CentOS的主机进行ping测试
    [root@saltserver ~]# salt -G "os:CentOS" test.ping
    saltserver:
        True
    saltminion01.local:
        True
    saltminion.local:
        True
    

    Grain PCRE 短选项: 无 长选项:--grain-pcre

    salt –grain-pcre ‘os:red(hat|flag) test.ping’
    

    Pillar 短选项: -I,长选项: --pillar

    实例见下,pillar部分

    混合(compound),短选项: -C,长选项: --compound。混合target允许用户在一个shell命令中指定多种target类型。默认使用glob,想指定其他target类型,则需要在前面追加上类型简写和@符号

    简写 target
    G Grain
    E PCRE Minion ID
    P Grain PCRE
    L 列表
    I Pillar
    S 子网/IP地址
    R SECO范围
     # salt -C ‘G@os:Ubuntu,I@role:web,S@192.168l100.0/24’ test.ping
    

    节点组(nodegroup)短选项:-N,长选项:--nodegroup。在命令行使用前必须先在master的配置文件中以target列表进行定义(使用混合匹配语法)

      nodegroups:
        webdev: 'I@role:web,G@cluster:dev'
        webdqa: 'I@role:web,G@cluster:qa'
        webprod: 'I@role:web,G@cluster:prod'
    

    节点组定义完毕并重载Master配置文件后,可以通过salt进行target:

    salt -N wendev test.ping
    

    六、 grains

    grains是在minion启动时收集到的一些信息,比如操作系统类型、网卡ip、内核版本、cpu架构等。

    列出所有的grains项目名字

    [root@saltserver ~]# salt 'saltminion01.local' grains.ls | head -n 10
    saltminion01.local:
        - SSDs
        - biosreleasedate
        - biosversion
        - cpu_flags
        - cpu_model
        - cpuarch
        - domain
        - fqdn
        - fqdn_ip4
    

    列出所有grains项目以及值

    [root@saltserver ~]# salt 'saltminion01.local' grains.items | head -n 10
    saltminion01.local:
        ----------
        SSDs:
        biosreleasedate:
            07/02/2015
        biosversion:
            6.00
        cpu_flags:
            - fpu
            - vme
    

    grains的信息并不是动态的,并不会实时变更,它是在minion启动时收集到的。

    我们可以根据grains收集到的一些信息,做配置管理工作。

    [root@saltserver ~]# salt -G 'os:CentOS' cmd.run 'hostname'
    saltminion.local:
        saltminion.local
    saltminion01.local:
        saltminion01.local
    saltserver:
        saltserver.local
    

    grains支持自定义信息。

    // 在客户端编辑/etc/salt/grains文件
    [root@saltminion01 ~]# vim /etc/salt/grains
    // 添加如下两行自定义信息
    role: nginx
    env: test
    // 重启minion服务
    [root@saltminion01 ~]# /etc/init.d/salt-minion restart
    Stopping salt-minion daemon:                               [  OK  ]
    Starting salt-minion daemon:                               [  OK  ]
    // 在服务端查看自定义的信息
    [root@saltserver ~]# salt 'saltminion01.local' grains.item role env
    saltminion01.local:
        ----------
        env:
            test
        role:
            nginx
    // 可以利用自定义的信息来作为target使用
    [root@saltserver ~]# salt -G 'role:nginx' cmd.run 'hostname'
    saltminion01.local:
        saltminion01.local
    

    七、 pillar

    pillar和grains不一样,是在master上定义的,并且是针对minion定义的一些信息。像一些比较重要的数据(密码)可以存在pillar里,还可以定义变量等。

    配置自定义pillar

    // 在服务器端操作
    [root@saltserver ~]# vim  /etc/salt/master
    // 取消下三行的注释
    // salt中只能用空格对齐,不能用tab代替空格。空格数不限制,但是相同级别的缩进的空格数一致。
    pillar_roots:
      base:
        - /srv/pillar
    // 新建/src/pillar
    rm: remove directory `/src/pillar'? y
    [root@saltserver ~]# mkdir /srv/pillar
    [root@saltserver ~]# ls -l !$
    ls -l /srv/pillar
    total 0
    // 在/srv/pillar新建test.sls
    [root@saltserver pillar]# echo 'conf: /etc/123.conf'>> test.sls
    [root@saltserver pillar]# cat test.sls 
    conf: /etc/123.conf
    // 在/srv/pillar下新建top.sls
    conf: /etc/123.conf
    [root@saltserver pillar]# cat >>top.sls<<EOF
    > base:
    >   'saltminion01':
    >     - test
    > EOF
    [root@saltserver pillar]# cat top.sls 
    base:
      'saltminion01':
        - test
    
    // 重启master
    [root@saltserver pillar]# /etc/init.d/salt-master restart
    Stopping salt-master daemon:                               [  OK  ]
    Starting salt-master daemon:                               [  OK  ]
    // 刷新pillar配置来获取新的pillar状态
    [root@saltserver pillar]# salt '*' saltutil.refresh_pillar
    saltminion01.local:
        True
    saltminion.local:
        True
    saltserver:
        True
    
    // 验证
    [root@saltserver pillar]# salt  '*' pillar.item conf
    saltserver:
        ----------
    saltminion.local:
        ----------
    saltminion01.local:
        ----------
        conf:
            /etc/123.conf
    
    //pillar同样可以用来作为salt的匹配对象
    [root@saltserver pillar]# salt -I 'conf:/etc/123.conf' test.ping
    saltminion01.local:
        True
    

    八、 安装配置httpd

    1.修辑master的配置文件

    [root@saltserver pillar]# vim /etc/salt/master
    // 取消下面三句的注释
    file_roots:
      base:
        - /srv/salt
    
    // 创建/srv/salt目录
    [root@saltserver pillar]# mkdir /srv/salt/
    [root@saltserver pillar]# cd /srv/salt/
    

    2.创建/srv/salt/top.sls文件

    [root@saltserver salt]# vim top.sls
    base:
      '*':
        - httpd
    // 重启master
    [root@saltserver salt]# /etc/init.d/salt-master restart
    Stopping salt-master daemon:                               [  OK  ]
    Starting salt-master daemon:                               [  OK  ]
    

    3.新建/srv/salt/httpd.sls文件

    [root@saltserver salt]# vim /srv/salt/httpd.sls
    [root@saltserver salt]# vim httpd.sls
    install_httpd:
      pkg.installed:
        - names:
          - httpd
          - httpd-devel
      service.running:
        - name: httpd
        - enable: True
    

    4.测试安装(以saltminion.local为例)

    [root@saltserver salt]# salt 'saltminion.local' state.highstate                 
    saltminion.local:
    ----------
              ID: install_httpd
        Function: pkg.installed
            Name: httpd
          Result: True
         Comment: Package httpd is already installed.
         Started: 00:17:18.266735
        Duration: 1064.537 ms
         Changes:   
    ----------
              ID: install_httpd
        Function: pkg.installed
            Name: httpd-devel
          Result: True
         Comment: The following packages were installed/updated: httpd-devel
         Started: 00:17:19.331436
        Duration: 33639.881 ms
         Changes:   
                  ----------
                  apr:
                      ----------
                      new:
                          1.3.9-5.el6_9.1
                      old:
                          1.3.9-5.el6_2
                  apr-devel:
                      ----------
                      new:
                          1.3.9-5.el6_9.1
                      old:
                  apr-util-devel:
                      ----------
                      new:
                          1.3.9-3.el6_0.1
                      old:
                  cyrus-sasl-devel:
                      ----------
                      new:
                          2.1.23-15.el6_6.2
                      old:
                  db4:
                      ----------
                      new:
                          4.7.25-22.el6
                      old:
                          4.7.25-20.el6_7
                  db4-cxx:
                      ----------
                      new:
                          4.7.25-22.el6
                      old:
                  db4-devel:
                      ----------
                      new:
                          4.7.25-22.el6
                      old:
                  db4-utils:
                      ----------
                      new:
                          4.7.25-22.el6
                      old:
                          4.7.25-20.el6_7
                  expat:
                      ----------
                      new:
                          2.0.1-13.el6_8
                      old:
                          2.0.1-11.el6_2
                  expat-devel:
                      ----------
                      new:
                          2.0.1-13.el6_8
                      old:
                  httpd-devel:
                      ----------
                      new:
                          2.2.15-69.el6.centos
                      old:
                  openldap:
                      ----------
                      new:
                          2.4.40-16.el6
                      old:
                          2.4.40-12.el6
                  openldap-devel:
                      ----------
                      new:
                          2.4.40-16.el6
                      old:
    ----------
              ID: install_httpd
        Function: service.running
            Name: httpd
          Result: True
         Comment: Service httpd has been enabled, and is running
         Started: 00:17:53.015925
        Duration: 670.976 ms
         Changes:   
                  ----------
                  httpd:
                      True
    
    Summary
    ------------
    Succeeded: 3 (changed=2)
    Failed:    0
    ------------
    Total states run:     3
    
    // 客户端上检查
    [root@saltminion ~]# lsof -i :80
    COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    httpd   7505   root    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7507 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7508 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7509 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7510 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7511 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7512 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7513 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    httpd   7514 apache    4u  IPv6  43159      0t0  TCP *:http (LISTEN)
    

    九、 配置管理文件

    1.新建/srv/salt/test.sls

    [root@saltserver salt]# vim /srv/salt/test.sls
    // 添加如下内容
    // 说明:第一行的file_test为自定的名字,表示该配置段的名字,可以在别的配置段中引用它,source指定文件从哪里拷贝,
    // 这里的salt://test/123/1.txt相当于是/srv/salt/test/123/1.txt
    file_test:
      file.managed:
        - name: /tmp/aminglinux.com
        - source: salt://test/123/1.txt
        - user: root
        - group: root
        - mode: 600
    
    [root@saltserver salt]# mkdir -p test/123
    [root@saltserver salt]# echo '11111' >> test/123/1.txt
    [root@saltserver salt]# cat !$
    cat test/123/1.txt
    11111
    

    2.编辑/srv/salt/top.sls文件

    [root@saltserver salt]# vim top.sls 
    base:
      '*':
        - test
    

    3.同步测试

    [root@saltserver salt]# salt 'saltminion01.local' state.highstate
    saltminion01.local:
    ----------
              ID: file_test
        Function: file.managed
            Name: /tmp/aminglinux.com
          Result: True
         Comment: File /tmp/aminglinux.com updated
         Started: 13:08:40.688514
        Duration: 18.984 ms
         Changes:   
                  ----------
                  diff:
                      New file
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    
    // saltminion01.local查看文件是否同步过去
    [root@saltminion01 ~]# cat /tmp/aminglinux.com
    11111
    [root@saltminion01 ~]# ls -l /tmp/aminglinux.com
    -rw------- 1 root root 6 Sep  5 13:08 /tmp/aminglinux.com
    

    十、 配置管理目录

    1.在master上新建配置文件/srv/salt/test_dir.sls

    [root@saltserver salt]# vim /srv/salt/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
    // clean:True表示源删除文件或目录,目标也会跟着删除,否则不会
    

    2.修改top.sls

    [root@saltserver salt]# vim top.sls 
    base:
      '*':
        - test_dir
    

    3.同步测试

    [root@saltserver salt]# salt 'saltminion01.local' state.highstate
    saltminion01.local:
    ----------
              ID: file_dir
        Function: file.recurse
            Name: /tmp/testdir
          Result: True
         Comment: Recursively updated /tmp/testdir
         Started: 13:16:30.379320
        Duration: 1044.869 ms
         Changes:   
                  ----------
                  /tmp/testdir:
                      ----------
                      mode:
                          0750
                  /tmp/testdir/1.txt:
                      ----------
                      diff:
                          New file
                      mode:
                          0640
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    
    // 在saltminion01.local查看目录是否同步成功
    drwxr-x--- 2 root root 4096 Sep  5 13:16 testdir
    [root@saltminion01 ~]# ls -lR /tmp/
    /tmp/:
    total 8
    -rw------- 1 root root    6 Sep  5 13:08 aminglinux.com
    drwxr-x--- 2 root root 4096 Sep  5 13:16 testdir
    
    /tmp/testdir:
    total 4
    -rw-r----- 1 root root 6 Sep  5 13:16 1.txt
    // 注意,如果目录为空,则不会同步
    

    十一、 配置管理远程命令

    1.新建配置文件/srv/salt/shell_test.sls

    [root@saltserver salt]# vim /srv/salt/shell_test.sls 
    // 内容如下
    shell_test:
      cmd.script:
        - source: salt://test/1.sh
        - user: root
    

    2.在source目录下新建脚本

    [root@saltserver salt]#  vim /srv/salt/test/1.sh 
    #!/bin/bash
    
    echo "haha"
    

    3.修改top.sls内容

    "test/1.sh" [New] 3L, 25C written
    [root@saltserver salt]# vim top.sls 
    base:
      '*':
        - shell_test
    

    4.测试

    "top.sls" 3L, 30C written
    [root@saltserver salt]# salt 'saltminion01.local' state.highstate 
    saltminion01.local:
    ----------
              ID: shell_test
        Function: cmd.script
          Result: True
         Comment: Command 'shell_test' run
         Started: 13:27:50.265831
        Duration: 146.006 ms
         Changes:   
                  ----------
                  pid:
                      10120
                  retcode:
                      0
                  stderr:
                  stdout:
                      haha
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    

    十二、 配置管理计划任务

    1.新建/srv/salt/cron_test.sls文件

    Total states run:     1
    [root@saltserver salt]# vim /srv/salt/cron_test.sls
    // 添加如下内容
    cron_test:
      cron.present:
        - name: /bin/touch /tmp/111.txt
        - user: root
        - minute: '*'
        - hour: 20
        - daymonth: '*'
        - month: '*'
        - dayweek: '*'
    // 注意,*需要用单引号引起来。当然我们还可以使用file.managed模块来管理cron,因为系统的cron都是以配置文件的形式存在的。
    

    2.编辑top.sls文件

    [root@saltserver salt]# vim top.sls 
    base:
      '*':
        - cron_test
    

    3.测试

    // 在master端推送
    [root@saltserver salt]# salt 'saltminion01.local' state.highstate
    saltminion01.local:
    ----------
              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: 13:59:11.007707
        Duration: 19.99 ms
         Changes:   
                  ----------
                  root:
                      /bin/touch /tmp/111.txt
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    
    //在saltminion01.local查看计划任务,不要手动修改salt管理的crontab任务,否则就没法删除或者修改这个cron了
    [root@saltminion01 ~]# crontab -e
    # Lines below here are managed by Salt, do not edit
    # SALT_CRON_IDENTIFIER:/bin/touch /tmp/111.txt
    * 20 * * * /bin/touch /tmp/111.txt
    

    4.删除任务计划

    // 修改corn_test.sls
    // 两者不能共存,要想删除一个cron,那之前的present就得去掉。
    [root@saltserver salt]# vim cron_test.sls 
    cron_test:
      cron.absent:
        - name: /bin/touch /tmp/111.txt
    

    5.同步配置文件

    [root@saltserver salt]# salt 'saltminion01.local' state.highstate
    saltminion01.local:
    ----------
              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: 14:04:29.354015
        Duration: 12.691 ms
         Changes:   
                  ----------
                  root:
                      /bin/touch /tmp/111.txt
    
    Summary
    ------------
    Succeeded: 1 (changed=1)
    Failed:    0
    ------------
    Total states run:     1
    

    6.在saltminion01.local上检查

    [root@saltminion01 ~]# crontab -e
    // 已经删除了
    # Lines below here are managed by Salt, do not edit
    ~                                                     
    

    十三、 其他命令

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

    // cp.get_file
    [root@saltserver salt]# salt '*' cp.get_file salt://test/1.sh /tmp/1.sh
    saltminion01.local:
        /tmp/1.sh
    saltminion.local:
        /tmp/1.sh
    saltserver:
        /tmp/1.sh
    
    //验证
    [root@saltminion01 ~]# ls -l /tmp/1.sh 
    -rw-r--r-- 1 root root 25 Sep  5 14:08 /tmp/1.sh
    

    2.拷贝master上的目录到客户端

    // cp.get_dir
    [root@saltserver salt]# salt '*' cp.get_dir salt://test/123 /tmp/    
    saltminion01.local:
        - /tmp//123/1.txt
    saltserver:
        - /tmp//123/1.txt
    saltminion.local:
        - /tmp//123/1.txt
    
    //在minion端验证
    [root@saltminion01 ~]# ls -lR /tmp/
    /tmp/:
    total 16
    drwxr-xr-x 2 root root 4096 Sep  5 14:20 123
    -rw-r--r-- 1 root root   25 Sep  5 14:08 1.sh
    -rw------- 1 root root    6 Sep  5 13:08 aminglinux.com
    drwxr-x--- 2 root root 4096 Sep  5 13:16 testdir
    
    /tmp/123:
    total 4
    -rw-r--r-- 1 root root 6 Sep  5 14:20 1.txt
    
    /tmp/testdir:
    total 4
    -rw-r----- 1 root root 6 Sep  5 13:16 1.txt
    
    

    3.显示存活的minion

    //salt-run manage.up  
    [root@saltserver salt]# salt-run manage.up  
    - saltminion.local
    - saltminion01.local
    - saltserver
    

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

    //cmd.script 
    [root@saltserver salt]# salt '*' cmd.script salt://test/1.sh  
    saltminion01.local:
        ----------
        pid:
            10281
        retcode:
            0
        stderr:
        stdout:
            haha
    saltserver:
        ----------
        pid:
            80391
        retcode:
            0
        stderr:
        stdout:
            haha
    saltminion.local:
        ----------
        pid:
            9392
        retcode:
            0
        stderr:
        stdout:
            haha
    

    十四、 salt-ssh使用

    1.安装salt-ssh

    [root@saltserver salt]# yum -y install salt-ssh
    

    2.新建配置文件 /etc/salt/roster

    [root@saltserver salt]# vim /etc/salt/roster 
    saltminion.local:
      host: 192.168.1.43
      user: root
      passwd: 123456
    saltminion01.local:
      host: 192.168.1.42
      user: root
      passwd: 123456
    

    3.推送key

    // 第一次推送不成功
    [root@saltserver salt]# salt-ssh --key-deploy '*' -r 'w' 
    saltminion.local:
        ----------
        retcode:
            254
        stderr:
        stdout:
            The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
            The authenticity of host '192.168.1.43 (192.168.1.43)' can't be established.
            RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
            Are you sure you want to continue connecting (yes/no)? 
    saltminion01.local:
        ----------
        retcode:
            254
        stderr:
        stdout:
            The host key needs to be accepted, to auto accept run salt-ssh with the -i flag:
            The authenticity of host '192.168.1.42 (192.168.1.42)' can't be established.
            RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
            Are you sure you want to continue connecting (yes/no)? 
    //需要登录一次
    [root@saltserver salt]# ssh saltminion01.local
    The authenticity of host 'saltminion01.local (192.168.1.42)' can't be established.
    RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'saltminion01.local' (RSA) to the list of known hosts.
    root@saltminion01.local's password: 
    Last login: Sat Sep  1 23:33:29 2018 from 192.168.1.9
    [root@saltminion01 ~]# ssh saltminion.local  
    The authenticity of host 'saltminion.local (192.168.1.43)' can't be established.
    RSA key fingerprint is 3d:d4:e5:45:01:72:0e:15:2f:43:2f:6a:2e:c6:77:a7.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added 'saltminion.local,192.168.1.43' (RSA) to the list of known hosts.
    root@saltminion.local's password: 
    Last login: Sat Sep  1 23:33:40 2018 from 192.168.1.9
    [root@saltserver salt]# salt-ssh --key-deploy '*' -r 'w' 
    saltminion01.local:
        ----------
        retcode:
            0
        stderr:
        stdout:
             14:48:01 up 4 days, 15:41,  2 users,  load average: 0.07, 0.03, 0.05
            USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
            root     tty1     -                Sat09    3days  0.04s  0.04s -bash
            root     pts/1    192.168.1.9      Sat23    5:19   0.15s  0.15s -bash
    saltminion.local:
        ----------
        retcode:
            0
        stderr:
        stdout:
             14:48:10 up 4 days, 15:41,  2 users,  load average: 0.00, 0.01, 0.05
            USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
            root     tty1     -                Sat09    3days  0.00s  0.00s -bash
            root     pts/1    192.168.1.9      Sat23    5:38   0.04s  0.04s -bash
    // 删除roster中用户的密码,再次测试
    [root@saltserver salt]# salt-ssh  '*' -r 'w'             
    saltminion.local:
        ----------
        retcode:
            0
        stderr:
        stdout:
             14:49:55 up 4 days, 15:43,  2 users,  load average: 0.00, 0.01, 0.05
            USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
            root     tty1     -                Sat09    3days  0.00s  0.00s -bash
            root     pts/1    192.168.1.9      Sat23    7:23   0.04s  0.04s -bash
    saltminion01.local:
        ----------
        retcode:
            0
        stderr:
        stdout:
             14:49:46 up 4 days, 15:42,  2 users,  load average: 0.01, 0.02, 0.05
            USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
            root     tty1     -                Sat09    3days  0.04s  0.04s -bash
            root     pts/1    192.168.1.9      Sat23    7:04   0.15s  0.15s -bash
    
  • 相关阅读:
    二元查找树的后序遍历结果
    CFileDialog设置多选时的一个问题
    KanRSS.com
    由shuttle这个单词想起的一个小故事
    Sun Java moved to the Partner repository
    Sun Java moved to the Partner repository
    扩展std::string功能的几个做法
    NetBeans 时事通讯(刊号 # 99 Apr 16, 2010)
    NetBeans IDE 6.9 Beta 发布
    KanRSS.com
  • 原文地址:https://www.cnblogs.com/minn/p/9592549.html
Copyright © 2020-2023  润新知