Я использую 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