#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, и это сработало.