При выполнении playbook, который предполагает создание группы ресурсов, выдает ошибку при выполнении playbook

#ansible #ansi

Вопрос:

Я разработал учебник с ролями, которые создадут группу ресурсов в облаке Azure. Ниже приведена структура каталогов.

 prhinge1@DESKTOP-F8RMF14:~/pits-shared-service$ cd roles
prhinge1@DESKTOP-F8RMF14:~/pits-shared-service/roles$ ls
netinfracreator
prhinge1@DESKTOP-F8RMF14:~/pits-shared-service/roles$ tree netinfracreator
netinfracreator
├── README.md
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

8 directories, 8 files
 

задачи/main.yml содержит приведенный ниже код

     ---
    # tasks file for netinfracreator
    - name: Create resource group if doesn't exist
      azure_rm_resourcegroup:
         name: "{{ resource_group }}"
         location: "{{ location }}"
 

vars/main.yml — переменные, объявленные в этом файле.

 ---
# vars file for netinfracreator
resource_group: "test_ansible_resourcegrp"
location: "eastus"
 

Ниже приведен основной файл playbook (netinfracreator-role.yml), в котором вызывается роль.

     ---
    - name: User netinfracreator role playbook
      hosts: localhost
      connection: local
      collections:
       - azure.azcollection
      become_user: root
      become: true
      become_method: sudo
    
      roles:
       - role: netinfracreator
 

Кроме того, я храню учетные данные участника службы в файлах /home//.azure/учетные данные.

используемая версия pythone выглядит следующим образом

 prhinge1@DESKTOP-F8RMF14:~/pits-shared-service$ python3 --version
Python 3.8.5
 

Когда я выполняю playbook, я получаю ошибки ниже. Пожалуйста, дайте мне знать, что не так в этом коде.

 prhinge1@DESKTOP-F8RMF14:~/pits-shared-service$ sudo ansible-playbook netinfracreator-role.yml --check
[sudo] password for prhinge1:

PLAY [User netinfracreator role playbook] *****************************************************************************************************************

TASK [Gathering Facts] ************************************************************************************************************************************
ok: [localhost]

TASK [netinfracreator : Create resource group if doesn't exist] *******************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: FileNotFoundError: [Errno 2] No such file or directory: '/root/.azure/azureProfile.json'
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "Traceback (most recent call last):n  File "/usr/local/lib/python3.8/dist-packages/azure/cli/core/_session.py", line 39, in loadn    with codecs_open(self.filename, 'r', encoding=self._encoding) as f:n  File "/usr/lib/python3.8/codecs.py", line 905, in openn    file = builtins.open(filename, mode, buffering)nFileNotFoundError: [Errno 2] No such file or directory: '/root/.azure/azureProfile.json'nnDuring handling of the above exception, another exception occurred:nnTraceback (most recent call last):n  File "/root/.ansible/tmp/ansible-tmp-1622712598.829142-71872954787953/AnsiballZ_azure_rm_resourcegroup.py", line 102, in <module>n    _ansiballz_main()n  File "/root/.ansible/tmp/ansible-tmp-1622712598.829142-71872954787953/AnsiballZ_azure_rm_resourcegroup.py", line 94, in _ansiballz_mainn    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)n  File "/root/.ansible/tmp/ansible-tmp-1622712598.829142-71872954787953/AnsiballZ_azure_rm_resourcegroup.py", line 40, in invoke_modulen    runpy.run_module(mod_name='ansible.modules.cloud.azure.azure_rm_resourcegroup', init_globals=None, run_name='__main__', alter_sys=True)n  File "/usr/lib/python3.8/runpy.py", line 207, in run_modulen    return _run_module_code(code, init_globals, run_name, mod_spec)n  File "/usr/lib/python3.8/runpy.py", line 97, in _run_module_coden    _run_code(code, mod_globals, init_globals,n  File "/usr/lib/python3.8/runpy.py", line 87, in _run_coden    exec(code, run_globals)n  File "/tmp/ansible_azure_rm_resourcegroup_payload_lhvkhayb/ansible_azure_rm_resourcegroup_payload.zip/ansible/modules/cloud/azure/azure_rm_resourcegroup.py", line 291, in <module>n  File "/tmp/ansible_azure_rm_resourcegroup_payload_lhvkhayb/ansible_azure_rm_resourcegroup_payload.zip/ansible/modules/cloud/azure/azure_rm_resourcegroup.py", line 287, in mainn  File "/tmp/ansible_azure_rm_resourcegroup_payload_lhvkhayb/ansible_azure_rm_resourcegroup_payload.zip/ansible/modules/cloud/azure/azure_rm_resourcegroup.py", line 167, in __init__n  File "/tmp/ansible_azure_rm_resourcegroup_payload_lhvkhayb/ansible_azure_rm_resourcegroup_payload.zip/ansible/module_utils/azure_rm_common.py", line 341, in __init__n  File "/tmp/ansible_azure_rm_resourcegroup_payload_lhvkhayb/ansible_azure_rm_resourcegroup_payload.zip/ansible/module_utils/azure_rm_common.py", line 1145, in __init__n  File "/tmp/ansible_azure_rm_resourcegroup_payload_lhvkhayb/ansible_azure_rm_resourcegroup_payload.zip/ansible/module_utils/azure_rm_common.py", line 1378, in _get_credentialsn  File "/tmp/ansible_azure_rm_resourcegroup_payload_lhvkhayb/ansible_azure_rm_resourcegroup_payload.zip/ansible/module_utils/azure_rm_common.py", line 1289, in _get_azure_cli_credentialsn  File "/usr/local/lib/python3.8/dist-packages/azure/common/credentials.py", line 46, in get_azure_cli_credentialsn    profile = get_cli_profile()n  File "/usr/local/lib/python3.8/dist-packages/azure/common/credentials.py", line 28, in get_cli_profilen    ACCOUNT.load(os.path.join(azure_folder, 'azureProfile.json'))n  File "/usr/local/lib/python3.8/dist-packages/azure/cli/core/_session.py", line 42, in loadn    self.save()n  File "/usr/local/lib/python3.8/dist-packages/azure/cli/core/_session.py", line 46, in saven    with codecs_open(self.filename, 'w', encoding=self._encoding) as f:n  File "/usr/lib/python3.8/codecs.py", line 905, in openn    file = builtins.open(filename, mode, buffering)nFileNotFoundError: [Errno 2] No such file or directory: '/root/.azure/azureProfile.json'n", "module_stdout": "", "msg": "MODULE FAILUREnSee stdout/stderr for the exact error", "rc": 1}

PLAY RECAP ************************************************************************************************************************************************
localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
 

Комментарии:

1. Насколько более ясным могло быть сообщение об ошибке, чем No such file or directory: '/root/.azure/azureProfile.json' ?

2. Используя простую книгу игр, та же задача может успешно выполняться и создавать ресурс в azure, но при выполнении подхода на основе ролей произошла только эта ошибка. Я новичок в Ansible и изучаю этот подход, поэтому не могу понять связь этой ошибки.

Ответ №1:

Я решаю эту проблему. В netinfracreator-роль.yml , я использовал

 become_user: root
become: true
become_method: sudo
 

Что на самом деле не требуется. Из-за этого он заставляет меня запускать playbook с помощью команды sudo. из-за этого он всегда ищет azureProfile.файл json в корневом каталоге, однако он находится в моей папке пользователя.
Поэтому, чтобы решить эту проблему, я удалил все параметры из книги воспроизведения и выполнил книгу воспроизведения без sudo, и это сработало.