首页 > 解决方案 > Windows 主机的 Ansible-expect 模块

问题描述

我正在使用 ansible 来配置远程 Windows 主机。我尝试通过 ansible 配置 VSTS 代理,在此设置过程中,有一些提示应该响应。我找到了一个名为“expect”的命令,下面给出了我的剧本。

---
- hosts: windows
  tasks:
  - name: unarchive
    win_unzip:
      dest='C:\\agent1'
      src='C:\\devops\\agent.zip'
  - name: Configure Agnt
    expect:
       chdir: 'C:\\agent1'
       command: 'ConfigureAgent.cmd'
       echo: true
       responses:
         Accept the License: "Y"
         Enter the name for this agent (default is Agent-WindowsAgent): 'windowagent'
         Enter the URL for the Team Foundation Server: 'http://tfs.test.com:8080/tfs/testCollection$
         Configure this agent against which agent pool: 'testpool'
         Enter the path of the work folder for this agent: 'C:\\agent1\\_work'

但我收到如下错误。

 [WARNING]: No python interpreters found for host 52.230.224.117 (tried
 ['/usr/bin/python', 'python3.7', 'python3.6', 'python3.5', 'python2.7',
 'python2.6', '/usr/libexec/platform-python', '/usr/bin/python3', 'python'])

 fatal: [52.230.224.117]: FAILED! => {
"ansible_facts": {
    "discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"module_stderr": "Exception calling \"Create\" with \"1\" argument(s): \"At line:4 char:21\r\n+ def _ansiballz_main():\r\n+                     ~\r\nAn expression was expected after '('.\r\nAt line:13 char:27\r\n+     except (AttributeError, OSError):\r\n+                           ~\r\nMissing argument in parameter list.\r\nAt line:15 char:7\r\n+     if scriptdir is not None:\r\n+       ~\r\nMissing '(' after 'if' in if statement.\r\nAt line:22 char:7\r\n+     if sys.version_info < (3,):\r\n+       ~\r\nMissing '(' after 'if' in if statement.\r\nAt line:22 char:30\r\n+     if sys.version_info < (3,):\r\n+                              ~\r\nMissing expression after ','.\r\nAt line:22 char:25\r\n+     if sys.version_info < (3,):\r\n+                         ~\r\nThe '<' operator is reserved for future use.\r\nAt line:24 char:32\r\n+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)\r\n+                                ~\r\nMissing expression after ','.\r\nAt line:24 char:33\r\n+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)\r\n+                                 ~~~~~~~~~~~~~\r\nUnexpected token 'imp.PY_SOURCE' in expression or statement.\r\nAt line:24 char:32\r\n+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)\r\n+                                ~\r\nMissing closing ')' in expression.\r\nAt line:24 char:46\r\n+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)\r\n+                                              ~\r\nUnexpected token ')' in expression or statement.\r\nNot all parse errors were reported.  Correct the reported errors and try again.\"\r\nAt line:6 char:1\r\n+ $exec_wrapper = [ScriptBlock]::Create($split_parts[0])\r\n+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException\r\n    + FullyQualifiedErrorId : ParseException\r\n \r\nThe expression after '&' in a pipeline element produced an object that was not valid. It must result in a command \r\nname, a script block, or a CommandInfo object.\r\nAt line:7 char:2\r\n+ &$exec_wrapper\r\n+  ~~~~~~~~~~~~~\r\n    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException\r\n    + FullyQualifiedErrorId : BadExpression\r\n ",
"module_stdout": "",
"msg": "MODULE FAILURE\nSee stdout/stderr for the exact error",
"rc": 1

此列表中未给出“期望”模块https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html

所以我的问题是是否期望命令也可用于 Windows 主机?如果不是,那么用于此目的的等效命令是什么?

标签: ubuntuansible

解决方案


在 Ansible Hosts 文件中添加 Windows Python 环境变量。

--> vi /etc/ansible/hosts (添加以下行)
[windows:vars]
ansible_python_interpreter=c:\Python\python


推荐阅读