a ì)gœ'ã@s:ddlmZmZmZeZddlZddlZddlZddl m Z m Z ddl m Z ddlmZddlmZddlmZmZddlmZmZdd lmZmZdd lmZed ƒZd Zda d e !¡dd…Z"de #de¡dd…Z$dd„Z%dd„Z&d$dd„Z'd%dd„Z(dd„Z)dd„Z*dd „Z+d!d"„Z,e�r,e+Z-ne,Z-d#e-_.dS)&é)Úabsolute_importÚdivisionÚprint_functionN)ÚMutableMappingÚMutableSequence)Údumps)Ú constants)Úcontext)Ú AnsibleErrorÚAnsibleOptionsError)Ú string_typesÚPY3)Ú to_nativeÚto_text)Úparse_kv)ÚTrueÚFalseÚNonelú%012xé z%08xéc CsHtd7ad tdd…tdd…tdd…tdd…dtdd…g¡S)Néú-rrrér)Úcur_idÚjoinÚnode_macÚ random_int©rrú6/usr/lib/python3.9/site-packages/ansible/utils/vars.pyÚ get_unique_id-s    ûr c Cs‚t|tƒrt|tƒs~g}||fD]8}z| t|ƒ¡Wq tyV| t|ƒ¡Yq 0q td |jj |jj |d|d¡ƒ‚dS)zå Internal convenience function to ensure arguments are MutableMappings This checks that all arguments are MutableMappings or raises an error :raises AnsibleError: if one of the arguments is not a MutableMapping zQfailed to combine variables, expected dicts but got a '{0}' and a '{1}': {2} {3}rrN) Ú isinstancerÚappendrÚ Exceptionrr ÚformatÚ __class__Ú__name__)ÚaÚbZmyvarsÚxrrrÚ_validate_mutable_mappings9s   ÿr*cCs:|s|dur tjdkr t||ƒSt||ƒ||B}|SdS)zV Return a copy of dictionaries of variables based on configured hash behavior NÚmerge)ÚCZDEFAULT_HASH_BEHAVIOURÚ merge_hashr*)r'r(r+ÚresultrrrÚ combine_varsQs   r/TÚreplacecsf|dvrtdƒ‚t||ƒ|iks*||kr2| ¡S| ¡}|sT|dkrT| |¡|S| ¡D�]\}‰||vrxˆ||<q\||}t|tƒr¶tˆtƒr¶|r¬t|ˆ||ƒ||<q\ˆ||<q\t|tƒ�rXtˆtƒ�rX|dkràˆ||<q\|dkrö|ˆ||<q\|dk�rˆ|||<q\|dk�r4‡fdd„|Dƒˆ||<q\|d kr\ˆ‡fd d„|Dƒ||<q\ˆ||<q\|S) z› Return a new dictionary result of the merges of y into x, so that keys from y take precedence over keys from x. (x and y aren't modified) )r0Zkeepr"ÚprependÚ append_rpÚ prepend_rpzzmerge_hash: 'list_merge' argument can only be equal to 'replace', 'keep', 'append', 'prepend', 'append_rp' or 'prepend_rp'r0r"r1r2csg|]}|ˆvr|‘qSrr©Ú.0Úz©Zy_valuerrÚ ¨ózmerge_hash..r3csg|]}|ˆvr|‘qSrrr4r7rrr8«r9) r r*ÚcopyÚupdateÚitemsr!rr-r)r)ÚyÚ recursiveZ list_mergeÚkeyZx_valuerr7rr-_sB       r-cCs¶i}tj dtƒ¡D]œ}d}t|dd�}|dus|s6q| d¡rT| |dd…¡}n:|ddvrntd|ƒ‚n |dd vr†| |¡}nt |ƒ}t |t ƒr¤t ||ƒ}qtd |ƒ‚q|S) NÚ extra_varsZsurrogate_or_strict)Úerrorsú@rr)ú/Ú.z0Please prepend extra_vars filename '%s' with '@')ú[Ú{zJInvalid extra vars data supplied. '%s' could not be made into a dictionary) r ÚCLIARGSÚgetÚtuplerÚ startswithZload_from_filer Úloadrr!rr/)Úloaderr@Zextra_vars_optÚdatarrrÚload_extra_vars·s"        rNc Cs`|dur d}d|i}ddddddd d d œ}| ¡D](\}}tj |¡}|dur2||d |<q2|S) NZUnknownZansible_versionZ check_modeZ diff_modeÚforksZinventory_sourcesÚ skip_tagsÚlimitZrun_tagsÚ verbosity)ÚcheckÚdiffrOZ inventoryrPZsubsetÚtagsrRz ansible_%s)r<r rGrH)ÚversionZ options_varsÚattrsÚattrÚaliasÚoptrrrÚload_options_varsÓs"ù  r[cCsPt|tƒsdSz| d¡Wnty0YdS0| ¡s>dSt |¡rLdSdS)NFÚasciiT)r!r ÚencodeÚUnicodeEncodeErrorÚ isidentifierÚkeywordÚ iskeyword©ÚidentrrrÚ_isidentifier_PY3és   rdcCs@t|tƒsdS|sdStj |¡r&dSt |¡s8|tvrs:       X