Ansible expect 不会在第一次传递时传递 ansible 变量。如果我进行更改并重新运行脚本并添加额外的响应问题,那么脚本似乎可以工作,但如果我只是想在第一次运行场景中设置它,它就不会按预期工作。
首次运行场景,它在密钥库中创建设置但从未完成,设置 elasticsearch.username 是在密钥库中创建的,但我无法验证名称是否实际添加,但任务失败并出现以下错误,我尝试了几种不同的方法来解决这个问题,但似乎没有任何效果。
在开始此过程之前,我还确保密钥库是空的,并且密钥库中没有值
- name: Create kibana elasticsearch user
expect:
command: sudo -E /usr/share/kibana/bin/kibana-keystore add elasticsearch.username
responses:
'username': "{{ elasticsearch_username }}
错误
fatal: [10.14.12.113]: FAILED! => {"changed": true, "cmd": "sudo -E /usr/share/kibana/bin/kibana-keystore add elasticsearch.username", "delta": "0:00:30.610819", "end": "2019-03-19 20:32:45.320395", "msg": "command exceeded timeout", "rc": null, "start": "2019-03-19 20:32:14.709576", "stdout": "\u001b[1G\u001b[0JEnter value for elasticsearch.username: \u001b[41Gkibana\r\r\n\u001b[41G", "stdout_lines": ["\u001b[1G\u001b[0JEnter value for elasticsearch.username: \u001b[41Gkibana", "", "\u001b[41G"]}
如果我第二次运行它,添加响应问题以在添加密钥库后覆盖该值,那么这似乎没有任何问题,因此似乎没有意义为什么它在第一轮失败而只是第一次添加值。
手动 CLI 运行没有任何问题。
- name: Create kibana elasticsearch user
expect:
command: sudo -E /usr/share/kibana/bin/kibana-keystore add elasticsearch.username
responses:
'Overwrite\? \[y/N\]': "y"
'username': "{{ elasticsearch_username }}"
没有错误
TASK [Create kibana elasticsearch user] *********************************
已更改:[xxx.xxx.xxx.xxx]
经过更多测试,我看到用户名已被填充,但似乎可能不会发送返回以继续。
ansible-vvvv
fatal: [10.14.12.113]: FAILED! => {
"changed": true,
"cmd": "/usr/share/kibana/bin/kibana-keystore add elasticsearch.username",
"delta": "0:00:30.613915",
"end": "2019-03-21 19:26:01.959953",
"invocation": {
"module_args": {
"chdir": null,
"command": "/usr/share/kibana/bin/kibana-keystore add elasticsearch.username",
"creates": null,
"echo": false,
"removes": null,
"responses": {
"Enter value for elasticsearch.username": "kibana"
},
"timeout": 30
}
},
"msg": "command exceeded timeout",
"rc": null,
"start": "2019-03-21 19:25:31.346038",
"stdout": "\u001b[1G\u001b[0JEnter value for elasticsearch.username: \u001b[41Gkibana\r\r\n\u001b[41G",
"stdout_lines": [
"\u001b[1G\u001b[0JEnter value for elasticsearch.username: \u001b[41Gkibana",
"",
"\u001b[41G"
]
}
提前感谢你的帮助