Возможно использование AWS-взаимодействий, создает исключение - PullRequest
0 голосов
/ 12 марта 2019

Я пытался запустить playbook для автоматизации AWS, но я столкнулся с этим исключением, которое я не могу понять.У меня есть следующая книга воспроизведения:

- name: Just for testing
  hosts: windows-server
  gather_facts: no
  vars:
    aws_a_key: accesskey
    aws_s_key: secretkey
  tasks:
    - name: Ping
      win_ping:
    - name: Create a file to C:\Temp\test.conf
      win_file:
        path: C:\Temp\test.conf
        state: touch
    - name: Create another file to C:\Temp\test2.conf
      win_file:
        path: C:\Temp\test2.conf
        state: touch
    - name: Gather S3 facts
      aws_s3_bucket_facts:
        aws_access_key: "{{ aws_a_key }}"
        aws_secret_key: "{{ aws_s_key }}"
        region: eu-central-1

Когда я пытаюсь ее выполнить, я получаю следующую ошибку:

PLAY [Just for testing] *******************************************************************************************************

TASK [Ping] *******************************************************************************************************************
ok: [WIN-40NQ43PHHA5]

TASK [Create a file to C:\Temp\test.conf] *************************************************************************************
changed: [WIN-40NQ43PHHA5]

TASK [Create another file to C:\Temp\test2.conf] ******************************************************************************
changed: [WIN-40NQ43PHHA5]

TASK [Gather S3 facts] ********************************************************************************************************
fatal: [WIN-40NQ43PHHA5]: FAILED! => {"changed": false, "module_stderr": "Exception calling \"Create\" with \"1\" argument(s): \"At line:4 char:21
+ def _ansiballz_main():
+                     ~
An expression was expected after '('.
At line:12 char:27
+     except (AttributeError, OSError):
+                           ~
Missing argument in parameter list.
At line:14 char:7
+     if scriptdir is not None:
+       ~
Missing '(' after 'if' in if statement.
At line:21 char:7
+     if sys.version_info < (3,):
+       ~
Missing '(' after 'if' in if statement.
At line:21 char:30
+     if sys.version_info < (3,):
+                              ~
Missing expression after ','.
At line:21 char:25
+     if sys.version_info < (3,):
+                         ~
The '<' operator is reserved for future use.
At line:23 char:32
+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)
+                                ~
Missing expression after ','.
At line:23 char:33
+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)
+                                 ~~~~~~~~~~~~~
Unexpected token 'imp.PY_SOURCE' in expression or statement.
At line:23 char:32
+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)
+                                ~
Missing closing ')' in expression.
At line:23 char:46
+         MOD_DESC = ('.py', 'U', imp.PY_SOURCE)
+                                              ~
Unexpected token ')' in expression or statement.
Not all parse errors were reported.  Correct the reported errors and try again.
\"
At line:6 char:1
+ $exec_wrapper = [ScriptBlock]::Create($split_parts[0])
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ParseException

The expression after '&' in a pipeline element produced an object that was not valid. It must result in a command 
name, a script block, or a CommandInfo object.
At line:7 char:2
+ &$exec_wrapper
+  ~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : BadExpression
 ", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
    to retry, use: --limit @/Users/mpolgardi/ansible/test_playbook.retry

PLAY RECAP ********************************************************************************************************************
WIN-40NQ43PHHA5            : ok=3    changed=2    unreachable=0    failed=1  

Может кто-нибудь помочь мне расшифровать эту ошибку?Я понятия не имею, где вообще посмотреть.Также есть ли способ для ansible дать мне читаемые сообщения об ошибках?

1 Ответ

0 голосов
/ 13 марта 2019

Согласно прекрасному руководству , для использования aws_s3_bucket_facts требуется python с доступными для него модулями boto и boto3.

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * то, что машина Windows пытается выполнить этот файл .py, как если бы это был PowerShell, и (конечно) эти два синтаксиса совершенно несовместимы.

У вас ansible_python_interpreter установлен рабочий бинарный файл? возможно , что переключение gather_facts: на yes обнаружит любую неправильную конфигурацию ранее, хотя я не могу поклясться в этом, поскольку не знаю, препятствует ли соединение winrm сбор фактов с использованием просто PowerShell, и не заметил бы фиктивное ansible_python_interpreter значение.

Хотя это не в точности , что вы просили, также довольно распространено поведение delegate_to: localhost и / или connection: local для этих задач AWS-y, так как значения практически отсутствуют при выполнении этих задач на компьютере target , учитывая, что учетные данные уже присутствуют в книге воспроизведения (то есть: он не получает учетные данные ни от чего на целевой машине). Естественно, это предполагает, что у вас есть локальный питон, в котором установлены boto и boto3, но это, вероятно, гораздо более вероятно, чем убеждение случайной машины с Windows работать правильно.

...