
    Vh                        d dl mZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dgZ e       Z G d de
      Zy)    )annotationsN)AnsibleParserError)NonInheritableFieldAttribute)TaskInclude)Role)RoleInclude)Display)string_types)TemplarIncludeRolec                       e Zd ZdZ ed      Z ed      Z ed      Zeez  ez  Z e	dddd	      Z
 e	dddd	      Z e	dddd	      Zd fd
	Zd ZddZedd       Zd fd	Z fdZ xZS )r   z
    A Role include is derived from a regular role to handle the special
    circumstances related to the `- include_role: ...`
    )namerole)
tasks_from	vars_fromdefaults_fromhandlers_from)applypublicallow_duplicatesrolespec_validateboolNFT)isadefaultprivatealways_post_validatec                j    t         t        |   |||       i | _        || _        d | _        d | _        y )N)blockr   task_include)superr   __init___from_files_parent_role
_role_name
_role_path)selfr   r   r   	__class__s       M/home/dcms/DCMS/lib/python3.12/site-packages/ansible/playbook/role_include.pyr!   zIncludeRole.__init__6   s7    k4)D|)\     c                T    | j                   xs | j                  d| j                  S )z return the name of the task z : )r   actionr$   )r&   s    r(   get_namezIncludeRole.get_name?   s    yyFdooFFr)   c           
        || j                   j                  }n|}t        j                  | j                  |||| j
                        }|xj                  | j                  z  c_        ||j                  ||       }ni }t        ||      }|j                  | j                        }t        j                  ||| j                  |d| j                  | j                  | j                        }	| j                   |	j"                  _        |j$                  j'                  |	       |	j(                  | _        |	j+                         }
| j-                         }|	j
                  |_        |	j/                  ||
      }|D ]  }||_         |	j
                  |_         |	j1                  ||
      }|D ]	  }||_          |j2                  |z   |_        ||fS )N)playvariable_managerloadercollection_list)r.   task)r0   	variablesT)parent_role
from_filesfrom_includevalidater   static)r.   	dep_chain)_parent_playr   loadr$   collectionsvarsget_varsr   templater"   r   r#   r   r   statically_loadedr   	_metadatarolesappendr%   get_dep_chainbuild_parent_blockcompileget_handler_blockshandlers)r&   r.   r/   r0   myplayriavailable_variablestemplarr5   actual_roler9   p_blockblocksbrI   hs                   r(   get_block_listzIncludeRole.get_block_listC   s    <\\''FFdooFM]fl  C  O  O  P
499'"2";";d";"S"$3FG%%d&6&67
 iiF8I8IV`-1D<R<R[_[f[fos  pF  pFG151F1F. 	K( &00  --/	))+ *55$$&I$F 	4AAI'33AM	4 11v1S 	 AAI	  //H4xr)   c           
        t        |||      j                  | ||      }t        |j                  j	                               }|j                  j                  d|j                  j                  d            |_        |j                  t        d|j                  z  |       |j                  t         j                        }|r5t        d|j                  dd	j                  t        |            |       |j                  t         j                        D ]h  }	|	j                  d
      }
|j                  j                  |	      }t!        |t"              st        d|	dt%        |      d      ||j&                  |
<   j |j                  j                  di       }|r6|j                  t(        j*                  vrt        d|j                  z  |       t!        |t,              st        dt%        |      z  |       |j                  t         j.                        D ](  }t1        |||j                  j                  |             * |S )N)r   )r/   r0   r   r   z"'name' is a required field for %s.)objzInvalid options for z: ,_fromzExpected a string for z	 but got z insteadr   zInvalid options for %s: applyz,Expected a dict for apply but got %s instead)r   	load_data	frozensetargskeysgetr$   r   r+   
difference
VALID_ARGSjoinlistintersection	FROM_ARGSremovesuffix
isinstancer
   typer"   C_ACTION_INCLUDE_ROLEdict
OTHER_ARGSsetattr)datar   r   r   r/   r0   irmy_arg_namesbad_optskeyfrom_key
args_valueapply_attrsoptions                 r(   r<   zIncludeRole.loadv   s    <@JJ4br  |BJ  C !0 FBGGKK,?@== $%IBII%U[_``  **;+A+AB$RYYPSPXPXY]^fYgPh%iostt  ,,[-B-BC 	2C''0HS)Jj,7(Z]_cdn_o)pqq'1BNN8$	2 ggkk'2.299A,B,BB$%Dryy%PVZ[[K.$%SVZ[fVg%gmqrr #//0F0FG 	5FBF 34	5 	r)   c                    t         t        |   ||      }| j                  |_        | j                  j                         |_        | j
                  |_        | j                  |_        | j                  |_        |S )N)exclude_parentexclude_tasks)r    r   copyrA   r"   r#   r$   r%   )r&   ru   rv   new_mer'   s       r(   rw   zIncludeRole.copy   sj    {D.n\i.j#'#9#9 !--224"// OO OOr)   c                ^   t         t        |          }| j                  r|| j                  j	                         z  }|j                  dg       j                  d| j                  j                                |j                  dg       j                  d| j                  j                         |S )Nansible_parent_role_namesr   ansible_parent_role_paths)	r    r   get_include_paramsr#   get_role_params
setdefaultinsertr,   r%   )r&   vr'   s     r(   r|   zIncludeRole.get_include_params   s    +t79""2244ALL4b9@@DDUDUD^D^D`aLL4b9@@DDUDUD`D`ar)   )NNN)NNNNN)FF)__name__
__module____qualname____doc__rY   BASErb   ri   r^   r   r   r   r   r!   r,   rS   staticmethodr<   rw   r|   __classcell__)r'   s   @r(   r   r   "   s    
 %&DWXIWXJ	!J.J *fdEhlmF 4VZquv4W[rvwG1 f $ $L	 r)   )
__future__r   ansible.constants	constantsrf   ansible.errorsr   ansible.playbook.attributer   ansible.playbook.task_includer   ansible.playbook.roler   ansible.playbook.role.includer   ansible.utils.displayr	   ansible.module_utils.sixr
   ansible.templater   __all__displayr    r)   r(   <module>r      sA   " #  - C 5 & 5 ) 1 $/
)L+ Lr)   