ó oBú]c@sodZddlmZddlmZddlZejeƒZd„Z d d„Z d„Z d d „Z dS( s0gpg.py - Collection of gpg key related functionsiÿÿÿÿ(tlog(tutilNcCsay+tjddd|gdtƒ\}}Wn/tjk r\}tjd||ƒd}nX|S(s*Export gpg key, armoured key gets returnedtgpgs--exports--armourtcaptures&Failed to export armoured key "%s": %sN(RtsubptTruetProcessExecutionErrortLOGtdebugtNone(tkeytarmourt_terror((s1/usr/lib/python2.7/site-packages/cloudinit/gpg.pyt export_armours ic Cs$tjd||ƒdd|d|g}|d kr>g}nd}d }t|ƒ}xÇtr|d7}y1tj|dtƒtjd|||ƒd SWntjk r¸}|}nXy3t|ƒ}tjd |j |ƒt j |ƒWqYt k rt d ||||fƒ‚qYXqYWd S( sÁReceive gpg key from the specified keyserver. Retries are done by default because keyservers can be unreliable. Additionally, there is no way to determine the difference between a non-existant key and a failure. In both cases gpg (at least 2.2.4) exits with status 2 and stderr: "keyserver receive failed: No data" It is assumed that a key provided to cloud-init exists on the keyserver so re-trying makes better sense than failing. @param key: a string key fingerprint (as passed to gpg --recv-keys). @param keyserver: the keyserver to request keys from. @param retries: an iterable of sleep lengths for retries. Use None to indicate no retries.s&Importing key '%s' from keyserver '%s'Rs--keyserver=%ss --recv-keysiiRs/Imported key '%s' from keyserver '%s' on try %dNs6Import failed with exit code %d, will try again in %sss@Failed to import key '%s' from keyserver '%s' after %d tries: %s(RRR titerRRRRtnextt exit_codettimetsleept StopIterationt ValueError( R t keyservertretriestcmdttrynumR tsleepstetnaplen((s1/usr/lib/python2.7/site-packages/cloudinit/gpg.pytrecv_keys4           cCsVy&tjdddd|gdtƒWn)tjk rQ}tjd||ƒnXdS(s0Delete the specified key from the local gpg ringRs--batchs--yess --delete-keysRsFailed delete key "%s": %sN(RRRRRtwarning(R R ((s1/usr/lib/python2.7/site-packages/cloudinit/gpg.pyt delete_keyHs  skeyserver.ubuntu.comcCsrt|ƒ}|snzKy t|d|ƒt|ƒ}Wn$tk r[tjd|ƒ‚nXWdt|ƒXn|S(sget gpg keyid from keyserverRsFailed to obtain gpg key %sN(RRRRt exceptionR(tkeyidRR ((s1/usr/lib/python2.7/site-packages/cloudinit/gpg.pyt getkeybyidQs   (ii( t__doc__t cloudinitRtloggingRRt getLoggert__name__RRRRR"(((s1/usr/lib/python2.7/site-packages/cloudinit/gpg.pyts  *