ad

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_3.5.2 远程执行脚本命令

网友投稿 138 2023-11-07

【摘要】 本书摘自《Python+3自动化软件发布系统》一书中第3章,第5节,由陈刚、王洪军编著。

3.5.2 通过Salt Master远程执行脚本命令

《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_3.5.2 远程执行脚本命令

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 mtu 1500

inet 192.168.1.112 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::9dd2:6328:839d:32c0 prefixlen 64 scopeid 0x20

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 mtu 65536

inet 127.0.0.1 netmask 255.0.0.0

inet6::1 prefixlen 128 scopeid 0x10

loop 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 mtu 1500

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 mtu 65536

inet 127.0.0.1 netmask 255.0.0.0

inet6::1 prefixlen 128 scopeid 0x10

loop 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小时内删除侵权内容。

上一篇:《Python+3自动化软件发布系统》Django 2实战_了解Python的更好方法_2.7.3 Django Template 的 Render
下一篇:《Excel VBA+SQL数据管理与应用模板开发》_工作效率UP!_8.0 VBA基本知识复习
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×