Ansible Expect 模块无法匹配字符串/正则表达式脚本问题 [英] Ansible Expect module can't match string/regex script questions
问题描述
我正在尝试通过 Ansible 在 Vagrant 机器上自动安装脚本.
我尝试了很多在网络上找到解决方案,但文档和示例非常薄弱.
I'm trying to automate a script installation through Ansible in a Vagrant machine.
I tried a lot to find a solution across the web but the documentation and the examples are very weak.
我尝试安装的脚本会提示我尝试使用 Ansible Expect 模块 以编程方式回答的问题.
That script I'm trying to install is prompting questions that I'm trying to answer programmatically with the Ansible Expect Module.
Ansible 任务:
- 名称:运行 Lisk 安装"
变成:真
become_user: vagrant
期望:
命令:bash installLisk.sh install -r {{env}}
回复:
'您要将应用链安装到哪里?(默认/home/vagrant)': "/home/vagrant"
'要安装NTP吗?(y/n):': "y"
回声:是
Ansible Task:
- name: "Running Lisk installation"
become: True
become_user: vagrant
expect:
command: bash installLisk.sh install -r {{env}}
responses:
'Where do you want to install Lisk to? (Default /home/vagrant)': "/home/vagrant"
'Would like to install NTP? (y/n):': "y"
echo: yes
它似乎无法识别问题或答案,这是我从配置中返回的错误
任务 [lisk : 运行 Lisk 安装] ********************************************
致命:[默认]:失败!=> {
改变":真,
"cmd": "bash installLisk.sh install -r test",
"delta": "0:00:30.137468",
"end": "2016-08-26 08:18:46.740017",
失败":真,
"rc": null,
开始":2016-08-26 08:18:16.602549",
It seems it can't recognize the question or the answer, this is the error I'm getting back from the provisioning
TASK [lisk : Running Lisk installation] ****************************************
fatal: [default]: FAILED! => {
"changed": true,
"cmd": "bash installLisk.sh install -r test",
"delta": "0:00:30.137468",
"end": "2016-08-26 08:18:46.740017",
"failed": true,
"rc": null,
"start": "2016-08-26 08:18:16.602549",
"stdout": "检查先决条件:\r\n
Curl 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Tar 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
wget 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Sudo 已安装并通过身份验证.\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n\
u001b[32m所有先决条件通过!\u001b(B\u001b[m\r\n
你想把 Lisk 安装到哪里?(默认/home/vagrant): ",
"stdout": "Checking prerequisites:\r\n
Curl is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Tar is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Wget is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n
Sudo is installed and authenticated.\t\t\t\u001b[32mPassed\u001b(B\u001b[m\r\n\
u001b[32mAll preqrequisites passed!\u001b(B\u001b[m\r\n
Where do you want to install Lisk to? (Default /home/vagrant): ",
"stdout_lines": [
"检查先决条件:",
"Curl 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Tar 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Wget 已安装.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Sudo 已安装并通过身份验证.\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"\u001b[32m所有先决条件通过!\u001b(B\u001b[m",
你想把 Lisk 安装到哪里?(默认/home/vagrant):
]}
谢谢提前
"stdout_lines": [
"Checking prerequisites:",
"Curl is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Tar is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Wget is installed.\t\t\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"Sudo is installed and authenticated.\t\t\t\u001b[32mPassed\u001b(B\u001b[m",
"\u001b[32mAll preqrequisites passed!\u001b(B\u001b[m",
"Where do you want to install Lisk to? (Default /home/vagrant): "
]}
Thank you all guys in advance
推荐答案
expect
模块中的响应是正则表达式,所以问号有特殊含义.
您可以简单地使用:
Responses in expect
module are regular expressions, so question marks have special meanings.
You can simply use:
- expect:
command: bash installLisk.sh install -r {{env}}
responses:
'install Lisk to': '/home/vagrant'
'install NTP': 'y'
echo: yes
这篇关于Ansible Expect 模块无法匹配字符串/正则表达式脚本问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!