Excel不相邻列如何打印在一起-英雄云拓展知识分享
138
2023-11-07
【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第3章,第5节,由陈刚、王洪军编著。
3.5.2 通过Salt Master远程执行脚本命令
SaltStack 的远程命令执行分为两个:cmd.run 和 cmd.script 。 这两个命令的执 行机制还是有一些区别的。cmd.run 是将命令直接在 Salt Minion上执行,适合日常 的运维小操作。cmd.script 则是将指定的脚本拷贝到 Salt Minion 之后,再在 Salt Minion上执行,适合比较复杂的自动化运维操作。而 salt.script 指定的脚本,则需 要放在 salt:// 协议的目录下,或是http:// 、ftp:// 等协议的目录下。这两个命令,在 我们的自动化部署系统中都需要。依据实现软件推荐的不同方案,还有可能使用到 cp.get_file 或是 cp.get_dir,cp.get_url 命令,这三个远程推送文件和目录的命令,会 将我们需要的文件推送到指定的 Minion 上去。
接下来,我们就分别手工操作一下这几种方式,为以后的自动化软件部署命令打 下基础。
1.cmd.run
在 Salt Master( 192.168.1.111)上执行命令:
salt' 192.168.1.112'cmd.run 'ifconfig'
输出如下:
192.168.1.112:
enp0s3:flags=4163
ether 08:00:27:9e:bb:46 txqueuelen 1000 (Ethernet)
RX packets 4148 bytes 554053(541.0 KiB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 3848 bytes 302021(294.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:flags=73
inet 127.0.0.1 netmask 255.0.0.0
inet6::1 prefixlen 128 scopeid 0x10loop txqueuelen 1 (Local Loopback)
RX packets 6268 bytes 6632100(6.3 MiB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 6268 bytes 6632100(6.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
可以看出,ifconfig 命令是在指定的 Salt Minion( 192.168.1.112)上执行后,返
回给 Salt Master 显示的。大家也可以试一下:
salt ' 192.168.1.112'cmd.run 'ls'
salt' 192.168.1.112'cmd.run 'mkdir -p/tmp/test/dir'
看看是不是在 Minion 上执行了对应的命令。
2.cmd.script
先建立一个简单的 test_script.sh 脚本文件,内容如下:
可以看出,这几乎就是cmd.run 中执行的命令,下面看看如何通过脚本远程推
送执行。
SaltStack Master 上有一个默认的 salt:// 协议的文件服务器,路径指向为/srv/ salt 目录。现在,我们先建立一个/srv/salt/scripts/ 目录,将 test_script.sh 文件拷贝
到此目录下,然后运行如下命令:
salt 192.168.1.112'cmd.script salt://scripts/test_script.sh
输出如下:
192.168.1.112:
pid:
16952
retcode:
stderr:
stdout:
enpOs3:flags =4163
inet 192.168.1.112 netmask 255.255.255.0 broadcast 192.168.
inet6 fe80::9dd2:6328:839d:32c0 prefixlen 64 scopeid 0x20 <
ether 08:00:27:9e:bb:46 txqueuelen 1000 (Ethernet) RX packets 7056 bytes 894936(873.9 KiB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 5893 bytes 452099(441.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo:flags=73
inet 127.0.0.1 netmask 255.0.0.0
inet6::1 prefixlen 128 scopeid 0x10loop txqueuelen 1 (Local Loopback)
RX packets 8679 bytes 9035489(8.6 MiB)
RX errors 0 dropped O overruns 0 frame 0
TX packets 8679 bytes 9035489(8.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
bin
boot
dev
etc
tmp
usr
var
zookeeper_server.pid
可以看到,这三个命令, 一样在Minion 得到了执行,并得到了输出。这种方式的 执行,可以让我们更方便地执行自动化程序高的脚本。
3. 通过 HTTP 协议执行 cmd.script
执行脚本,不但可以像上一步通过salt:// 协议,也可以通过 http:// 协议执行, 这样做的好处是,可以将执行脚本与Salt 解耦,只依赖于Salt 的命令。
将上一步的 test_script.sh 文件拷贝到 Nginx 服务器(192.168.1.111上也部署了这个服务)的/usr/share/nginx/scripts/ 目录下,然后执行如下命令:
salt 192.168.1.112'cmd.script http:// 192.168.1.111/scripts/test_script.sh
可以看到,输出和上一步是一样的。这里就不再展示了。
4.cp.get_file 和 cp.get_dir
除了远程执行脚本命令,有时也有将 SaltStack Master 上的文件分发到 Minion 上的需求,这时 cp.get_file 和 cp.get_dir 就可以派上用场了。这两个命令,使用的都
是 salt:// 协议.
为了测试,先在/srv/salt/ 下建立 files 目录,然后在 files 目录建立一个 test_file 文件。
先运行如下命令:
salt' 192.168.1.112'cp.get_file salt://files/test_file /tmp/
输出如下:
192.168.1.112:
/tmp/test_file
然后,进入到 Salt
Minion( 192.168.1.112)的/tmp/ 目录下,可以看到 test_file
文件。
接下来,测试一下 cp.get_dir 功能。运行如下命令:
salt 192.168.1.112'cp.get_dir salt://files /tmp
输出如下:
192.168.1.112:
-/tmp/files/test_file
可以看到,这个files 目录及文件,已分发到目标 Minion 的/tmp/ 目录下去了。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~