- name: exec get config expect: command: "get config" responses: "--- more --- ": " " ".*> ": "break" register: result1
时间: 2024-02-07 19:01:47 浏览: 27
这个任务的 `expect` 模块大体上是正确的,但是你的第一个响应字符串 `"--- more --- "` 后面多了一个空格,导致无法正确匹配。所以你需要把这个响应字符串改成 `"--- more ---"`。
这里是修改后的代码:
```
- name: exec get config
expect:
command: "get config"
responses:
"--- more ---": " "
".*> ": "break"
register: result1
```
在这个任务中,我们使用 `expect` 模块来执行命令 `get config`,并等待命令行输出中出现 `--- more ---` 或 `>` 符号。如果出现 `--- more ---`,则会自动发送空格以继续显示输出,直到出现 `>` 符号为止。当输出中出现 `>` 符号时,它会停止发送空格并将输出存储在变量 `result1` 中。
在这个例子中,我们使用了正则表达式 `.*> ` 来匹配任意字符后面跟着一个 `>` 符号。`responses` 参数是一个字典,其中包含与每个匹配模式对应的响应。在这个例子中,我们的响应是一个空格或者 `break`,用于终止 expect 模块。
这个任务可以用于获取网络设备的配置信息,并将其存储在变量中以供后续任务使用。
相关问题
tasks: - name: exec get config expect: command: "get config" responses: "--- more ---.": " " ".*>.": "break" register: result1
根据您提供的信息,这个 Ansible 任务似乎是使用 `expect` 模块来执行命令并等待特定的响应。如果您想在远程服务器上执行命令 `get config` 并获取输出结果,您可以尝试以下代码:
```
- name: execute get config command on remote host
hosts: myserver
tasks:
- name: get config
expect:
command: get config
responses:
"--- more ---.": " "
".*>.": "break"
register: result1
- debug:
var: result1.stdout
```
在这个例子中,我们使用 `expect` 模块来执行 `get config` 命令,并等待特定的响应。一旦收到 `--- more ---.` 或者 `.*>.` 响应,`expect` 模块就会停止等待并将输出结果保存在 `result1` 变量中。最后,我们使用 `debug` 模块来打印输出结果。
请注意,`expect` 模块需要在目标主机上安装 `expect` 工具。如果您的目标主机没有安装该工具,则需要先安装。另外,如果您的目标主机需要进行身份验证,则需要使用 `ansible_user` 和 `ansible_password` 变量来指定用户名和密码。
tasks: - name: exec get config expect: command: "get config" responses: "--- more --- ": " " ".*> ": "break" register: result1
根据你提供的代码,我看到可能存在缩进问题。根据 YAML 的语法规则,缩进是非常重要的,因为它表示层次结构。
请检查你的代码缩进是否正确。每个任务应该以 `-` 开头,并且在 `tasks` 下应该有两个空格的缩进。`expect` 模块应该有四个空格的缩进,而 `command` 和 `responses` 应该有两个额外的空格缩进,如下所示:
```
tasks:
- name: exec get config
expect:
command: "get config"
responses:
"--- more --- ": " "
".*> ": "break"
register: result1
```
请注意,每个任务都必须以 `-` 开头,并且在 `tasks` 下必须有两个空格的缩进。此外,每个模块都必须正确缩进,并在 `key: value` 中使用冒号和空格进行分隔。
如果你的问题不是缩进问题,请提供更多的代码和错误消息以便我更好地帮助你。