ansible.builtin.expect 模块 – 执行命令并响应提示
注意
此模块是 ansible-core
的一部分,包含在所有 Ansible 安装中。在大多数情况下,即使不指定 collections 关键字,你也可以使用简短的模块名称 expect
。但是,我们建议你使用 完全限定的集合名称 (FQCN) ansible.builtin.expect
,以便轻松链接到模块文档并避免与可能具有相同模块名称的其他集合发生冲突。
概要
ansible.builtin.expect 模块执行命令并响应提示。
给定的命令将在所有选定的节点上执行。它不会通过 shell 处理,因此像
$HOME
这样的变量以及像"<"
、">"
、"|"
和"&"
这样的操作将不起作用。
需求
以下需求是在执行此模块的主机上需要的。
python >= 2.6
pexpect >= 3.3
参数
参数 |
注释 |
---|---|
在运行命令之前更改到此目录。 |
|
command 模块接受要运行的命令。 |
|
文件名,当它已经存在时,此步骤将不会运行。 |
|
是否回显你的响应字符串。 选择
|
|
文件名,当它不存在时,此步骤将不会运行。 |
|
提示正则表达式和相应答案的映射。
每个键的值是字符串或字符串列表。如果该值为字符串,并且多次遇到提示,则将重复该答案。将该值提供为列表,以便在连续匹配时给出不同的答案。 |
|
等待预期字符串的时间(以秒为单位)。使用 默认: |
属性
属性 |
支持 |
描述 |
---|---|---|
支持:无 |
可以在 check_mode 中运行并返回更改状态预测,而无需修改目标,如果不支持,则将跳过操作。 |
|
支持:无 |
将在 diff 模式下返回有关更改内容(或可能在 check_mode 中需要更改的内容)的详细信息 |
|
平台: posix |
可以针对其进行操作的目标操作系统/系列 |
注意
注意
如果你想通过 shell 运行命令(比如你正在使用
<
、>
、|
等等),你必须在命令中指定一个 shell,比如/bin/bash -c "/path/to/something | grep else"
。不区分大小写的搜索以
(?i
为前缀表示。此模块使用的
pexpect
库使用 2000 字节的搜索窗口,并且不使用多行正则表达式匹配。要执行行首绑定匹配,请使用类似(?m
^pattern) 的模式。ansible.builtin.expect 模块专为简单场景而设计。对于更复杂的需求,请考虑使用 ansible.builtin.shell 或 ansible.builtin.script 模块的 expect 代码。(示例是 ansible.builtin.shell 模块文档的一部分)。
如果命令返回非 UTF-8 数据,则必须对其进行编码以避免出现问题。一种选择是将输出通过
base64
管道。
另请参阅
另请参阅
- ansible.builtin.script
在远程节点上运行本地脚本,在传输脚本之后。
- ansible.builtin.shell
在目标上执行 shell 命令。
示例
- name: Case insensitive password string match
ansible.builtin.expect:
command: passwd username
responses:
(?i)password: "MySekretPa$$word"
# you don't want to show passwords in your logs
no_log: true
- name: Match multiple regular expressions and demonstrate individual and repeated responses
ansible.builtin.expect:
command: /path/to/custom/command
responses:
Question:
# give a unique response for each of the 3 hypothetical prompts matched
- response1
- response2
- response3
# give the same response for every matching prompt
"^Match another prompt$": "response"
- name: Multiple questions with responses
ansible.builtin.expect:
command: /path/to/custom/command
responses:
"Please provide your name":
- "Anna"
"Database user":
- "{{ db_username }}"
"Database password":
- "{{ db_password }}"