#Tc@sddlZddlZddlZddlZddlZddlmZejZddl j j Z ddl j jZddlj jZddlj jZddljZddljZddljZddljZddljZddl j!Z!ddl"j#Z#ddlm$Z$m%Z%ddl&m'Z'ddl(m)Z)dZ*dZ+dZ,d Z-d Z.d Z/d Z0id e*6e1e06d e+6e2e,6e1e-6e2e.6ej3e%6e1e/6Z4iidd 6e*6idd 6e+6Z5dZ6iej7j8ej7j9ddde66ej7j8dddd6Z:dddZ;dZ<dZ=dZ>ie?d6Z@dZAdejBfdYZCdeDfd YZEd!eDfd"YZFdS(#iN(tglobal_settings(t DictPropertytSIGNATURE_POLICY(t DebugValues(tTransportFailuress be-policyscontent-update-policysflush-content-cache-on-successsmirror-discoverys send-uuidsuse-system-reposcheck-certificate-revocationtdefaults create-backuptalwayssca-pathtetctopenssltcertstCAstrust-anchor-directoryii<t cfg_cachet disabled_authtDEFAULTtNoneit ImageConfigc(Bs'eZdZiejddgejddejdgejddejdejdejdd e ejd d e ejd d e eje d e e eje d e e gejd dgejd dejddeejddeejdejddeejddeejddeejddeejddeejdddgd ddeejddeejddeejdd ddeejdd eedeejddeejd deejd!deejd"deggd#6ejddejdgejddejdejdejed$d d%d&d'gd e eejed$d d(d'gd e eeje d e e ejed e eeje d e e ejed$eejjegd eeje d e e eje!d e"e!ejd)d eejd*eje#d e e#ejd+gejd,dej$d-d.ejgejd/dej$d-d.ejgejd0dej$d1ej$d2d.ej%ej$d3d.ejd$d4d5d6d7gd d6ej$d8d.ej%ej$d9d.ejd$d4d5d6d7gd d6gejd dgejd dejddeejddeejdejd:ejddeejddeej&d;deejddeejd<deej&d=deejddeejddeejd>ed$eejjegd eejd?ejd@ejdAejdBejdCejdddgd ddeejddeejddeejdd ddeejdd eedeejddeejd deejd!deejd"degejdDdeje'j(deeje'j)deeje'j*d e ggdE6Z+e,j-d_e dFZ/dGZ0dHZ1dIZ2dJZ3dKZ4dLZ5dMZ6dNZ7dOZ8dPZ9dQZ:dRZ;dSZ<e,j-dTZ=dUZ>dVZ?e dWZ@dXZAdYZBdZZCd[ZDeEe3e4e5e7e8e9e6d\d]d^eDZFRS(`sAn ImageConfig object is a collection of configuration information: URLs, publishers, properties, etc. that allow an Image to operate.tfiltert propertiestimagetversiontpropertyspublisher-search-orderspreferred-authoritysdisplay-coprightsRsrequire-optionals pursue-latesttvariants ^authority_.*taliast value_maptprefixtdisabledtuuidtmirrorstorigintssl_certtssl_keysrepo.collection_typetcoret supplementalsrepo.descriptionsrepo.legal_uriss repo.namespackage repositorysrepo.refresh_secondssrepo.registeredsrepo.registration_urisrepo.related_urissrepo.sort_policyitalloweds always-news create-backups when-requiredRstrust-anchor-directoryssignature-required-namest dehydratedtfacets ^facet\..*t prop_typetinherited_facett mediatorss ^[A-Za-z0-9\-]+\.implementation$s(^[A-Za-z0-9\-]+\.implementation-version$s'^[A-Za-z0-9\-]+\.implementation-source$tsitetvendortlocaltsystems^[A-Za-z0-9\-]+\.version$s ^[A-Za-z0-9\-]+\.version-source$tstickyt mirror_infotoriginst origin_infos property.%ss!property.signature-required-namestintermediate_certstapproved_ca_certstrevoked_ca_certstsigning_ca_certss ^linked_.*ic Cs||_i|_t|_tj|_i|_tj |_ i|_ ||_ t jj||d|jd|d|dS(s 'write_sysrepo_proxy' is a boolean, set to 'True' if this ImageConfig should write the special publisher.SYSREPO_PROXY token to the backing FileConfig in place of any actual proxies used at runtime.t definitionst overridesRN(t_ImageConfig__imgroott_ImageConfig__publisherstFalset_ImageConfig__validateR#tFacetstfacetsR&RtVariantstvariantstlinked_childrentwrite_sysrepo_proxytcfgt FileConfigt__init__t_ImageConfig__defs(tselft cfgpathnametimgrootR4Rt sysrepo_proxy((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyRAs      cCsd|j|jfS(Ns%s %s(R6RB(RC((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyt__str__&scCs|j|=dS(s6External functional interface - use property interfaceN(t publishers(RCR((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pytremove_publisher)scCs|jdd}|j|y|j|}Wn tk rTtj|nX|rr|j|d|n|j|||jdd|dS(sChange the publisher search order by moving the publisher 'being_moved' relative to the publisher 'staying put.' The boolean 'after' determins whether 'being_moved' is placed before or after 'staying_put'.Rspublisher-search-orderiN(t get_propertytremovetindext ValueErrortapxtMoveRelativeToUnknowntinsertt set_property(RCt being_movedt staying_puttaftertsotind((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pytchange_publisher_search_order-s  cCs |j|S(s)Accessor method for publishers dictionary(R6(RCR((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyt__get_publisher@scCsE|jdd}||kr4|jdd|n||j|t|_tjj|d||j}|jj|jdixB|jdij D](\}}||j t t j |}|j,d$r|t-d$|j.kr|j|qqWxF|j.j D]5\} }!|!t/kr9qn|j|d%| |!qWq{Wt0j1j2t0j1j3|j4rt0j1j5t0j1j3|j4t6}"yt7j8|"WnZt9k r }#|#j:t:j;kr t<j=|#}$t)|$t<j> s| r|$qq nXg}%xt?j@tAj@D]n}&|j+d&}y|jB|&}'Wntjk riq(nX|'jCt/kr(|%j!|&|j|&q(q(Wz;ytjDjE|Wn t<j>k r|sqnXWd'x!|%D]}&|jd&|&t/qWXnd'S(+sWrite the image configuration.RR#tR%R&R{s linked_.*s linked_%ss authority_%sRRR0R1RR+RRRR.R,turitproxyRR-Rtcollection_typet descriptiont legal_urisRwtrefresh_secondst registeredtregistration_urit related_urist sort_policysrepo.%ss property.s property.%sRN(saliassprefixsapproved_ca_certssrevoked_ca_certssdisabledssticky(soriginssmirrors( Rs descriptionRsnameRRRRR(FR^R?R_R<RQR:R)Rtquotet inheritedR&RcR~RRRR=RkRRt PROP_PATHt PROP_RECURSER6RtgetattrRtUnknownPropertyErrort repositoryR-RRRtproxiestappendRR>t publishert SYSREPO_PROXYt client_uuidRtaddt isinstancetlistt get_sectionRtlenRRtRRRRRRRtportableRKtEnvironmentErrorterrnotENOENTRNt_convert_errortPermissionsExceptionRuReRpRJRR@R((RCR|tfRtmvaluesRtmvaluetpnameRRRRRRRRRvRstrepotptot repouri_listt prop_nametplisttrtpuriR[Rgt unique_pvaltitemtcfg_keytsecobjtkeytvaltda_pathtetexcRRwtpropobj((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyR's$ $ $  %                   %     "   !     cCst}x>tjtjtjgD]$}||kr8dS||||sRRRRRRR+tpropsR1R0(scollection_types sort_policy(RRRRRcRRRtRRktREPO_REFRESH_SECONDS_DEFAULTRt Repositoryt add_origint add_mirrorRtProxyURIRtanyt SSL_SCHEMESt RepositoryURIt PublisherRRQ("RCtsnametsec_idxR-RRR.R,t repouri_infoRstorigRturi_infoRRRRRt repo_dataRRRtattrRRRRturi_listtinfo_mapt repo_add_funcRRtrepouriR((Rs</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyR3s            "         cCsqy|jdt}Wntjk r-dSX|dkrm|jdd}|smtjtdqmndS(s5Check that properties are consistent with each other.RNs require-namesssignature-required-namessKAt least one name must be provided for the signature-required-names policy.(RJRR?tPropertyConfigErrorRNtInvalidPropertyValuet_(RCtpolvaltsignames((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyt__validate_propertiess    cCs|jj||S(s"Support getdefault() on properties(R6R(RCRwR((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyt__publisher_getdefaultstdocs6A dict mapping publisher prefixes to publisher objectst fgetdefaultN(Gt__name__t __module__t__doc__R?tPropertySectiontPropInttPropListt PropPublishertPropBoolRR7tFLUSH_CONTENT_CACHERpt SEND_UUIDtPropertySectionTemplatet _val_map_nonetPropUUIDtPropPubURIListt PropPubURItPropertyt PropDefinedRkRt BE_POLICYtCONTENT_UPDATE_POLICYtMIRROR_DISCOVERYRRt sigpolicytPolicytpoliciesRttUSE_SYSTEM_REPORRutCHECK_CERTIFICATE_REVOCATIONtPropertyTemplatet PropVersiontPropPubURIDictionaryListRRRRRBtmisct EmptyDictRRARGRIRWt_ImageConfig__get_publishert_ImageConfig__set_publishert_ImageConfig__del_publishert_ImageConfig__publisher_itert!_ImageConfig__publisher_iteritemst_ImageConfig__publisher_keyst_ImageConfig__publisher_valuesRoRlRJR}RQRRRRRt"_ImageConfig__publisher_getdefaultRRH(((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyResJ                                                                  %            q  '     tNullSystemPublishercBsVeZdZddedfZdZdZdZdZdZ d Z RS( s[Dummy system publisher object for use when an image doesn't use a system publisher.spublisher-search-ordersproperty.proxied-urlsssignature-required-namescCsIi|_tg|jD]}|gf^q|_tt|jtsN(ReR=tallR<RR>(RCRR((RCs</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyRs   ( RRRRR;RARRJRQR>R(((s</usr/lib/python2.7/vendor-packages/pkg/client/imageconfig.pyR:s     t BlendedConfigc BseZdZdZedZdZdZdZdZ dZ dZ d Z d Z d Zd Zd ZdZedZedZdZdZeeeZdZdZeeeZdZdZeeeZdZdZdZ e!j"dZ#dZ$dZ%dZ&dZ'dZ(d Z)d!Z*e+e$e%e&e(e)e*e'd"d#Z,RS($sgClass which handles combining the system repository configuration with the image configuration.cCs||_||_d|_tjj|d}tjj|rTt|d}n t }t df|_ t |_ |ry9tjd|_|jjdsd|j|_nWntk rny(tjdd}tjdd} Wnitjk rW} y.tjdd }d }tjdd } WqXtjk rS} tjqXXnXd || f|_nXtj|jd t } | jsty|j| \} } Wn#tk r||_t|_ qXywytj|Wn_t k rM} | j!t!j"krGt#|d}|j$WdQXt|d|_qNnXWnIt k r} | j!t!j%t!j&fkrt |_t|_ qnXt|ddt |_x>| D]6}|j' std|j(||jj)|j(sn        " x@