
    Vh?B                         d dl mZmZmZ eZdZdZdZ	 d dl	m
Z
 d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ  G d
 de      Zd Zedk(  r e        yy# e$ r Y Aw xY w)    )absolute_importdivisionprint_functiona  
---
module: vcenter_folder
deprecated:
  removed_in: 7.0.0
  why: This module has been moved to the L(new vmware.vmware collection,https://forum.ansible.com/t/5880)
  alternative: Use M(vmware.vmware.folder) instead.
short_description: Manage folders on given datacenter
description:
- This module can be used to create, delete, move and rename folder on then given datacenter.
- This module is only supported for vCenter.
author:
- Abhijeet Kasurde (@Akasurde)
- Christian Kotte (@ckotte) <christian.kotte@gmx.de>
- Jan Meerkamp (@meerkampdvv)
options:
  datacenter:
    description:
    - Name of the datacenter.
    required: true
    aliases: ['datacenter_name']
    type: str
  folder_name:
    description:
    - Name of folder to be managed.
    - Folder name should be under 80 characters. This is a VMware restriction.
    required: true
    type: str
  parent_folder:
    description:
    - Name of the parent folder under which new folder needs to be created.
    - "If user wants to create a folder under '/DC0/vm/vm_folder', this value will be 'vm_folder'."
    - "If user wants to create a folder under '/DC0/vm/folder1/folder2', this value will be 'folder1/folder2'."
    required: false
    type: str
  folder_type:
    description:
    - This is type of folder.
    - "If set to V(vm), then 'VM and Template Folder' is created under datacenter."
    - "If set to V(host), then 'Host and Cluster Folder' is created under datacenter."
    - "If set to V(datastore), then 'Storage Folder' is created under datacenter."
    - "If set to V(network), then 'Network Folder' is created under datacenter."
    - This parameter is required, if O(state=absent) and O(parent_folder) is not set.
    default: vm
    type: str
    required: false
    choices: [ datastore, host, network, vm ]
  state:
    description:
    - State of folder.
    - If set to V(present) without parent folder parameter, then folder with V(folder_type) is created.
    - If set to V(present) with parent folder parameter,  then folder in created under parent folder. V(folder_type) is ignored.
    - If set to V(absent), then folder is unregistered and destroyed.
    default: present
    choices: [ present, absent ]
    type: str
extends_documentation_fragment:
- community.vmware.vmware.documentation

a  
- name: Create a VM folder on given datacenter
  community.vmware.vcenter_folder:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter_name: datacenter_name
    folder_name: sample_vm_folder
    folder_type: vm
    state: present
  register: vm_folder_creation_result
  delegate_to: localhost

- name: Create a datastore folder on given datacenter
  community.vmware.vcenter_folder:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter_name: datacenter_name
    folder_name: sample_datastore_folder
    folder_type: datastore
    state: present
  register: datastore_folder_creation_result
  delegate_to: localhost

- name: Create a sub folder under VM folder on given datacenter
  community.vmware.vcenter_folder:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter_name: datacenter_name
    folder_name: sample_sub_folder
    parent_folder: vm_folder
    state: present
  register: sub_folder_creation_result
  delegate_to: localhost

- name: Delete a VM folder on given datacenter
  community.vmware.vcenter_folder:
    hostname: '{{ vcenter_hostname }}'
    username: '{{ vcenter_username }}'
    password: '{{ vcenter_password }}'
    datacenter_name: datacenter_name
    folder_name: sample_vm_folder
    folder_type: vm
    state: absent
  register: vm_folder_deletion_result
  delegate_to: localhost
a(  
result:
    description: The detail about the new folder
    returned: On success
    type: complex
    contains:
        path:
            description: the full path of the new folder
            type: str
        msg:
            description: string stating about result
            type: str
)vim)AnsibleModule)PyVmomifind_datacenter_by_namewait_for_taskget_all_objs)base_argument_spec)	to_nativec                   ,     e Zd Z fdZd ZddZ xZS )VmwareFolderManagerc                    t         t        |   |       | j                  j	                  dd       }t        | j                  |      | _        | j                  | j                  j                  d|z         | j                  j                  | j                  j                  | j                  j                  | j                  j                  d| _        y )N
datacenter)datacenter_namezFailed to find datacenter %smsg)vmhost	datastorenetwork)superr   __init__paramsgetr	   contentdatacenter_objmodule	fail_jsonvmFolder
hostFolderdatastoreFoldernetworkFolderdatacenter_folder_type)selfr   r   	__class__s      s/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/vmware/plugins/modules/vcenter_folder.pyr   zVmwareFolderManager.__init__   s    !41&9++//,=5dllTcd&KK!!&D&V!W %%..''22,,<<**88	'
#    c                 n   | j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  d      }| j                   j                  j                  dd      }di d}|dk(  r}d}|r,d	|v r|j                  d	      j	                  d	      }d}|D ]9  }| j                  |||
      }	|	s| j                   j                  d|z         |	}; | j                  |||
      }
|
rd|d||d<    | j                   j                  d'i | n| j                  ||      }|s| j                   j                  d|z         | j                  |||
      }
|
r| j                  |
      |d   d<   d|d||d<    | j                   j                  d'i | nT| j                  ||d      }|r>| j                  |      |d   d<   d|z  |d   d<    | j                   j                  d'i | 	 |rh|rf| j                   j                  rd|d|d|d|d<   n:|j                  |      }| j                  |      |d   d<   d|d|d|d|d   d<   d|d<   np|sn|sl| j                   j                  rd|d|d|d<   nD| j                  |   j                  |      }d|d|d|d   d<   | j                  |      |d   d<   d|d<    | j                   j                  d'i | y|d k(  rd}|rd	|v ru|j                  d	      j	                  d	      }d}|D ]9  }| j                  |||
      }	|	s| j                   j                  d|z         |	}; | j                  |||
      }n]| j                  ||      }|s| j                   j                  d|z         | j                  |||
      }n| j                  ||d      }|r	 |rg| j                   j                  rd|d<   d|d|d|d!|d<   n|d"k(  r|j'                         }n|j)                         }t+        |#      \  |d<   |d<   nc| j                   j                  rd|d<   d|d|d!|d<   n;|d"k(  r|j'                         }n|j)                         }t+        |#      \  |d<   |d<    | j                   j                  d'i | yy# t        j                  j                  $ r+}d|d<   dt        |j                         z  |d<   Y d}~-d}~wt        j                  j"                  $ r=}| j                   j                  dt        |j                         z         Y d}~d}~wt$        $ r3}| j                   j                  dt        |      z         Y d}~d}~ww xY w# t        j                  j,                  $ r=}| j                   j                  d$t        |j                         z         Y d}~Pd}~wt        j                  j.                  $ r=}| j                   j                  d%t        |j                         z         Y d}~d}~wt$        $ r3}| j                   j                  d&t        |      z         Y d}~d}~ww xY w)(z2
        Manage internal state management
        statefolder_typefolder_nameparent_folderNF)changedresultpresent/)r-   r,   r.   zCould not find folder %sr   zFolder z$ already exists under parent folder r0   )r-   r,   zParent folder %s does not existpathT)r-   r,   recursezFolder %s already existsr   zFolder 'z' of type 'z	' under 'z' will be created.z' created successfully.r/   zVFailed to create folder as another object has same name in the same target folder : %szFFailed to create folder as folder name is not a valid entity name : %sz6Failed to create folder due to generic exception : %s absentz' will be removed.r   )taskzTFailed to remove folder as another client modified folder before this operation : %sz:Failed to remove folder as folder is in invalid state : %sz4Failed to remove folder due to generic exception %s  )r   r   r   stripsplit
get_folderr    	exit_jsonget_folder_path
check_modeCreateFolderr%   r   faultDuplicateNamer   r   InvalidName	ExceptionUnregisterAndDestroyDestroyr
   ConcurrentAccessInvalidState)r&   r+   r,   r-   r.   resultsp_folder_objparent_folder_partspartpart_folder_objchild_folder_obj
