From 4864e2ee9a7732d45bdd23e632729314d5dcb177 Mon Sep 17 00:00:00 2001 From: "James E. King III" Date: Tue, 13 Nov 2018 06:17:16 -0500 Subject: [PATCH] VMware: Add CreateTemporaryDirectoryInGuest capability to vmware_guest_file_operation (#47579) --- .../vmware/vmware_guest_file_operation.py | 44 ++++++++++++++----- 1 file changed, 32 insertions(+), 12 deletions(-) diff --git a/lib/ansible/modules/cloud/vmware/vmware_guest_file_operation.py b/lib/ansible/modules/cloud/vmware/vmware_guest_file_operation.py index 0c637b47111..13658d5a701 100644 --- a/lib/ansible/modules/cloud/vmware/vmware_guest_file_operation.py +++ b/lib/ansible/modules/cloud/vmware/vmware_guest_file_operation.py @@ -78,10 +78,15 @@ options: required: True directory: description: - - Create or delete directory. + - Create or delete a directory. + - Can be used to create temp directory inside guest using mktemp operation. + - mktemp sets variable C(dir) in the result with the name of the new directory. + - mktemp operation option is added in version 2.8 - 'Valid attributes are:' - - ' path: directory path to create or remove' - - ' operation: Valid values are create, delete' + - ' operation (str): Valid values are: create, delete, mktemp' + - ' path (str): directory path (required for create or remove)' + - ' prefix (str): temporary directory prefix (required for mktemp)' + - ' suffix (str): temporary directory suffix (required for mktemp)' - ' recurse (boolean): Not required, default (false)' required: False copy: @@ -218,16 +223,23 @@ class VmwareGuestFileManager(PyVmomi): vm_password = self.module.params['vm_password'] recurse = bool(self.module.params['directory']['recurse']) - operation = self.module.params["directory"]['operation'] - path = self.module.params["directory"]['path'] + operation = self.module.params['directory']['operation'] + path = self.module.params['directory']['path'] + prefix = self.module.params['directory']['prefix'] + suffix = self.module.params['directory']['suffix'] creds = vim.vm.guest.NamePasswordAuthentication(username=vm_username, password=vm_password) file_manager = self.content.guestOperationsManager.fileManager - if operation == "create": + if operation in ("create", "mktemp"): try: - file_manager.MakeDirectoryInGuest(vm=self.vm, - auth=creds, - directoryPath=path, - createParentDirectories=recurse) + if operation == "create": + file_manager.MakeDirectoryInGuest(vm=self.vm, + auth=creds, + directoryPath=path, + createParentDirectories=recurse) + else: + newdir = file_manager.CreateTemporaryDirectoryInGuest(vm=self.vm, auth=creds, + prefix=prefix, suffix=suffix) + result['dir'] = newdir except vim.fault.FileAlreadyExists as file_already_exists: result['changed'] = False result['msg'] = "Guest directory %s already exist: %s" % (path, @@ -386,8 +398,10 @@ def main(): type='dict', default=None, options=dict( - path=dict(required=True, type='str'), - operation=dict(required=True, type='str', choices=['create', 'delete']), + operation=dict(required=True, type='str', choices=['create', 'delete', 'mktemp']), + path=dict(required=False, type='str'), + prefix=dict(required=False, type='str'), + suffix=dict(required=False, type='str'), recurse=dict(required=False, type='bool', default=False) ) ), @@ -416,6 +430,12 @@ def main(): required_one_of=[['directory', 'copy', 'fetch']], ) + if module.params['directory']: + if module.params['directory']['operation'] in ('create', 'delete') and not module.params['directory']['path']: + module.fail_json(msg='directory.path is required when operation is "create" or "delete"') + if module.params['directory']['operation'] == 'mktemp' and not (module.params['directory']['prefix'] and module.params['directory']['suffix']): + module.fail_json(msg='directory.prefix and directory.suffix are required when operation is "mktemp"') + if module.params['vm_id_type'] == 'inventory_path' and not module.params['folder']: module.fail_json(msg='Folder is required parameter when vm_id_type is inventory_path')