a )g@sddlmZmZmZeZddlmZddlm Z ddl m Z ddl mZddlmZddlmZddlmZdd lmZdd lmZdd lmZdd lmZd gZeZGdd d eZdS))absolute_importdivisionprint_function)basenameN)AnsibleParserError)NonInheritableFieldAttribute)Block) TaskInclude)Role) RoleInclude)Display) string_types)Templar IncludeRolecseZdZdZedZedZedZeeBeBZe dddddZ e dddddZ e dddddZ dfd d Z d d ZdddZedddZdfdd ZfddZZS)rz A Role include is derived from a regular role to handle the special circumstances related to the `- include_role: ...` )namerole)Z tasks_fromZ vars_fromZ defaults_fromZ handlers_from)applypublicallow_duplicatesrolespec_validateboolT)ZisadefaultZprivateZalways_post_validateFNcs2tt|j|||di|_||_d|_d|_dS)N)blockr task_include)superr__init__ _from_files _parent_role _role_name _role_path)selfrrr __class__A/usr/lib/python3.9/site-packages/ansible/playbook/role_include.pyr;s zIncludeRole.__init__cCs|jpd|j|jfS)z return the name of the task z%s : %s)ractionr)r r#r#r$get_nameDszIncludeRole.get_namecCsB|dur|jj}n|}tj|j||||jd}|j|jO_|durV|j||d}ni}t||d}| |j }t j|||j |d|j d} |j| j_|js|jr|j| | j|_|j sg} nt|j j} | |j |} | j| _| j|| d} | D]} | | _| j| _q| j|d}|D] }| |_q |j||_| |fS)N)playvariable_managerloaderZcollection_list)r'Ztask)r)Z variablesT)Z parent_role from_filesZ from_includeZvalidate)r' dep_chain)r')Z_parentZ_playr loadr collectionsvarsZget_varsrtemplaterr rrrZ _metadatastatically_loadedrZrolesappendrlistZ_parentsZbuild_parent_blockcompileZget_handler_blockshandlers)r r'r(r)ZmyplayZriZavailable_variablesZtemplarr*Z actual_roler+Zp_blockZblocksbr4hr#r#r$get_block_listHs@            zIncludeRole.get_block_listcCst|||dj|||d}t|j}|jd|jd|_|jdur\td|j|dd|jvr|jt j vrtd|j|d| tj }|rtd |jd t|f|d|tjD]F} | d } |j| } t| tstd | t| ft| |j| <q|jd i} | r>|jt j vr>td|j|dn t| ts^tdt| |d|tjD]} t|| |j| qj|S)N)r)r(r)rrz"'name' is a required field for %s.)objrzInvalid options for %s: publiczInvalid options for %s: %s,Z_fromz+Expected a string for %s but got %s insteadrzInvalid options for %s: applyz,Expected a dict for apply but got %s instead)rZ load_data frozensetargskeysgetrrr%CZ_ACTION_INCLUDE_ROLE difference VALID_ARGSjoinr2 intersection FROM_ARGS removesuffix isinstancer typerrdict OTHER_ARGSsetattr)datarrrr(r)ZirZ my_arg_namesZbad_optskeyZfrom_keyZ args_valueZ apply_attrsoptionr#r#r$r,s0       zIncludeRole.loadcsDtt|j||d}|j|_|j|_|j|_|j|_|j|_|S)N)exclude_parent exclude_tasks)rrcopyr0rrrr)r rMrNZnew_mer!r#r$rOs zIncludeRole.copycsXtt|}|jrT||jO}|dgd|j|dgd|jj|S)NZansible_parent_role_namesrZansible_parent_role_paths) rrget_include_paramsrZget_role_params setdefaultinsertr&r)r vr!r#r$rPs zIncludeRole.get_include_params)NNN)NNN)NNNNN)FF)__name__ __module__ __qualname____doc__r:ZBASErCrHr@rrrrrr&r7 staticmethodr,rOrP __classcell__r#r#r!r$r's   7 ( ) Z __future__rrrrFZ __metaclass__Zos.pathrZansible.constantsZ constantsr>Zansible.errorsrZansible.playbook.attributerZansible.playbook.blockrZansible.playbook.task_includer Zansible.playbook.roler Zansible.playbook.role.includer Zansible.utils.displayr Zansible.module_utils.sixr Zansible.templater__all__Zdisplayrr#r#r#r$s