Ansible не может загрузить пользовательский модуль, говорит: NameError: имя «модуль» не определеноPython

Программы на Python
Ответить
Anonymous
 Ansible не может загрузить пользовательский модуль, говорит: NameError: имя «модуль» не определено

Сообщение Anonymous »

Я создал собственный модуль под названием 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»