HcfG\ddlZddlZddlZddlmZmZddlmZmZm Z ddl m Z m Z m Z mZmZmZmZmZmZddlmZmZmZmZmZmZmZmZddlmZddlm Z ejBejDe#Z$dd d Z%d Z&d Z'd Z(e jRZ*GddZ+de,fdZ-ddZ.de,fdZ/y)N) lru_cachewraps)AnyDictOptional) apt event_logger exceptionsfileshttpmessagessnapsystemutil) APT_NEWS_URLBASE_CONTRACT_URLBASE_LIVEPATCH_URLBASE_SECURITY_URLCONFIG_DEFAULTSCONFIG_FIELD_ENVVAR_ALLOWLISTDEFAULT_CONFIG_FILEDEFAULT_DATA_DIR)user_config_file) safe_loadnametype)availableResourcesresourceEntitlements_unset) http_proxy https_proxyapt_http_proxyapt_https_proxyua_apt_http_proxyua_apt_https_proxyglobal_apt_http_proxyglobal_apt_https_proxyupdate_messaging_timermetering_timerapt_news apt_news_url) contract_urldata_dirfeatureslog_file log_level security_urlsettings_overrides ua_config livepatch_urlc peZdZdZdZdZ d/deeee fdee jdeeddfd Z e d Ze defd Ze defd Ze defd Ze deefdZej&defdZe deefdZej&defdZe deefdZej&defdZe deefdZej&defdZe eddeefdZej&defdZe eddeefdZej&defdZe defdZej&defdZe defdZej&defdZe defd Zej&defd!Ze defd"Zej&defd#Ze defd$Z e j&defd%Z e defd&Z!e!j&defd'Z!e d(Z"e d)Z#e defd*Z$e d+Z%e d,Z&d-Z'd.Z(y)0UAConfig)r$r%)r&r')r"r#Ncfg user_configseriesreturnc~|rd|_||_d|_n1t|_t |j\|_|_|r||_n$ t j j|_d|jvrOt jji|j j|jdd|_||_d|_y#t$rO}tjd|tjdt j|_Yd}~d}~wwxYw)NzError loading user config)exc_infozUsing default config valuesr3T) optional_type_errors_become_null)cfg_pathr7 invalid_keysget_config_path parse_configr8rread ExceptionLOGwarningUserConfigData from_dictto_dictr9_machine_token_file)selfr7r8r9es 1/usr/lib/python3/dist-packages/uaclient/config.py__init__zUAConfig.__init__Ss  DMDH $D +-DM*6t}}*E 'DHd' *D  E#3#?#?#D#D#F  $(( "/>>HHG4##++-G+1FG15 I D      E 7! D 9:#3#B#B#D   Es#C$$ D<-AD77D<c|js>tj|j|jj d|_|jS)Nmachine_token_overlay)rJr MachineTokenFiler-r.getrKs rMmachine_token_filezUAConfig.machine_token_fileysF''','='=  !!"9:(D $'''cB|jjdtS)Nr,)r7rRrrSs rMr,zUAConfig.contract_urlxx||N,=>>rUcB|jjdtS)Nr1)r7rRrrSs rMr1zUAConfig.security_urlrWrUcB|jjdtS)Nr4)r7rRrrSs rMr4zUAConfig.livepatch_urlsxx||O-?@@rUc.|jjSN)r8r rSs rMr zUAConfig.http_proxys***rUvaluecx||j_tjj|jyr[)r8r rwriterKr\s rMr zUAConfig.http_proxys*&+#$$**4+;+;Return a dictionary of any features provided in uaclient.conf.r.zDUnexpected uaclient.conf features value. Expected dict, but found %s)r7rR isinstancedictrErF)rKr.s rMr.zUAConfig.features?sC88<< + (D) 3  rUc.|jjS)zAReturn the machine-token if cached in the machine token response.)rT machine_tokenrSs rMrzUAConfig.machine_tokenNs&&444rUcPdD]S}t||}|tjd|(t|tr|dks>t j |||js |jr,|js |jrt jtjd|jtjtjd|jtjtjd|jtjtjd|jtjtjd|j tj"tjd|j$tj&|js |jrDt)j*|j|jt(j,j.n[|js |jrCt)j*|j|jt(j,j0g}t3j4rt3j6|j |j$|j s#t3j8t2j:s/|j$s4t3j8t2j<r|j?dddl m!}dd l"m#}dd l$m%}||}|jM\}} ||jNk(r|jQ|j |j$|j s|j9|j:s'|j$s,|j9|j<r|j?d tS|dkDr;d jU|} tWtXjZj]| yy)N)r(r)z1No config set for %s, default value will be used.rkeyr\r httpsr) livepatch)ApplicationStatus)LivepatchEntitlementrz, )services)/rrEdebugrintr InvalidPosIntConfigValuer&r'r$r%InvalidProxyCombinationConfigr validate_proxyPROXY_VALIDATION_APT_HTTP_URLPROXY_VALIDATION_APT_HTTPS_URLr PROXY_VALIDATION_SNAP_HTTP_URLr!PROXY_VALIDATION_SNAP_HTTPS_URLrsetup_apt_proxy AptProxyScopeGLOBALUACLIENTris_snapd_installedconfigure_snap_proxyget_config_option_valueHTTP_PROXY_OPTIONHTTPS_PROXY_OPTIONappenduaclientr(uaclient.entitlements.entitlement_statusruaclient.entitlements.livepatchrapplication_statusENABLEDconfigure_livepatch_proxylenjoinprintr !PROXY_DETECTED_BUT_NOT_CONFIGUREDrn) rKpropr\services_with_proxiesrrr livepatch_entlivepatch_status_rs rMprocess_configzUAConfig.process_configSsN DD$'E} G s+uqy 99E   & &$*E*E  " "d&=&=::< <    & &  . .    ' '  / /  D**D,N,N     # #  / /  DOOT%H%H   T%%t'K'K   % %)D)D   **++!!((   # #t'>'>   &&''!!**  !#  " " $  % %doot7G7G HOO001G1GH$$001H1HI%,,V4&NH,T2 +>>@! 088 8  / /!1!1 OO55//$$5500&,,[9 $ % )yy!67H ::AA%B  *rUcB|j0t|jD]}tjd|d|jvrUtjdtjdtjdtjdyy)Nz&Ignoring invalid uaclient.conf key: %sr3z)legacy "ua_config" found in uaclient.confzPlease do the following:z 1. run `sudo pro config set field=value` for each field/value pair present under "ua_config" in /etc/ubuntu-advantage/uaclient.confzQ 2. Delete "ua_config" and all sub-fields in /etc/ubuntu-advantage/uaclient.conf)r@sortedrErFr7)rK invalid_keys rMwarn_about_invalid_keysz UAConfig.warn_about_invalid_keyss    (%d&7&78   $  $  $ L((?c???c??AsAA+HSM++===,Xc],,===3HSM33===28C=22=s==t x}  !!=3="= t   ""=C=#=  ""=C=#= =C==d  =$=!=3%%=s=&=$ __=d==c =#==::!!E#EE  55eNrUr6r:cTtjjd}|r|StS)z4Get config path to be used when loading config dict.UA_CONFIG_FILE)osenvironrRr) config_files rMrArAs$**..!12K rUc`tjt}|s t}tj d|t j j|r-|jttj|i}t jjD]\}}|j}|jds(|dd}|jdr|dd}|j!drTt j j|rttj|}nt#j$|d |vr||i|d <||d |<|t&vs|||<|j|d |vr%t j j)|d |d <d D]4}t+j,||rt#j.||| t1|j3j5t6}|D]}|j9|||fS) aParse known Pro config file Attempt to find configuration in cwd and fallback to DEFAULT_CONFIG_FILE. Any missing configuration keys will be set to CONFIG_DEFAULTS. Values are overridden by any environment variable with prefix 'UA_'. @param config_path: Fullpath to pro configfile. If unspecified, use DEFAULT_CONFIG_FILE. @return: Dict of configuration values. z%Using client configuration file at %sua_N features_ yaml)filepathr.r-)r,r1r)copyrrArErrpathexistsupdaterr load_fileritemslower startswithendswithr InvalidFeatureYamlConfigValuer expanduserr is_service_urlInvalidURLConfigValuesetkeys differenceVALID_UA_CONFIG_KEYSpop) config_pathr7env_keysrr\ field_namefeature_field_namer@rs rMrBrBs ))O $C %' II5{C ww~~k" 9V--k:;<Hjj&&(- Uiik >>% QRJ$$[1%/^" >>&)ww~~e, )&*:*:5*A B(FF%*S('95&AC O:?C O$6755',$5-6JJxS'',,S_=J/L""3s8,22s#c(K KLsxxz?--.BCL#     rU override_keycfd}|S)aDecorator used to override function return by config settings. To identify if we should override the function return, we check if the config object has the expected override key, we use it has, we will use the key value as the function return. Otherwise we will call the function normally. @param override_key: key to be looked for in the settings_override entry in the config dict. If that key is present, we will return its value as the function return. c2tfd}|S)Nct\}}|jdijt}|tk7r dk(r|dfS|SS)Nr2 cloud_type)rBrRUNSET_SETTINGS_OVERRIDE_KEY)r7rvalue_overridefrs rMnew_fz>apply_config_settings_override..wrapper..new_f&s[!^FC WW%92>BB9N!<<</*D11%%3JrU)r)rrrs` rMwrapperz/apply_config_settings_override..wrapper%s q    rUr)rrs` rMapply_config_settings_overriders" NrUr[)0rrr functoolsrrtypingrrrrrr r r r r rrruaclient.defaultsrrrrrrrruaclient.filesr uaclient.yamlr getLoggerreplace_top_level_logger_namerrEMERGE_ID_KEY_MAPrUA_CONFIGURABLE_KEYSrget_event_loggerrkr6rrArBrrrUrMrs  &&&      ,#g:::8DE!"'   & %%'EEP <~rU