Skip to content

Instantly share code, notes, and snippets.

@zeitounator
Created November 9, 2024 09:52
Show Gist options
  • Save zeitounator/ff382b36baa519c79a73d3c5ec410a80 to your computer and use it in GitHub Desktop.
Save zeitounator/ff382b36baa519c79a73d3c5ec410a80 to your computer and use it in GitHub Desktop.
$ ansible --version
ansible [core 2.17.6]
config file = None
configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /home/user/.pyenv/versions/3.13.0/envs/trashso/lib/python3.13/site-packages/ansible
ansible collection location = /home/user/.ansible/collections:/usr/share/ansible/collections
executable location = /home/user/.pyenv/versions/trashso/bin/ansible
python version = 3.13.0 (main, Nov 9 2024, 10:01:52) [GCC 11.4.0] (/home/user/.pyenv/versions/3.13.0/envs/trashso/bin/python)
jinja version = 3.1.4
libyaml = True
$ cat /home/user/.ansible/plugins/modules/delete.py
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()
$ ansible localhost -m delete
localhost | FAILED! => {
"changed": false,
"msg": "missing required arguments: delete_info"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment