ansible - 来自 virsh 控制台的 Ansible 退出期望
问题描述
代码:
- expect:
command: virsh console myguest
responses:
'Escape character is': ''
'root>': 'show interfaces em0 | grep Current'
timeout: 5
register: result
这个任务将永远挂起。我相信是因为在执行完 show interface 命令后,系统仍然返回到 'root>' 提示下一个命令,并且由于我提供了 'root>' 响应,提示响应陷入了死循环。
我知道理想情况下我可以提供 2 个响应作为“root>”的列表,一个是 show 命令,另一个是 Ctrl-]。但是没有Ctrl-]的文字表达,我真的不能提供。
所以我设置了超时,希望它最多只能循环 5 秒。但事实并非如此。我将单个响应设置为列表项,但下一个响应的任务错误。
那么我可以做些什么来在 virsh 控制台中运行 show 命令,然后退出它,以便我的剧本可以继续?
解决方案
您可以使用\u001d
来表示^]
(CTRL-]) 并允许期望调用成功完成,或者超时并失败。
此外,您可以添加ignore_errors: true
以允许您处理错误,而不是让 Ansible 立即失败。例如:
- expect:
command: "virsh console {{ guest }}"
responses:
'Escape character is': ''
'root>':
- 'show interfaces em0 | grep Current'
- "\u001d"
register: expect_response
ignore_errors: true
- debug:
msg: "Expect failed with rc={{ expect_response.rc }}"
when: expect_response.failed
推荐阅读
- javascript - 使用邮递员进行 API 测试
- git - 服务器 git 钩子没有看到新推送的代码,而是看到之前的提交
- html - VBA转html,带有动态元素属性的onclick事件函数
- angular - 将 Angular 应用程序部署在与根文件夹不同的文件夹中
- python - 创建一个可调用函数来为 django 模型中的属性生成一个值
- html - 覆盖内联css?
- c# - 并发异常 ASP MVC C#
- sql - 无法使用 WHERE 过滤(无法访问 ARRAY 类型的值的字段小时
#standardSQL SELECT DISTINCT geoNetwork.country FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX
- javascript - 如何正确添加 Google ReCaptcha
- java - Java比较对象的效率