x[h; UdZddlZddlmZddlmZddlmZmZm Z ddl m Z ddl m Z ddlmZdd lmZd Zd d d dddiZddgedgdZeed<ej,eZdede de deddf dZdZy)z&install and configure landscape clientN)chain) ConfigObj)subp type_utilsutil)Cloud)Config) MetaSchema) PER_INSTANCEz/etc/landscape/client.confclientinfoz.https://landscape.canonical.com/message-systemz#http://landscape.canonical.com/pingz/var/lib/landscape/client) log_levelurlping_url data_path cc_landscapeubuntu landscape)iddistros frequencyactivate_by_schema_keysmetanamecfgcloudargsreturnc  |jdi}t|ts.tdj t j ||sy|jjdgtt|g}tttt|djDcgc]\}}d|j!dd |gc}}} t#j"gd d g t#j"d dg|zycc}}w#t"j$$rZ} | j&dk(rt(j+dn+d| } t-j.t(| t| | Yd} ~ yd} ~ wwxYw)z Basically turn a top level 'landscape' entry with a 'client' dict and render it to ConfigObj format under '[client]' section in /etc/landscape/client.conf rzR'landscape' key existed in config, but not a dictionary type, is a {_type} instead)_typeNzlandscape-clientr z--_-)landscape-config--silentz--is-registered)rcsr#r$rz&Client already registered to LandscapezFailure registering client: )get isinstancedict RuntimeErrorformatrobj_namedistroinstall_packagesLSC_BUILTIN_CFGLSC_CLIENT_CFG_FILElistrsortedmerge_togetheritemsreplacerProcessExecutionError exit_codeLOGwarningrlogexc) rrrr ls_cloudcfg merge_datakv cmd_paramsemsgs ?/usr/lib/python3/dist-packages/cloudinit/config/cc_landscape.pyhandlerC,sp''+r*K kD * $$*F ))+6%+%   LL!!#5"67 J  #":.x8>>@AqaiiS)*+Q/  J + EA3O %z2Z?@  % %+ ;;!  KK@ A1!5C KKS !s# * B+s/!D4DF(AE==Fcti}|D]A}|st|tr|j|(|jt|C|S)zu merge together ConfigObj objects or things that ConfigObj() will take in later entries override earlier )rr(merge)objsrobjs rBr3r3]sN B-C&  c9 % IIcN IIin % & J)__doc__logging itertoolsr configobjr cloudinitrrrcloudinit.cloudrcloudinit.configr cloudinit.config.schemar cloudinit.settingsr r0r/r__annotations__ getLogger__name__r8strr1rCr3rHrBrWs-,,!#.+2 ?90  z +} jg!.+.+6.+%.+t.+.+b rH