Ansible
Ansible version : 2.6.2
常用模块(二)
命令模块
- command
- expect
- psexec
- raw
- script
- shell
- telnet
模块:command
概要
-
command
模块通过空格分隔的参数列表获取命令名。 - 给定的命令将在所有选定的节点上执行。 它不会通过shell处理,所以像
$HOME
这样的变量和<>|;&
等操作都不会工作(如果需要这些功能,请使用【shell】模块)。 - 对于Windows目标,请改用【win_command】模块。
参数
参数(*必选) | 默认值 | 注释 |
---|---|---|
argv | 允许用户以列表与字符串的形式提供命令。 只能提供字符串或列表表单,而不能同时提供。 必须提供一个或另一个。 | |
chdir | 运行命令前切换到指定目录。 | |
creates | 文件名或(自2.0开始)glob模式,当它已经存在时,将不会运行此步骤。 | |
* free_form | 【command】模块使用自由格式命令运行。实际上并没有叫做free form 选项。 |
|
removes | 文件名或(自2.0开始)glob模式,当它不存在时,将不会运行此步骤。 | |
stdin | 将命令的stdin直接设置指定值 | |
warn | yes | 如果在ansible.cfg中启用了command_warnings ,如果设置为no,不要警告这一行。 |
注意
-
如果你想通过shell运行一个命令(假设你正在使用
<,>,|
等),你实际上想要shell模块。如果未正确引用,则解析shell元字符可能导致执行意外命令。因此,尽可能使用更安全【command】模块。 -
creates
,removes
,chdir
可以在命令后指定。如果您只想在某个文件不存在的情况下运行命令,请使用此命令。 -
从版本2.4开始,
executable
参数将被删除。如果您需要此参数,请改用shell模块。 -
对于Windows目标,请改用【win_command】模块。
例子
playbook
register参数将远程命令执行的输出结果存储在变量中,后续可以在when中对该变量进行检索确定下一步任务。
- name: return motd to registered var
command: cat /etc/motd
register: mymotd
当文件名或(自2.0开始)glob模式已经存在时,此步骤将不会运行。
- name: Run the command if the specified file does not exist.
command: /usr/bin/make_database.sh arg1 arg2
args:
creates: /path/to/database
使用argv将命令作为列表发送。 务必将命令留空
- name: use argv to send the command as a list. Be sure to leave command empty
command:
args:
argv:
- echo
- testing
安全地使用模板变量来运行命令。 始终使用引用过滤器以避免注入问题。
- name: safely use templated variable to run command. Always use the quote filter to avoid injection issues.
command: cat {{ myfile|quote }}
register: myoutput
返回值
【command】模块特有返回值
关键字 | 返回/类型 | 描述 |
---|---|---|
cmd | 总是/list | 在远程计算机上运行的cmd |
delta | 总是/字符串 | cmd结束时间 - cmd开始时间 |
end | 总是/字符串 | cmd结束时间 |
start | 总是/字符串 | cmd开始时间 |
模块:shell
概要
【shell】模块通过空格分隔的参数列表获取命令名称。它几乎与【command】模块完全相同,但通过远程节点上的shell(/bin/sh
)运行命令。
参数
参数(*必选) | 默认值 | 注释 |
---|---|---|
argv | 允许用户以列表与字符串的形式提供命令。 只能提供字符串或列表表单,而不能同时提供。 必须提供一个或另一个。 | |
chdir | 运行命令前切换到指定目录。 | |
creates | 文件名或(自2.0开始)glob模式,当它已经存在时,将不会运行此步骤。 | |
* free_form | 【command】模块使用自由格式命令运行。实际上并没有叫做free form 选项。 |
|
removes | 文件名或(自2.0开始)glob模式,当它不存在时,将不会运行此步骤。 | |
stdin | 将命令的stdin直接设置指定值 | |
warn | yes | 如果在ansible.cfg中启用了command_warnings ,如果设置为no,不要警告这一行。 |
注意
- 如果要安全且可预测地执行命令,最好使用【command】模块。当编写playbooks的时候使用【command】,除非确切的需要使用【shell】,使用ad-hoc命令时,自行判断。
- 要过滤传递给shell模块的任何变量,应该使用
{{var | quote}}
,而不是{{var}}
,以确保它们不包含分号之类的有害内容。 - 对于windows主机,使用【win_shell】替代。
- 在playbook中创建多行脚本时,请用【script】替代。
返回值
【shell】模块特有返回值
关键字 | 返回/类型 | 描述 |
---|---|---|
cmd | 总是/列表 | 在远程计算机上运行的cmd |
delta | 总是/字符串 | cmd结束时间 - cmd开始时间 |
end | 总是/字符串 | cmd结束时间 |
msg | 总是/布尔值 | 改变 |
rc | 总是/整型 | 命令返回码(0表示成功) |
start | 总是/字符串 | cmd结束时间 |
stderr | 总是/字符串 | 标准错误输出 |
stdout | 总是/字符串 | 标准输出 |
stdout_lines | 总是/列表 | 标准输出分成几行 |
模块:script
概要
- 通过空格分隔的参数列表获取脚本名称。
- 路径中的本地脚本将传输到远程节点并执行。
- 使用的脚本将通过远程节点上的shell环境进行处理。
- 该模块在远程系统上不需要python,跟【raw】模块类似。
- windows也支持这个模块。
参数
参数(*必选) | 默认值 | 注释 |
---|---|---|
chdir | 运行命令前切换到指定目录。 | |
creates | 当文件名已经存在时,将不会运行此步骤。 | |
decrypt | yes | 此选项控制使用Vault的源文件自动解密。 |
executable | 用于调用脚本的可执行文件的名称或者路径 | |
* free_form | 本地脚本文件的路径,后跟可选参数。实际上并没有叫做free form 选项。 |
|
remove | 当文件名不存在时,将不会运行此步骤。 |
注意
- 编写Ansible模块通常比推送脚本更好
- 当脚本执行时,ssh连接插件将强制通过
-tt
进行伪tty分配。伪ttys没有stderr通道,所有stderr都被发送到stdout。如果像要分离stdout和stderr,切换到copy
+command
任务集合 - 如果本地脚本的路径包含空格,则需要引用它。
例子
playbook
默认例子
- script: /some/local/script.sh --some-arguments 1234
如果不存在,则创建
- script: /some/local/create_file.sh --some-arguments 1234
args:
creates: /the/created/file.txt
指定非系统$PATH可执行路径
- hosts: localhost
tasks:
- name: python exec
script: /tmp/1.py
args:
executable: /usr/local/python3/bin/python3
使用系统$PATH里面的路径
- hosts: localhost
tasks:
- name: python exec
script: /tmp/1.py
args:
executable: python3
网友评论