Linux Ansible自动化运维 command模块 shell模块 script模块

一、command模块

模块介绍

command模块可以帮助我们在远程主机上执行命令

注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如”<“, “>”, “|”, “;” 和 “&” 这些符号,如果你需要这些功能,可以参考后面介绍的shell模块,还有一点需要注意,如果远程节点是windows操作系统,则需要使用win_command模块。

模块参数

此处我们介绍一些command模块的常用参数,你可以先对这些参数有一个大概了解,然后再看小示例。

参数含义
free_form参数必须参数,指定需要远程执行的命令,需要说明一点,free_form参数与其他参数并不相同,在之前的模块示例中,如果想要使用一个参数,那么则需要为这个参数赋值,举个例子,之前的示例模块中,大多都有path参数,当我们需要指定要操作的文件时,通常需要对path参数赋值,比如,path=/testdir/test,表示我们想要操作/testdir/test文件,但是free_form参数则不同,”free_form”并不是一个”实际存在”的参数名,比如,当我们想要在远程主机上执行ls命令时,我们并不需要写成”free_form=ls” ,这样写反而是错误的,因为并没有任何参数的名字是free_form,当我们想要在远程主机中执行ls命令时,直接写成ls即可,这就是free_form参数的含义,因为command模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为free_form,如果你还是不明白,看下面的小示例就行了。
chdir参数此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
creates参数看到creates,你可能会从字面上理解这个参数,但是使用这个参数并不会帮助我们创建文件,它的作用是当指定的文件存在时,就不执行对应命令,比如,如果/testdir/test文件存在,就不执行我们指定的命令。
removes参数与creates参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,比如,如果/testdir/tests文件不存在,就不执行我们指定的命令,此参数并不会帮助我们删除文件

模型示例

对应上述参数的ad-hoc示例命令如下:

使用如下命令,表示在testB(server3)主机上执行ls命令,因为我使用的是root用户,所以默认情况下,ls出的结果是testB(server3)主机中root用户家目录中的文件列表。

[root@server4 testdir]# ansible testB -m command -a "ls"

 
 
  • 1

在这里插入图片描述testB(server3)中root家目录:

在这里插入图片描述
chdir参数表示执行命令之前,会先进入到指定的目录中,所以如下命令表示查看testB(server3)主机上/testdir目录中的文件列表

[root@server4 testdir]# ansible testB -m command -a "chdir=/testdir ls"

 
 
  • 1

在这里插入图片描述

如下命令表示/testdir/test文件如果存在于远程主机中,则不执行对应命令,如果不存在,才执行"echo redhat-test"命令

[root@server4 testdir]# ansible testB -m command -a "creates=/testdir/test echo redhat-test"

 
 
  • 1

由于server3有/testdir/test文件,所以不执行:

在这里插入图片描述
如下命令表示/testdir/test文件如果不存在于远程主机中,则不执行对应命令,如果存在,才执行”echo test”命令

[root@server4 testdir]# ansible testB -m command -a "removes=/testdir/test echo redhat-test"

 
 
  • 1

由于server3有/testdir/test文件,所以执行:
在这里插入图片描述

二、shell模块

模块介绍

shell模块可以帮助我们在远程主机上执行命令,与command模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理。

学习此模块之前,请先参考本文中的command模块。

模块参数

此处我们介绍一些shell模块的常用参数。

参数含义
free_form参数必须参数,指定需要远程执行的命令,但是并没有具体的一个参数名叫free_form,具体解释参考command模块。
chdir参数此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
creates参数使用此参数指定一个文件,当指定的文件存在时,就不执行对应命令,可参考command模块中的解释。
removes参数使用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令,可参考command模块中的解释。
executable参数默认情况下,shell模块会调用远程主机中的/bin/sh去执行对应的命令,通常情况下,远程主机中的默认shell都是bash,如果你想要使用其他类型的shell执行命令,则可以使用此参数指定某种类型的shell去执行对应的命令,指定shell文件时,需要使用绝对路径。

模块举例

shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的,此处不再举例。

使用shell模块可以在远程服务器上执行命令,它支持管道与重定向等符号。

[root@server4 ~]# ansible testB -m shell -a "chdir=/testdir echo test > test"

 
 
  • 1

上述命令表示在testB(server3)上的/testdir目录中执行echo test > test
在这里插入图片描述
在这里插入图片描述

如果你想要执行的命令需要csh解析,那么可以指定使用csh在远程主机上执行对应的命令,比如在如下示例中,我们使用csh的语法定义了一个数字类型的变量TestNum,然后将TestNum变量的值重定向到了/testdir/TestNumFile,在bash中,@符号不能用于定义变量,所以,可以使用executable指定需要的shell类型。

ansible testB -m shell -a 'executable=/bin/csh @ TestNum=666 ; echo $TestNum > /testdir/TestNumFile'

 
 
  • 1

三、script模块

模块介绍

script模块可以帮助我们在远程主机上执行ansible主机上的脚本,也就是说,脚本一直存在于ansible主机本地,不需要手动拷贝到远程主机后再执行。

学习此模块之前,请先参考本文中的command模块。

模块参数

此处我们介绍一些script模块的常用参数,你可以先对这些参数有一个大概了解,然后再看小示例。

参数含义
free_form参数必须参数,指定需要执行的脚本,脚本位于ansible主机本地,并没有具体的一个参数名叫free_form,具体解释参考command模块。
chdir参数此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到chdir参数指定的目录中。
creates参数使用此参数指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考command模块中的解释。
removes参数使用此参数指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考command模块中的解释。

模型示例

上述参数对应的ad-hoc示例命令如下:

如下命令表示ansible主机中的/testdir/redhat-test.sh脚本将在testB主机中执行,执行此脚本之前,会先进入到testB主机中的/opt目录

脚本内容

[root@server4 ~]# cd /testdir/
[root@server4 testdir]# cat redhat-test.sh 
#!/bin/bash
echo "hello  ansible"

 
 
  • 1
  • 2
  • 3
  • 4

执行命令:

[root@server4 testdir]# ansible testB -m script -a "chdir=/opt /testdir/redhat-test.sh"

 
 
  • 1

在这里插入图片描述
如下命令表示,如果testB主机中的/mnt/cl文件已经存在,ansible主机中的/testdir/redhat-test.sh脚本将不会在testB主机中执行,反之则执行。

[root@server4 testdir]# ansible testB -m script -a "creates=/mnt/cl /testdir/redhat-test.sh"

 
 
  • 1

由于server3中/mnt/cl文件不存在,所以执行命令
在这里插入图片描述

如下命令表示,如果testB主机中的/mnt/cl文件不存在,ansible主机中的/testdir/redhat-test.sh脚本将不会在testB主机中执行,反之则执行。

[root@server4 testdir]# ansible testB -m script -a "removes=/mnt/cl /testdir/redhat-test.sh"

 
 
  • 1

由于server3中/mnt/cl文件不存在,所以不执行命令

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值