【问题标题】:Ansible Expect module can't match string/regex script questionsAnsible Expect 模块无法匹配字符串/正则表达式脚本问题
【发布时间】:2016-08-26 08:39:01
【问题描述】:


我正在尝试通过 Ansible 在 Vagrant 机器中自动安装脚本。

我尝试了很多在网络上找到解决方案,但文档和示例非常薄弱。

我尝试安装的脚本提示我尝试使用 Ansible Expect 模块以编程方式回答的问题。

Ansible 任务:

- 名称:“运行 Lisk 安装”
变成:真
成为用户:流浪者
期待:
命令:bash installLisk.sh install -r {{env}}
回复:
'你想把 Lisk 安装到哪里? (默认 /home/vagrant)': "/home/vagrant"
'想要安装 NTP 吗? (y/n):': "y"
回声:是的

它似乎无法识别问题或答案,这是我从配置中返回的错误

任务 [lisk : 运行 Lisk 安装] **********************************************

致命:[默认]:失败! => {
“改变”:是的,
"cmd": "bash installLisk.sh install -r test",
“三角洲”:“0:00:30.137468”,
"结束": "2016-08-26 08:18:46.740017",
“失败”:是的,
“rc”:空,
"开始": "2016-08-26 08:18:16.602549",

"stdout": "检查先决条件:\r\n
卷曲已安装。\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_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):”
]}

谢谢大家提前

【问题讨论】:

    标签: vagrant ansible ansible-playbook


    【解决方案1】:

    expect 模块中的响应是正则表达式,所以问号有特殊含义。
    您可以简单地使用:

    - expect:
        command: bash installLisk.sh install -r {{env}}
        responses:
          'install Lisk to': '/home/vagrant'
          'install NTP': 'y'
        echo: yes
    

    【讨论】:

    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2023-03-18
    • 2021-07-10
    • 2014-10-05
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多