linux 学习笔记-095-自动化运维-配置管理目录,配置管理远程命令和任务计划,salt-ssh 使用,其他命令

发布于 2018-05-28  129 次阅读


配置管理目录

批量对 minion 端的目录进行操作

[root@am-01:~#] vim /srv/salt/test_dir.sls

file_dir:

#定义这个任务的名字

  file.recurse:

#针对目录使用的是 file.recurse 模块

    - name: /tmp/testdir

#指定 minion 端的目录

    - source: salt://test/123

#指定 master 端的模版文件,简单来讲,"salt:// == /srv/salt/",而"/srv/salt/"是在/etc/salt/master 文件的"file_roots"下定义的,这个目录可自定义

    - user: root

    - file_mode: 640

    - dir_mode: 750

#定义所有者,文件的权限和目录的权限

    - mkdir: True

#设置如果没这个目录则自动去创建这个目录

    - clean: True

#加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除
[root@am-01:~#] cd /srv/salt/

[root@am-01:/srv/salt#] vim top.sls

base:

  'am-02':

    - test

    - test_dir

#增加一个配置文件
[root@am-01:/srv/salt#] salt 'am-02' state.highstate

am-02:

----------

          ID: file_test

    Function: file.managed

        Name: /tmp/am.com

      Result: True

     Comment: File /tmp/am.com is in the correct state

     Started: 23:33:13.058765

    Duration: 281.467 ms

     Changes:  

----------

          ID: file_dir

    Function: file.recurse

        Name: /tmp/testdir

      Result: True

     Comment: Recursively updated /tmp/testdir

     Started: 23:33:13.341054

    Duration: 318.423 ms

     Changes:  

              ----------

              /tmp/testdir/1.txt:

                  ----------

                  diff:

                      New file

                  mode:

                      0640



Summary for am-02

------------

Succeeded: 2 (changed=1)

Failed:    0

------------

Total states run:     2

Total run time: 599.890 ms

#执行一下这个配置
[root@am-02:~#] ls -l /tmp/testdir/

总用量 4

-rw-r----- 1 root root 2673 5 月  25 23:33 1.txt

#在 minion 端上检查可以见到,创建成功了,而且权限也是对的
[root@am-01:/srv/salt#] vim top.sls

base:

  'am-02':

    - test_dir

[root@am-01:/srv/salt#] cd test/123/

[root@am-01:/srv/salt/test/123#] ls

1.txt

[root@am-01:/srv/salt/test/123#] touch 2.txt

[root@am-01:/srv/salt/test/123#] mkdir tmp

[root@am-01:/srv/salt/test/123#] rm -rf 1.txt

[root@am-01:/srv/salt/test/123#] ls

2.txt  tmp

[root@am-01:/srv/salt/test/123#] salt 'am-02' state.highstate

am-02:

----------

          ID: file_dir

    Function: file.recurse

        Name: /tmp/testdir

      Result: True

     Comment: Recursively updated /tmp/testdir

     Started: 23:38:42.334033

    Duration: 355.085 ms

     Changes:  

              ----------

              /tmp/testdir/2.txt:

                  ----------

                  diff:

                      New file

                  mode:

                      0640

              removed:

                  - /tmp/testdir/1.txt



Summary for am-02

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

Total run time: 355.085 ms

#在模板目录下新建两个文件和一个目录,并把 1.txt 删除,重新执行这个配置
[root@am-02:~#] ls -l /tmp/testdir/

总用量 0

-rw-r----- 1 root root 0 5 月  25 23:38 2.txt

#检查发现,1.txt 已经被删除,同时也创建了 2.txt,但是 tmp 目录并没有同步过来

#这是因为 saltstack 有个特性,空目录是不会同步过来的

#如果想要这个目录,只能在这个目录下建立一个文件,空目录也可以

配置管理远程命令

批量在 minion 端执行脚本

[root@am-01:/srv/salt/test/123#] cd /srv/salt/

[root@am-01:/srv/salt#] vim shell_test.sls

shell_test:

#定义这个任务的名字

  cmd.script:

#使用 cmd.script 模块

    - source: salt://test/1.sh

    - user: root

#在 master 端创建需要执行的脚本,并指定以 root 用户运行这个脚本
[root@am-01:/srv/salt/test#] vim 1.sh

#!/bin/bash

if [ ! -d /tmp/1233 ]

then

    mkdir /tmp/1233

    touch /tmp/1233/123.txt

fi

#在指定目录下编写脚本,这个脚本很简单,就是判断/tmp/1233 目录是否存在,不存在的话就创建这个目录,并在这个目录下创建一个文件
[root@am-01:/srv/salt#] vim top.sls

base:

  'am-02':

    - shell_test

#修改入口文件 top.sls,指定配置文件



[root@am-01:/srv/salt#] salt 'am-02' state.highstate

am-02:

----------

          ID: shell_test

    Function: cmd.script

      Result: True

     Comment: Command 'shell_test' run

     Started: 23:54:46.198076

    Duration: 141.746 ms

     Changes:  

              ----------

              pid:

                  3728

              retcode:

                  0

              stderr:

              stdout:



Summary for am-02

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

Total run time: 141.746 ms

#执行这个配置文件
[root@am-02:~#] ls -l /tmp/

总用量 4

drwxr-xr-x 2 root   root     20 5 月  25 23:57 1233

[root@am-02:~#] ls -l /tmp/1233/

总用量 0

-rw-r--r-- 1 root root 0 5 月  25 23:57 123.txt

#在 minion 端上检查,可以见到,脚本是运行正常的

配置管理计划任务

批量为 minion 端配置任务计划

[root@am-01:/srv/salt#] vim cron_test.sls

cron_test:

#定义这个任务的名字

  cron.present:

#使用 cron.present 模块

    - name: /bin/touch /tmp/111.txt

#定义要执行的命令

    - user: root

#定义以 root 用户权限执行

    - minute: '*'

    - hour: 20

    - daymonth: '*'

    - month: '*'

    - dayweek: '*'

#定义分钟、小时、日期、月份、星期

#注意,*号需要用单引号引起来,当然我们还可以使用 file.managed 模块来管理 cron,因为系统的 cron 都是以配置文件的形式存在的
[root@am-01:/srv/salt#] vim top.sls

base:

  'am-02':

    - cron_test

[root@am-01:/srv/salt#] salt 'am-02' state.highstate

am-02:

----------

          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: 00:07:06.044721

    Duration: 1046.251 ms

     Changes:  

              ----------

              root:

                  /bin/touch /tmp/111.txt



Summary for am-02

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

Total run time:   1.046 s

#修改一下入口文件,并执行一下这个配置
[root@am-02:~#] 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

#minion 端检查可以见到,已经添加了对应的任务计划

#这里需要注意的是,自动添加上的两句"#"号开头的语句是不能去修改的
[root@am-01:/srv/salt#] vim cron_test.sls

cron_test:

  cron.absent:

    - name: /bin/touch /tmp/111.txt

[root@am-01:/srv/salt#] salt 'am-02' state.highstate

am-02:

----------

          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:12:55.310561

    Duration: 429.104 ms

     Changes:  

              ----------

              root:

                  /bin/touch /tmp/111.txt



Summary for am-02

------------

Succeeded: 1 (changed=1)

Failed:    0

------------

Total states run:     1

Total run time: 429.104 ms

#修改配置文件信息,实现删除任务计划
[root@am-02:~#] crontab -l

# Lines below here are managed by Salt, do not edit

#检查可以见到,任务计划已经没了

其他命令

[root@am-01:/srv/salt#] salt 'am-02' cp.get_file salt://test/1.sh /tmp/1233/

am-02:

    /tmp/1233/1.sh

#使用"cp.get_file"实现把 master 的文件拷贝到 minion 端上
[root@am-02:~#] ls -l /tmp/1233/

总用量 4

-rw-r--r-- 1 root root  0 5 月  25 23:57 123.txt

-rw-r--r-- 1 root root 90 5 月  26 00:16 1.sh

#minion 端上检查是有这个文件的
[root@am-01:/srv/salt#] salt 'am-02' cp.get_dir salt://test/123 /tmp/1233/

am-02:

    - /tmp/1233//123/2.txt

    - /tmp/1233//123/tmp

#使用"cp.get_dir"实现把 master 的目录拷贝到 minion 端上
[root@am-02:~#] ls -l /tmp/1233/

总用量 4

drwxr-xr-x 3 root root 28 5 月  26 00:18 123

-rw-r--r-- 1 root root  0 5 月  25 23:57 123.txt

-rw-r--r-- 1 root root 90 5 月  26 00:16 1.sh

#minion 端上检查是有这个目录的
[root@am-01:/srv/salt#] salt-run manage.up

- am-01

- am-02

#显示存活的 minion
[root@am-01:/srv/salt#] salt 'am-02' cmd.script salt://test/1.sh

am-02:

    ----------

    pid:

        4583

    retcode:

        0

    stderr:

    stdout:

#命令行方式执行脚本

salt-ssh 使用

salt-ssh 不需要对客户端做认证,客户端也不用安装 salt-minion,它类似 pssh/expect

[root@am-01:/srv/salt#] yum -y install salt-ssh

[root@am-01:/srv/salt#] vim /etc/salt/roster

am-01:

  host: 172.17.1.240

  root: root

  passwd: itsupport.0

am-02:

  host: 172.17.1.242

  root: root

  passwd: itsupport.0

#安装 salt-ssh,设置配置文件
[root@am-01:/srv/salt#] salt-ssh --key-deploy 'am-02' -r 'w'

am-02:

    ----------

    retcode:

        0

    stderr:

    stdout:

        root@172.17.1.242's password:

         00:34:24 up  6:42,  1 user,  load average: 0.16, 0.05, 0.06

        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

        root     pts/0    172.17.1.1       23:22   10:40   0.33s  0.33s -bash

#运行成功

#加上"--key-deploy"参数则会把公钥推送到对方机器上

#第一次执行的时候会自动把本机的公钥放到对方机器上,然后就可以把 roster 里面的密码去掉

#还有就是,因为第一次 ssh 登陆对方机器的时候是需要输入 yes 或 no 的,所以要使用 salt-ssh,你还得先手工 ssh 登陆对方机器,如:ssh am-02
[root@am-01:/srv/salt#] vim /etc/salt/roster

am-01:

  host: 172.17.1.240

  root: root

am-02:

  host: 172.17.1.242

  root: root

#把密码删除
[root@am-01:/srv/salt#] salt-ssh 'am-02' -r 'w'

am-02:

    ----------

    retcode:

        0

    stderr:

    stdout:

         00:40:10 up  6:47,  1 user,  load average: 0.03, 0.04, 0.05

        USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

        root     pts/0    172.17.1.1       23:22   16:26   0.33s  0.33s -bash

#这次不需要再指定密码,也不需要再使用"--key-deploy"参数