folder_obj
new_folderduplicate_nameinvalid_namegeneral_excr6   concurrent_accessinvalid_stategen_execs                       r(   ensurezVmwareFolderManager.ensure   s!    ""&&w/kk((,,];kk((,,];**..E#r2IL-'*7*=*=c*B*H*H*M'#'L 3 7*.//dFQHT +: +V  / KK116PSW6W1X'67 (,;CNEQ (7 (S$ (CNP]-_)---88#'??}?J $3 $LL (--2SVc2c-d (,;CNEQ (7 (S$ (484H4HIY4Z)&1CNP]-_)---88!__9D59 - ;
 040D0DZ0PGH%f-/IK/WGH%e,)DKK))4G4 W \{{--*5{M*S &2%>%>{%K
484H4H4T)&10;[-4Y)%0)-GI&&|{{--Xcep)q%)%@%@%M%Z%Z[f%g
grt  4A)%0484H4H4T)&1)-GI& "DKK!!,G,hL-'*7*=*=c*B*H*H*M'#'L 3 7*.//dFQHT +: +V  / KK116PSW6W1X'67 "&[=H?K "1 "MJ $(??}?J $3 $LL (--2SVc2c-d "&[=H?K "1 "MJ "__9D59 - ;
 V$;;1115GI..9;.WGEN  +d2'1'F'F'H'1'9'9';ANTXAY>GI.;;1115GI.\git-uGEN*d2'1'F'F'H'1'9'9';ANTXAY>GI. "DKK!!,G,A  99** c
 &+	""CEN~OaOaEb"c99(( \%% +=?HIYIY?Z+[% \ \ W%% +=?H?U+V% W WWv yy11 @KK)) /\^ghyh}h}^~/) @ @yy-- dKK)) /DFOP]PaPaFb/c) d d  VKK)) /?AJ8AT/U) V VVsb   'CS+ CW +W T.. W2VW(W  WZ4%2X Z4=2Y55Z4(Z//Z4c                     |xs | j                   |   }t        | j                  t        j                  g||      }|D ]  }|j
                  |k(  s|c S  y)zi
        Get managed object of folder by name
        Returns: Managed object of folder by name

        )r4   N)r%   r   r   r   Foldername)r&   r-   r,   r.   r4   folder_objsfolders          r(   r:   zVmwareFolderManager.get_folder@  sY     &Q)D)D[)Q"4<<#**}V]^! 	F{{k)	 r)   )NF)__name__
__module____qualname__r   rU   r:   __classcell__)r'   s   @r(   r   r      s    
[-zr)   r   c                     t               } | j                  t        dddg      t        dd      t        dd      t        dddgd	      t        dd
g dd             t        | d      }t	        |j
                  j                  d            dkD  r|j                  d       t        |      }|j                         s.|j                  d|j
                  j                  d      z         |j                          y )NstrTr   )typerequiredaliases)ra   rb   Fr1   r5   )ra   choicesdefaultr   )r   r   r   r   )ra   re   rd   rb   )r   r-   r.   r+   r,   )argument_specsupports_check_moder-   O   zFFailed to manage folder as folder_name can only contain 80 characters.r   zNModule vcenter_folder is meant for vCenter, hostname %s is not vCenter server.hostname)r   updatedictr   lenr   r   r    r   
is_vcenterrU   )rf   r   vcenter_folder_mgrs      r(   mainro   P  s    &(MUT<M;NOed36%x0$& e!%!G"')   # F
 6==]+,r1ef,V4((* 68>8I8I*8UV 	Wr)   __main__N)
__future__r   r   r   ra   __metaclass__DOCUMENTATIONEXAMPLESRETURNpyVmomir   ImportErroransible.module_utils.basicr   @ansible_collections.community.vmware.plugins.module_utils.vmwarer   r	   r
   r   Hansible_collections.community.vmware.plugins.module_utils._argument_specr   ansible.module_utils._textr   r   ro   r[   r7   r)   r(   <module>r|      s    A @;z0d
	 5 K  K g 0y' yx < zF G  		s   A AA