Я создал собственный модуль под названием delete в DEFAULT_MODULE_PATH в Ansible (/usr/share/ansible/plugins/modules/), где у меня есть и другие пользовательские модули, которые работают нормально.
Когда я пытаюсь запустить «ansible localhost -m delete», чтобы подтвердить, что модуль доступен, я получаю "Ошибка: NameError: name «модуль» не определен»
Цель этого модуля — удаление файлов с Google Диска с использованием file_id. К сожалению, у моей организации нет учетных записей служб Google, поэтому я могу не использую API для удаления файлов.
Чего мне здесь не хватает, кроме того, что я добавил модуль в правильный путь_модуля.
Код модуля удаления приведен ниже:
from __future__ import print_function
import google.auth
from ansible.module_utils.basic import *
import os.path
from googleapiclient.discovery import build
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from googleapiclient.errors import HttpError
from ansible.module_utils.basic import AnsibleModule
# "dynamic" (token) cred file
dynamic_credentials = '/usr/share/ansible/plugins/modules/token.json'
def get_creds():
creds = None
# read token file
with open(dynamic_credentials, 'r') as token:
creds = Credentials.from_authorized_user_file(dynamic_credentials, ['https://www.googleapis.com/auth/drive'])
# if token expired, refresh it
if not creds.valid and creds.expired and creds.refresh_token:
creds.refresh(Request())
# save refreshed token for next run
with open(dynamic_credentials, 'w') as token:
token.write(creds.to_json())
return creds
def main():
# arguments passed from playbook is a list of dictionaries
fields = {
"delete_info": {"required": True, "type": "list"}
}
module = AnsibleModule(argument_spec=fields)
delete_info = module.params["delete_info"]
# get valid creds
creds = get_creds()
# build drive service with creds
drive_service = build('drive', 'v3', credentials=creds)
for element in delete_info:
file_id = element["file_id"]
try:
# create drive api client
#if "file_id" in element:
#file_id = element["file_id"]
#service = build('drive', 'v3', credentials=creds)
drive_service.files().delete(fileId="file_id").execute()
except HttpError as error:
print('An error occurred: {error}')
file = None
module.exit_json(changed=False, output={"status": "Successfully deleted file(s) from GDrive."})
if __name__ == '__main__':
main()```
Подробнее здесь: https://stackoverflow.com/questions/791 ... s-not-defi
Ansible не может загрузить пользовательский модуль, говорит: NameError: имя «модуль» не определено ⇐ Python
Программы на Python
1731041510
Anonymous
Я создал собственный модуль под названием [b]delete[/b] в [b]DEFAULT_MODULE_PATH[/b] в Ansible (/usr/share/ansible/plugins/modules/), где у меня есть и другие пользовательские модули, которые работают нормально.
Когда я пытаюсь запустить «ansible localhost -m delete», чтобы подтвердить, что модуль доступен, я получаю [b]"Ошибка: NameError: name «модуль» не определен»[/b]
Цель этого модуля — удаление файлов с Google Диска с использованием file_id. К сожалению, у моей организации нет учетных записей служб Google, поэтому я могу не использую API для удаления файлов.
Чего мне здесь не хватает, кроме того, что я добавил модуль в правильный путь_модуля.
Код модуля удаления приведен ниже:
from __future__ import print_function
import google.auth
from ansible.module_utils.basic import *
import os.path
from googleapiclient.discovery import build
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from googleapiclient.errors import HttpError
from ansible.module_utils.basic import AnsibleModule
# "dynamic" (token) cred file
dynamic_credentials = '/usr/share/ansible/plugins/modules/token.json'
def get_creds():
creds = None
# read token file
with open(dynamic_credentials, 'r') as token:
creds = Credentials.from_authorized_user_file(dynamic_credentials, ['https://www.googleapis.com/auth/drive'])
# if token expired, refresh it
if not creds.valid and creds.expired and creds.refresh_token:
creds.refresh(Request())
# save refreshed token for next run
with open(dynamic_credentials, 'w') as token:
token.write(creds.to_json())
return creds
def main():
# arguments passed from playbook is a list of dictionaries
fields = {
"delete_info": {"required": True, "type": "list"}
}
module = AnsibleModule(argument_spec=fields)
delete_info = module.params["delete_info"]
# get valid creds
creds = get_creds()
# build drive service with creds
drive_service = build('drive', 'v3', credentials=creds)
for element in delete_info:
file_id = element["file_id"]
try:
# create drive api client
#if "file_id" in element:
#file_id = element["file_id"]
#service = build('drive', 'v3', credentials=creds)
drive_service.files().delete(fileId="file_id").execute()
except HttpError as error:
print('An error occurred: {error}')
file = None
module.exit_json(changed=False, output={"status": "Successfully deleted file(s) from GDrive."})
if __name__ == '__main__':
main()```
Подробнее здесь: [url]https://stackoverflow.com/questions/79168156/ansible-unable-to-load-custom-module-says-nameerror-name-module-is-not-defi[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия