我有一本关于lineinfile
的剧本。我需要捕捉失败。当我使用register
时,lineinfile
中失败的没有被捕获,成功的也没有足够的信息,比如通用寄存器值。(例如,没有rc代码、stdout或任何东西(
我需要捕获lineinfile
任务失败的主机。
请告诉我是否有任何方法可以达到要求。
lineinfile:
path: /test
regexp: "^host"
line: "host myhost 127.0.0.1"
state: present
register: result
我正在尝试捕获这个显示在verbose中的消息,但无法用寄存器捕获它,这样我就可以使用when条件,并说当rc==257时,它将被标记为失败。
fatal: [examplehost]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"attributes": null,
"backrefs": false,
"backup": true,
"content": null,
"create": false,
"delimiter": null,
"directory_mode": null,
"firstmatch": false,
"follow": false,
"force": null,
"group": null,
"insertafter": null,
"insertbefore": null,
"line": "HOST example.something 127.0.0.1",
"mode": null,
"owner": null,
"path": "/test/my",
"regexp": "^HOST",
"remote_src": null,
"selevel": null,
"serole": null,
"setype": null,
"seuser": null,
"src": null,
"state": "present",
"unsafe_writes": null,
"validate": null
}
},
"msg": "Destination /test/my does not exist !",
"rc": 257
我不理解你的抱怨;lineinfile:
将确保该行出现在目标文件中,并且只使用regexp:
位来帮助它放置该行。如果文件没有以host
开头的行,那么lineinfile:
将只将line:
附加到文件的底部,并愉快地报告它在result.msg
中这样做了:
changed: [host0] => {"backup": "", "changed": true, "msg": "line added"}
changed: [host1] => {"backup": "", "changed": true, "msg": "line replaced"}