FRTc@sIdZddlZddlmZddlmZmZddlm Z ddl m Z m Z m Z mZddlmZddlmZdd lmZddlZddlZdd lmZdd lmZdd lmZmZd ddddddgZdefdYZ defdYZ!de fdYZ"dS(s) High-level abstraction of an EC2 server iN(tIObject(tBotoConfigPathtConfig(tModel(tStringPropertytIntegerPropertytBooleanPropertytCalculatedProperty(tpropget(tZone(tKeyPair(tclosing(tEC2ResponseError(tsixtStringIOsm1.smallsm1.larges m1.xlarges c1.mediums c1.xlarges m2.2xlarges m2.4xlargetBundlerc BsPeZddZdZdZdZdddddddedZRS(trootcCs;ddlm}||_||_||d||_dS(Ni(t SSHClienttuname(tboto.manage.cmdshellRtserverRt ssh_client(tselfRRR((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/server.pyt__init__-s  cCsdGH|jjtjj|\}}d||_|jj||jtjj|\}}d||_|jj||jdGHdS(Ns5 copying cert and pk over to /mnt directory on servers/mnt/%ss ...complete!(Rt open_sftptostpathtsplittremote_key_filetput_filetremote_cert_file(Rtkey_filet cert_fileRtname((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/server.pyt copy_x5093s   cCsd}|jdkrd}n|d7}|d|j|jf7}|d|jjj7}|d|7}|d|7}|d 7}|jjd ks|jjd kr|d 7}n |d 7}|S(NtRssudo sec2-bundle-vol s -c %s -k %s s-u %s s-p %s s-s %d s-d /mnt sm1.smalls c1.mediums-r i386s -r x86_64(RRRRt _reservationtowner_idt instance_type(Rtprefixtsizetssh_keytcommand((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/server.pyt bundle_image>s   $  cCsvd}|jdkrd}n|d7}|d|7}|d|7}|d|jjj7}|d|jjj7}|S( NR#Rssudo sec2-upload-bundle s-m /mnt/%s.manifest.xml s-b %s s-a %s s-s %s (RRtec2taws_access_key_idtaws_secret_access_key(RtbucketR'R)R*((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/server.pyt upload_bundleNs  c Cst} |s!| jd}n|s9| jd}n|sQ| jd}n|si| jd}n|s| jd}n|s|jj}n|j|||st}n|jdt |jd|r|jdn|j|j ||||jd |j|j ||||jd |jd t |jd |j } d GH| GH|j j| } d | dGHd | dGHdGHdGH|jjjd|dd||f|_|jS(NsName of S3 bucketsPrefix for AMI filesPath to RSA private key filesPath to RSA public cert filesSize (in MB) of bundled imagessudo mv %s /mnt/boto.cfg; s0mv ~/.ssh/authorized_keys /mnt/authorized_keys; s history -c; s; ssudo mv /mnt/boto.cfg %s; s.mv /mnt/authorized_keys ~/.ssh/authorized_keyss3running the following command on the remote server:s %siis ...complete!sregistering image...R!timage_locations%s/%s.manifest.xml(Rt get_stringt get_filenametget_intRtget_ssh_key_fileR"RtwriteRR+R0tgetvalueRtrunR,tregister_imagetimage_id( RR/R'RR R(R)tfpt clear_historytiobjectR*tt((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/server.pytbundleYsH         +N( t__name__t __module__RR"R+R0tNonetTrueR?(((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/server.pyR+s    tCommandLineGettercBskeZdZdZdZdZdZdZdZdZ dZ d Z d Z RS( cCsUg}xH|jjD]7}|jjddkr|j|j|fqqW|S(Ntpyamii(R,tget_all_imagestlocationtfindtappend(Rtmy_amistami((s?/opt/freeware/lib/python2.7/site-packages/boto/manage/server.pyt get_ami_lists cCs|jdd}t|tr@tjj|}||d|jdds:|jjd}tj||d|jdds:|jjd}tj||ds$ "  Ue