我正在尝试使用带有 expect 模块的 Ansible 将 Linux 服务器加入到带有 sssd 的活动目录。
任务中的代码:
- name: join domain
expect:
command: /bin/bash -c "/usr/sbin/realm join --user=join-user domain.loc"
response:
password: "secret"
我从这个链接获得了代码,因为我在询问之前先在 Google 上搜索了一下: https://groups.google.com/forum/#!msg/ansible-project/L0Es3aGAKV8/DmPRaiGcBwAJ
实际问题是 Ansible 似乎并没有真正响应提示。因为当我运行剧本时它只是超时。我确实通过 ssh 直接测试了它并且它有效。凭据没有问题,并且与域控制器的连接正常。
超时时剧本的输出:
fatal: [192.168.11.1]: FAILED! => {
"changed": true,
"cmd": "/bin/bash -c \"/usr/sbin/realm join --user=join-user domain.loc\"",
"delta": "0:00:30.112149",
"end": "2017-03-22 08:37:18.320832",
"failed": true,
"invocation": {
"module_args": {
"chdir": null,
"command": "/bin/bash -c \"/usr/sbin/realm join --user=join-user domain.loc\"",
"creates": null,
"echo": false,
"removes": null,
"responses": {
"password": "secret"
},
"timeout": 30
},
"module_name": "expect"
},
"msg": "command exceeded timeout",
"rc": null,
"start": "2017-03-22 08:36:48.208683",
"stdout": "Password for join-user: ",
"stdout_lines": [
"Password for join-user: "
]
}
任何帮助是极大的赞赏。
答案1
响应必须与标准输出字符串匹配,或者您可以使用正则表达式,在您的情况下您可以使用:
response:
Password for join-user: "secret"
或者
response:
Password for .*: "secret"
从文档
响应下的问题或关键字是 Python 正则表达式匹配。不区分大小写的搜索以 ?i 前缀表示