Ansible常用模块及使用示例

Ansible常用模块

        每个Ansible模块都是一个独立的小程序或脚本,设计用来完成特定的任务。它们通常以Python编写,但也可以用其他语言。模块被设计为幂等的(idempotent),这意味着无论执行多少次,结果都是一样的,并且不会对系统造成不必要的改变。Ansible拥有大量的内置模块,同时用户也可以创建自定义模块来满足特定需求。

1.command模块

功能:在远程主机执行命令,此为默认模块,可忽略-m选项

参数说明:

  • chdir:     # 在执行命令之前,先切换到该目录
  • executable:   # 切换shell来执行命令,需要使用命令的绝对路径
  • free_form:   # 要执行的Linux指令,一般使用Ansible的-a参数代替。
  • creates:     # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
  • removes:      # 一个文件名,这个文件不存在,则该命令不执行

注意:此命令不支持 $VARNAME<>|;&等,可能用shell模块实现

           此模块不具有幂等性

[root@ansible ~]# ansible websrvs -m command -a 'chdir=/etc cat centos-release'
192.168.20.11 | CHANGED | rc=0 >>
CentOS Linux release 7.5.1804 (Core)
192.168.20.12 | CHANGED | rc=0 >>
CentOS Linux release 7.5.1804 (Core)

[root@ansible ~]# ansible websrvs -m command -a 'service vsftpd start'
[WARNING]: Consider using the service module rather than running 'service'.  If
you need to use command because service is insufficient you can add 'warn:
false' to this command task or set 'command_warnings=False' in ansible.cfg to
get rid of this message.
192.168.20.11 | CHANGED | rc=0 >>
Redirecting to /bin/systemctl start vsftpd.service
192.168.20.12 | CHANGED | rc=0 >>
Redirecting to /bin/systemctl start vsftpd.service

2.shell模块

功能:和command相似,用shell执行命令,支持各种符号,比如:*,$,>

注意:此模块不具有幂等性

[root@ansible ~]# ansible websrvs -m shell -a 'echo hello > /data/hello.log'
192.168.20.11 | CHANGED | rc=0 >>

192.168.20.12 | CHANGED | rc=0 >>

[root@ansible ~]# ansible websrvs -m shell -a 'cat  /data/hello.log'
192.168.20.11 | CHANGED | rc=0 >>
hello
192.168.20.12 | CHANGED | rc=0 >>
hello

 注意:调用bash执行命令类似 cat /tmp/test.md|awk -F'''{print$1,$2}'&>/tmp/example.txt 这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本时,copy到远程,执行,再把需要的结果拉回执行命令的机器。

3.script模块

功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)

注意:此模块不具有幂等性

[root@ansible ~]# ansible websrvs -m script -a /data/test.sh
192.168.20.11 | CHANGED => {
    "changed": true,
    "rc": 0,
    "stderr": "Shared connection to 192.168.20.11 closed.\r\n",
    "stderr_lines": [
        "Shared connection to 192.168.20.11 closed."
    ],
    "stdout": "hello world\r\n",
    "stdout_lines": [
        "hello world"
    ]
}
192.168.20.12 | CHANGED => {
    "changed": true,
    "rc": 0,
    "stderr": "Shared connection to 192.168.20.12 closed.\r\n",
    "stderr_lines": [
        "Shared connection to 192.168.20.12 closed."
    ],
    "stdout": "hello world\r\n",
    "stdout_lines": [
        "hello world"
    ]
}

4.copy模块

功能:从ansible服务器主控端复制文件到远程主机

参数说明:

  • src:     源文件绝对路径或相对路径
  • dest:     必选项,将源文件复制到的远程主机的绝对路径
  • content:   用于替换"src",可以直接指定文件的值
  • backup:    当文件内容发生改变后,在覆盖之前把源文件备份,备份文件包含时间信息
  • directory_mode: 递归设定目录的权限,默认为系统默认权限
  • force:      当目标主机包含该文件,但内容不同时,设为"yes",表示强制覆盖;为"no",表示目标主机的目标位置不存在该文件才复制。默认为"yes"
  • others:    所有的 file 模块中的选项可以在这里使用
  • mode:         设置文件权限
  • owner:        属主
  • group:        属组

注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件

#如目标存在,默认覆盖,此处指定先备份
[root@ansible ~]# ansible websrvs -m copy -a "src=/data/test.sh dest=/root/test                                                                                  2.sh  owner=root mode=600 backup=yes"
192.168.20.11 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值