青蛙学Linux—Ansible的ad-hoc模式和常用模块(一)

)在上一篇文章中介绍过,Ansible通过调用特定的模块来执行特定的任务,所以模块对于Ansible来说是非常重要的。这里我们通过Ansible的ad-hoc模式来介绍Ansible的常用模块。

1、ad-hoc模式

Ansible主要通过ad-hoc和playbook两种模式来执行任务。ad-hoc通过Ansible提供的ansible命令一次执行一个任务。

ad-hoc的常用选项如下:

  • -m:指定执行任务要调用的模块,如果不指定默认使用command模块
  • -a:指定调用模块的对应参数,模块对应的参数及用法可以使用ansible-doc –s 模块名来查看
  • -u:使用被管理主机的指定用户执行任务
  • -k:提示输入SSH登录密码而不是基于密钥的验证
  • -b:提升权限
  • --become-method:指定提升权限的方法,常用的有sudo和su,默认为sudo
  • --become-user:指定执行sudo或su命令时切换的用户,默认为root用户
  • -K:提示输入提升权限时需要的密码
  • -B:后台运行的超时时间
  • -C:测试一下会改变什么内容,不会真正执行
  • -f:设置线程数
  • -i:指定主机清单文件的路径,默认为/etc/absible/hosts

ad-hoc的语法如下:

ansible 主机或主机组 -m 模块 -a '模块参数' 其他ad-hoc选项

注意:主机或主机组是在主机清单中定义的部分,比如在/etc/absible/hosts中定义的主机和主机组。

2、一个例子:使用ad-hoc在远程主机上执行date命令

实验环境

在Ansible系列文章中,都使用如下的实验环境及配置。

实验环境中有以下四台运行CentOS的主机,分别为:

  • 主机A:IP地址192.168.0.110,操作系统为CentOS 7.6.1810
  • 主机B:IP地址192.168.0.88,操作系统为CentOS 7.6.1810
  • 主机C:IP地址192.168.0.106,操作系统为CentOS 6.10
  • 主机D:IP地址192.168.0.61,操作系统为CentOS 6.10

其中主机A通过YUM安装ansible做为主控端,主机B分组为centos7,主机C和主机D分组为centos6。主机清单的配置如下:

[centos7]
192.168.0.88

[centos6]
192.168.0.106
192.168.0.61
通过ad-hoc模式在centos6分组的两台主机上执行date命令

输入以下命令:

[root@localhost ~]# ansible centos6 -m command -a 'date' -k

执行后将提示输入centos6组中两台主机的密码(注意:两台主机的密码必须相同),然后观察返回的结果:

1

提示我们需要进行SSH的首次登录验证,此时只要在/etc/ansible/ansible.cfg中取消host_key_checking字段的注释即可。

取消注释后我们在运行上面的命令,观察返回的结果:

2

命令在centos6主机组的两台主机上执行成功。

3、command模块

上面的例子中,我们通过command模块在centos6组的两台主机上执行了date命令。command这个模块的功能就是用于在被管理的主机上执行命令。该模块依赖Python环境,且当命令中包含类似‘$HOME’和特殊符号“<”、“>”、“|”、“;”、“&”、“*”时无法执行。

比如我们在centos7组的主机中通过command模块执行ps –ef|grep ssh命令,查看结果:

3

执行报错,因为命令中存在特殊字符“|”。

command模块有以下选项(选项使用方法:选项=参数):

  • argv:允许以一个列表的形式而不是字符串形式提供命令。但是列表和字符串不能混用,一次只能使用一个
  • chdir:在执行命令前先切换到指定的目录
  • creates:当指定的文件存在时,命令不执行,反之则命令执行
  • removes:当指定的文件存在时,命令执行,反之则命令不执行
  • stdin:command模块默认从标准输入中接收命令,使用该选项可以从指定的位置接收命令
一个例子:在centos7组的主机中执行pwd命令,在执行该命令前先将目录切换到/etc

输入以下命令:

[root@localhost ~]# ansible centos7 -m command -a 'chdir=/etc pwd' -k

返回的结果:

4

4、shell模块

该模块也是用于在被管理主机上执行命令。但该模块在执行命令时使用的是/bin/sh,所以使用该模块可以执行任何命令。该模块也依赖Python环境。

我们在centos7组的主机上执行刚才使用command模块无法执行的命令ps –ef|grep ssh,查看执行结果:

5

命令成功执行。

shell模块新增了以下选项,无argv选项,其他选项同command模块:

  • executable:更改执行命令时使用的shell,参数为可执行文件的绝对路径

5、raw模块

raw模块的功能与command和shell完全相同,但是它不依赖于Python环境。所以raw模块很适合在没有安装Python环境的远程主机或者是无法安装Python环境的交换机路由器上执行命令。

raw模块仅有executable,功能同shell的executable选项。

6、script模块

script模块的功能时将主控端指定的shell脚本拷贝到被管理主机上执行。该模块的执行也不依赖Python环境。

script模块的选项同shell,仅多出以下选项:

  • decrypt:自动解码源文件

7、ping模块

ping模块用于测试远程主机是否存活。

注意:该模块使用SSH连接测试主机是否存活,而不是仅通过网络是否连通进行判断。

实验环境中,主控端没有和centos7组中的主机设置SSH公钥私钥登录,必须使用密码才能SSH登录。此时执行以下命令:

[root@localhost ~]# ansible centos7 -m ping

返回结果:

1

此时为上面的命令加上-k选项以在执行时输入密码:

2

8、file模块

file模块用于在被管理主机上进行文件操作。

模块常用选项:

  • path:必须使用,用于指定文件的路径
  • state:用于指定文件的类型。可能的值有, directory - 代表目录,如果目录不存在则创建;file - 代表文件,如果该文件不存在则不会被创建,该选项为默认值;link - 创建符号链接;hard - 创建硬链接;touch - 如果文件不存在,则创建一个空白文件。如果文件或目录已存在,则更新它的最后修改时间;absent - 删除目录、文件或取消链接文件的指向
  • owner:定义文件的属主
  • group:定义文件的属组
  • mode:定义文件的权限
  • recurse:文件的权限是否递归,仅对目录有效,值为yes|no
  • src:建立链接时指定源文件,当state=link或state=hard时使用
  • dest:链接文件路径,当state=link或state=hard时使用
  • force:在两种情况下使用以强制创建符号链接,一种是源文件不存在但之后会建立;另一种是目标符号链接已存在但需要更新。该选项的值为yes|no
一个例子:在centos7组的主机上的/root目录下建立一个名为test的文件,文件的属主和属组为root,权限为764

在主控端输入如下命令:

[root@localhost ~]# ansible centos7 -m file -a 'path=/root/test owner=root group=root mode=764 state=touch' -k

命令执行返回结果:

3

转载于:https://www.cnblogs.com/yu2006070-01/p/10163702.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值