ansible -> ec2_instance_facts.py ошибка: DeprecationWarning: модуль imp устарел в пользу importlib; после обновления до python 3,7 - PullRequest
0 голосов
/ 02 мая 2020

после обновления до python 3.7 с 2.7 Я получаю эту ошибку при использовании с ansible 2.7.0

ansible 2.7.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/ec2-user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/ec2-user/app_virtualenv/lib/python3.7/site-packages/ansible
  executable location = /home/ec2-user/app_virtualenv/bin/ansible
  python version = 3.7.6 (default, Feb 26 2020, 20:54:15) [GCC 7.3.1 20180712 (Red Hat 7.3.1-6)]

, получая эту ошибку:

2020-05-02 11:54:57,580 p=23305 u=ec2-user |  Saturday 02 May 2020  11:54:57 +0000 (0:00:00.476)       0:01:39.534 **********
2020-05-02 11:54:57,750 p=23305 u=ec2-user |  Using module file /home/ec2-user/app_virtualenv/lib/python3.7/site-packages/ansible/modules/cloud/amazon/ec2_instance_facts.py
2020-05-02 11:54:58,120 p=23305 u=ec2-user |  fatal: [10.0.5.187 -> localhost]: FAILED! => changed=false
  module_stderr: |-
    /home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py:17: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
      import imp
    Traceback (most recent call last):
      File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 113, in <module>
        _ansiballz_main()
      File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 105, in _ansiballz_main
        invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
      File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 48, in invoke_module
        imp.load_module('__main__', mod, module, MOD_DESC)
      File "/usr/lib64/python3.7/imp.py", line 234, in load_module
        return load_source(name, filename, file)
      File "/usr/lib64/python3.7/imp.py", line 169, in load_source
        module = _exec(spec, sys.modules[name])
      File "<frozen importlib._bootstrap>", line 630, in _exec
      File "<frozen importlib._bootstrap_external>", line 728, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/__main__.py", line 555, in <module>
      File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/__main__.py", line 551, in main
      File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/__main__.py", line 505, in list_ec2_instances
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 449, in build_full_result
        for response in self:
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 255, in __iter__
        response = self._make_request(current_kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 332, in _make_request
        return self._method(**current_kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
        return self._make_api_call(operation_name, kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 648, in _make_api_call
        operation_model, request_dict, request_context)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 667, in _make_request
        return self._endpoint.make_request(operation_model, request_dict)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 102, in make_request
        return self._send_request(request_dict, operation_model)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 132, in _send_request
        request = self.create_request(request_dict, operation_model)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 116, in create_request
        operation_name=operation_model.name)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/hooks.py", line 356, in emit
        return self._emitter.emit(aliased_event_name, **kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/hooks.py", line 228, in emit
        return self._emit(event_name, kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/hooks.py", line 211, in _emit
        response = handler(**kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/signers.py", line 90, in handler
        return self.sign(operation_name, request)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/signers.py", line 157, in sign
        auth.add_auth(request)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/auth.py", line 357, in add_auth
        raise NoCredentialsError
    botocore.exceptions.NoCredentialsError: Unable to locate credentials
  module_stdout: ''
  msg: |-
    MODULE FAILURE
    See stdout/stderr for the exact error
  rc: 1

также обратите внимание, что я получаю:

botocore.exceptions.NoCredentialsError: Unable to locate credentials

Хотя у меня есть учетные данные. aws dir, и когда я делаю простой вызов API для ec2, я получаю результаты:

python

Python 3.7.6 (default, Feb 26 2020, 20:54:15)
[GCC 7.3.1 20180712 (Red Hat 7.3.1-6)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import boto3
>>> ec2_resource = boto3.resource('ec2')
>>> ec2_client = boto3.client('ec2')
>>> ec2_client.describe_instances()
{'Reservations': [{'Groups': [], 'Instances': [{'AmiLaunchIndex': 0, 'ImageId': 'ami-b66ed3de', 'InstanceId': 'i-be381945', 'InstanceType': 'm5.large', 'KeyName': 'my_app', 'LaunchTime': datetime.datetime(2019, 3, 4, 8, 25, 17, tzinfo=tzlocal()), 'Monitoring': {'State': 'disabled'}, 'Placement': {'Avail .................

ОБНОВЛЕНИЕ:
после обновления ansible до последнего я получаю эту ошибку:

2020-05-02 11:54:57,580 p=23305 u=ec2-user |  task path: /home/ec2-user/ansible/ansible_linux/roles/package_deploy/tasks/main.yml:5
2020-05-02 11:54:57,580 p=23305 u=ec2-user |  Saturday 02 May 2020  11:54:57 +0000 (0:00:00.476)       0:01:39.534 **********
2020-05-02 11:54:57,750 p=23305 u=ec2-user |  Using module file /home/ec2-user/app_virtualenv/lib/python3.7/site-packages/ansible/modules/cloud/amazon/ec2_instance_facts.py
2020-05-02 11:54:58,120 p=23305 u=ec2-user |  fatal: [10.0.5.187 -> localhost]: FAILED! => changed=false
  module_stderr: |-
    /home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py:17: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
      import imp
    Traceback (most recent call last):
      File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 113, in <module>
        _ansiballz_main()
      File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 105, in _ansiballz_main
        invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)
      File "/home/ec2-user/.ansible/tmp/ansible-tmp-1588420497.6072006-50705771655817/AnsiballZ_ec2_instance_facts.py", line 48, in invoke_module
        imp.load_module('__main__', mod, module, MOD_DESC)
      File "/usr/lib64/python3.7/imp.py", line 234, in load_module
        return load_source(name, filename, file)
      File "/usr/lib64/python3.7/imp.py", line 169, in load_source
        module = _exec(spec, sys.modules[name])
      File "<frozen importlib._bootstrap>", line 630, in _exec
      File "<frozen importlib._bootstrap_external>", line 728, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/__main__.py", line 555, in <module>
      File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/__main__.py", line 551, in main
      File "/tmp/ansible_ec2_instance_facts_payload_zmc16g7o/__main__.py", line 505, in list_ec2_instances
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 449, in build_full_result
        for response in self:
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 255, in __iter__
        response = self._make_request(current_kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/paginate.py", line 332, in _make_request
        return self._method(**current_kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 357, in _api_call
        return self._make_api_call(operation_name, kwargs)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 648, in _make_api_call
        operation_model, request_dict, request_context)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/client.py", line 667, in _make_request
        return self._endpoint.make_request(operation_model, request_dict)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 102, in make_request
        return self._send_request(request_dict, operation_model)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 132, in _send_request
        request = self.create_request(request_dict, operation_model)
      File "/home/ec2-user/app_virtualenv/lib/python3.7/site-packages/botocore/endpoint.py", line 116, in create_request
        operation_name=operation_model.name)
      monitoring: true

#### ################################################
ОБНОВЛЕНИЕ ОТВЕТА
Я не смог найти его на целых rnet! Я отвечаю сам и помогаю кому сталкиваюсь с этой проблемой
дело в том, что boto3 ищет учетные данные AWS в /etc/boto.cfg, а не в. aws каталоге ...
, чтобы выяснилось, что мне пришлось отладить ansible по этой ссылке, что было очень полезно
https://docs.ansible.com/ansible/latest/user_guide/playbooks_debugger.html
https://github.com/ansible/ansible/blob/v2.2.2.0-0.2.rc2/lib/ansible/executor/module_common.py#L176 -L203 на самом деле я думаю, что это наиболее Полезная ссылка в ansible экосистеме.!
как это у вас вдруг глаза и вы можете понять, что происходит!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...