Ansible делегирование на Windows клиенте с использованием delegate_to: не работает должным образом - PullRequest
0 голосов
/ 17 июня 2020

Я использую ansible 2.9 для выполнения некоторых задач на локальном хосте, а затем задачи на хосте Windows (с использованием PowerShell в качестве оболочки по умолчанию), а затем снова финальные задачи на локальном хосте.

Правильно теперь я работаю тогда отдельно в игре как таковой:

- hosts: localhost
  become: yes
  any_errors_fatal: true
  gather_facts: no
  force_handlers: true
  pre_tasks:
.......
- hosts: wintel
  become: yes
  become_user: AD_user
  gather_facts: no
  force_handlers: true

  roles:
     - role: mywindowsrole

- hosts: localhost
  become: yes
  gather_facts: no
  force_handlers: true

  post_tasks:
...........

Теперь у меня есть требование запускать некоторые задачи на localhost (linux) при выполнении роли для удаленного хоста (wintel ). Я включил их, как показано ниже, в main.yml из mywindowsrole:

- name: Include linux tasks
  include: linuxtasks.yml
  delegate_to: localhost
  become: true
  become_method: sudo
  become_user: root

Однако при запуске воспроизведения это не похоже на делегирование задач локальному хосту, вместо этого он запускал их сам (wintel. test.com):

TASK [mywindowsrole: Include linux tasks] ***************************************************************************************************************************************
included: /mydir/roles/mywindowsrole/tasks/main.yml for wintel.test.com


 fatal: [wintel.test.com]: 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:27 char:34\r\n+     def invoke_module(modlib_path, temp_path, json_params):\r\n+                                  ~\r\nMissing argument in parameter list.\r\nAt line:28 char:40\r\n+         z = zipfile.ZipFile(modlib_path, mode='a')\r\n+                                        ~\r\nMissing argument in parameter list.\r\nAt line:31 char:33\r\n+         zinfo = zipfile.ZipInfo()\r\n+                                 ~\r\nAn expression was expected after '('.\r\nAt line:34 char:25\r\n+         z.writestr(zinfo, sitecustomize)\r\n+                         ~\r\nMissing argument in parameter list.\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}

Почему задачи не делегируются на localhost (сервер linux, который является контроллером ansible)?

Вот фрагмент моего инвентаря файл:

[wintel]
wintel.test.com

...