Xc@sddlZddlZddlmZddlZddlZddlmZddl Z ddl Z ddl m Z ddlZ ddlmZmZmZddlmZddlmZddlmZddlZddlZdd lmZdd lmZdd l m!Z!d efd YZ"deefdYZ#de$fdYZ%e%Z&e'e'dZ(dZ)dS(iN(t itemgetter(tTemplate(tArg(t ArgumentErrort AuthErrort ClientError(tTabifyingMixin(tAWSQueryRequest(t BaseService(t Euca2ools(tAWSError(tadd_fake_region_nametEC2cBsVeZdZdZdZdZdZedddd d d gZd Z d Z RS(tec2sElastic compute cloud services 2015-10-01tEUCA_DEFAULT_REGIONtAWS_DEFAULT_REGIONtEC2_URLs-Us--urltmetavartURLthelpscompute service endpoint URLcCs!tjjj|t|dS(N(trequestbuildertserviceRt configureR (tself((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyR;scCst|dS(N(R (Rtresponse((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pythandle_http_error@s(RR( t__name__t __module__tNAMEt DESCRIPTIONt API_VERSIONt REGION_ENVVARt URL_ENVVARRtARGSRR(((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyR 1s  t EC2RequestcBseZeZeZejjj Z dZ dZ dZ dZdZdZdZdZdZd Zd Zd Zd Zd ZdZdZdZdZeddZdZ dZ!dZ"dZ#dZ$dZ%dZ&RS(tPOSTcKstj||dS(N(Rt__init__(Rtkwargs((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyR$KscCsBtj|}|jd|||jd|jdgGHdS(NtTAGtkeytvalue(tRESOURCE_TYPE_MAPtlookupttabifytget(Rt resource_tagt resource_idt resource_type((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_resource_tagNscCsd|d|jdg}g|dD]9}|jdp]|jdp]|jdp]d^q'}|jd j||j|GHx<t|jd pgd td D]}|j|qWdS( Nt RESERVATIONt reservationIdtownerIdtgroupSett groupNametgroupIdtentryts, t instancesSetR't launchTime(R,tappendtjoinR+tsortedRtprint_instance(Rt reservationtres_linetgroupt group_idstinstance((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_reservationSs Gc Csdg}x0ddddgD]}|j|j|qW|j|jdijd|j|jd|j|jd |jd jg|jd gD]}|d ^q|j|jd |j|jd|j|jdijd|j|jd|j|jd|j|jd|jdr|jd|djdn |jd|j|jd|j|jd|j|jd|j|jd|j|jd|j|jd|j|jd|jd|j|jdijd|j|jd|j|jd |j|jd!|jd jg|jd"gD]}|d#^q|j|jdijd$|j|jd%|j|jd&ijd'|j|jd(|j|GHx'|jd)gD]}|j|qeWx'|jd*gD]}|j|qWx3|jd+gD]}|j||jdqWdS(,NtINSTANCEt instanceIdtimageIdtdnsNametprivateDnsNamet instanceStatetnametkeyNametamiLaunchIndext,t productCodest productCodet instanceTypeR:t placementtavailabilityZonetkernelIdt ramdiskIdtplatformt monitorings monitoring-tstatet ipAddresstprivateIpAddresstvpcIdtsubnetIdtrootDeviceTypetinstanceLifecycletshowInstanceRequestIdR5tvirtualizationTypet hypervisort clientTokenR4R6ttenancyt ebsOptimizedtiamInstanceProfiletarnt architecturetblockDeviceMappingtnetworkInterfaceSetttagSet(R;R,R<tNoneR+tprint_blockdevicetprint_interfaceR0( RRCt instance_lineR'tcodeRAtblockdevtnicttag((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyR>`sX "*    "*""c Cs|jd|jd|jdijd|jdijd|jdijd|jdijd|jdijdfGHdS( Nt BLOCKDEVICEt deviceNametebstvolumeIdt attachTimetdeleteOnTerminationt volumeTypetiops(R+R,(RRp((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyRls c Cs|jdr>|jdd|jd|jdfGHnq|jdpPi}|jdd|jd|jd|jd|jd |jd |jd fGHdS( Nt virtualNametBLOCKDEVICEMAPPINGt EPHEMERALRtRutEBSt snapshotIdt volumeSizeRxRyRz(R,R+(RtmappingRu((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_blockdevice_mappings     cCsQ|jd|jd|jd|jd|jd|jdgGHdS(Nt ATTACHMENTRvRFtdevicetstatusRw(R+R,(Rt attachment((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_attachments    c Cs|jd|jd|jd|jd|jd|jd|jdfGHx6|jdpngD]}|j||jdqoWdS( NtVPCR[RXt cidrBlockt dhcpOptionsIdtinstanceTenancyt isDefaultRj(R+R,R0(RtvpcRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyt print_vpcs ! cCs|jd|jdfGHxF|jdp2gD]/}|jd|jd|jdfGHq3Wx6|jdp{gD]}|j||jdq|WdS(NtINTERNETGATEWAYtinternetGatewayIdt attachmentSetRR[RXRj(R+R,R0(RtigwRRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_internet_gateways c Cs|jd|jd|jd|jd|jd|jd|jd|jd|jd f GHx^|jd pgD]G}|jd |jd |jd |jd|jdfGHqWdS(Nt NATGATEWAYt natGatewayIdRXR\R[t failureCodetfailureMessaget createTimet deleteTimetnatGatewayAddressSettNATGATEWAYADDRESSESt allocationIdtnetworkInterfaceIdtpublicIpt privateIp(R+R,(Rtnatgwt address_set((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_nat_gateways      c Cs0|jdpi}|jd|jd|jddj|jd|jdfGH|jdpqi}|jd |jd |jd |jd fGH|jd pi}|jd|jd |jd |jd fGHx6|jdpgD]}|j||jdq WdS(NRtVPCPEERINGCONNECTIONtvpcPeeringConnectionIdtexpirationTimes{0}: {1}RotmessagetrequesterVpcInfotREQUESTERVPCINFOR[RR3taccepterVpcInfotACCEPTERVPCINFORj(R,R+tformatR0(RtpcxRt requestertaccepterRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_peering_connections     c Cs|jd|jd|jd|jd|jd|jd|jd|jd|jd f GHx6|jd pgD]}|j||jdqWdS( NtSUBNETR\RXR[RtavailableIpAddressCountRSt defaultForAztmapPublicIpOnLaunchRj(R+R,R0(RtsubnetRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyt print_subnets    c CsP|jdjdkr$d}nd}|jd|jd|jd|fGHxq|jdpkgD]Z}|jdjdkrd}nd }|jd }id d 6d d6dd6dd6dd6}y"|jt|t|}Wntk r nXd|krO|jdijd}|jdijd}n6|jdijd}|jdijd}|jd||jd|jd|jd|||fGHqlWxF|jdpgD]/} |jd | jd!| jd"fGHqWx6|jd#p(gD]} |j| |jdq)WdS($NtdefaultttrueR8t NETWORKACLt networkAclIdR[tentrySettegresstingresstprotocoltalliticmpittcpitudpitsctpit icmpTypeCodeRottypet portRangetfromttotENTRYt ruleNumbert ruleActionRtassociationSett ASSOCIATIONtnetworkAclAssociationIdR\Rj(R,tlowerR+tintt ValueErrorR0( RtaclRR7t directionRtport_mapt from_porttto_porttassocRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_network_acls:  )"    c Cs|jd|jd|jdfGHx|jdp>gD]}|jdp|jdp|jdp|jdp|jd }|jd ||jd |jd |jd fGHq?Wx:|jdpgD]#}|jd|jdfGHqWxy|jdpgD]b}|jdp7djdkrOd}nd}|jd|jd|jd|fGHqWx6|jdpgD]}|j||jdqWdS(Nt ROUTETABLEt routeTableIdR[trouteSett gatewayIdRRFRRtROUTERXtdestinationCidrBlocktorigintpropagatingVgwSettPROPAGATINGVGWt gatewayIDRtmainR8RRtrouteTableAssociationIdR\Rj(R+R,RR0(RttabletroutettargettvgwRRRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_route_table s,$!!   c CsgdD]}|j|^q}|jd g|GH|jd rgdD]}|d j|^qM}|jdg|GHn|jdg}|jdr,|d}xB|D]4}|jdijd|jdkrPqqWd}|jd|jd|jd|jdfGHnxC|jdgD]/}|jd|jd|jdfGHq?Wxd|D]\}|jdjdkrd} nd} |jd|jd|jd| fGHqyWx6|jdpgD]} |j| |jdqWdS( NRR\R[R3RRZRItsourceDestChecktNETWORKINTERFACERRFt attachmentIdt deviceIndexRwRxRtprivateIpAddressesSett associationRRt ipOwnerIdR4tGROUPR6R5tprimaryRtPRIVATEIPADDRESSRj(snetworkInterfaceIdssubnetIdsvpcIdsownerIdsstatussprivateIpAddresssprivateDnsNameR(s instanceIdRRsstatuss attachTimesdeleteOnTermination(R,R+RkRR0( RRqtattrtnic_infotattachment_infot privaddressesRt privaddressRARRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyRm&s@#       cCs|jd|jd|jd|jd|jd|jdfGHx3|jdgD]}|j||jdq`WdS(NtCUSTOMERGATEWAYtcustomerGatewayIdRXRRYtbgpAsnRj(R+R,R0(RtcgwRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_customer_gatewayNs  cCs|jd|jd|jd|jd|jdfGHx@|jdD]/}|jd|jd|jdfGHqQWx3|jd gD]}|j||jdqWdS( Nt VPNGATEWAYt vpnGatewayIdRXRSRt attachmentst VGWATTACHMENTR[Rj(R+R,R0(RRRRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_vpn_gatewayUsc Cs|jd|jd|jd|jd|jd|jdfGH|r|jdr|dkr|jdGHq|jds|jd r|jjd |tj|}y|jWn4tjj k r}t d j t |nXt jj|j}nV|jd r8|d }n|jjd|t|}t jj|}WdQXt jj|}t jjtj|jd} || GHnx6|jdpgD]} |j| |jdqWdS(Nt VPNCONNECTIONtvpnConnectionIdRRRRXtcustomerGatewayConfigurationshttp://shttps://s+fetching connection info stylesheet from %ssfailed to fetch stylesheet: {0}sfile://is#using connection info stylesheet %sRj(R+R,Rkt startswithtlogtinfotrequeststraise_for_statust exceptionst HTTPErrorRRtstrtlxmltetreetXMLttexttopentparsetXSLTtiotBytesIOR0( Rtvpntshow_conn_infot stylesheetRterrt xslt_roottstylesheet_filet transformtconn_info_rootRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_vpn_connection_s<      cCs|jd|jdfGHxq|jdp2iD]Z}g|jdD]}|jd^qI}|jd|jddj|fGHq3Wx3|jd gD]}|j||jdqWdS( Nt DHCPOPTIONSRtdhcpConfigurationSettvalueSetR(tOPTIONR'RNRj(R+R,R<R0(Rtdopttoptiontval_dicttvaluesRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_dhcp_optionss(-cCsdg}x$d D]}|j|j|qW|j|jdpHd |j|jd |j|GHx'|jd gD]}|j|qWx3|jd gD]}|j||jdqWdS(NtVOLUMERvtsizeRRSRRRytstandardRzRRj(svolumeIdssizes snapshotIdsavailabilityZonesstatuss createTime(R;R,R+RR0(Rtvolumetvol_bitsRRRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyt print_volumes  c Cs|jd|jd|jd|jd|jd|jd|jd|jd|jd g GHx3|jd gD]}|j||jdqWdS( NtSNAPSHOTRRvRt startTimetprogressR3Rt descriptionRj(R+R,R0(RtsnapRr((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_snapshotsc Cs|jdijdijd}|jdijdijd}|ro|rodj||}nd}|jd|jd|jd|||jd |jd |jd |jd |g GHdS( NtstoragetS3tbuckettprefixs{0}/{1}.manifest.xmltBUNDLEtbundleIdRFR/t updateTimeRXR0(R,RRkR+(RttaskR6R7tmanifest((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_bundle_tasks'' cCsg}|jdr%|jdn|jdrD|jdn|jdry|jd|j|jdn|jdr|jd |j|dn|jd r|jd |j|d n|jd r |jd |j|d n|jdr:|j|GH|j|dn|jdr|djdrz|jd|ddfn|j|GHx1|djdpgD]}|j|qWndS(Nt importVolumetTaskTypet IMPORTVOLUMEtimportInstancetIMPORTINSTANCEtconversionTaskIdtTaskIdRtExpirationTimeRXtStatust statusMessaget StatusMessageRFt InstanceIDtvolumes(R?R@(R?RB(R,textendR;R+t_EC2Request__print_import_disk(RR;t task_bitsR+((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pytprint_conversion_tasks6      cCsdg}|jdpi}|jdp0i}|jdr\|jd|dfn|jdr|jd|dfn|jdr|jd |dfn|jdr|jd |dfn|jd r|jd |d fn|jd r)|jd|d fn|jdrW|jd|jdfn|jdr|jd|jdfn|j|GHdS(Nt DISKIMAGEtimageR+RtDiskImageFormatR)t DiskImageSizetidtVolumeIdt VolumeSizeRStAvailabilityZonetbytesConvertedtApproximateBytesConvertedRRFRGRH(R,RKR+(Rt containert disk_bitsRPR+((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyt__print_import_disks,   cCsttj}d}|dp-|d}|dpE|d}tj||rk||jdRlRRRRRRRRRRmRRtFalseRkRR'R-R3R=RNRLRi(((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyR"Es<   4       "  (   "  t_ResourceTypeMapcBseZidd6dd6dd6dd6dd 6d d 6d d 6d d6d d6d d6d d6d d6dd6dd6dd6dd6dd6dd6dd 6d!d"6d#d$6d%d%6d&d'6d(d(6d)d*6d+d,6d-d.6Zd/Zd0ZRS(1s allocation-idteipalloctbundletbunsconversion-tasktimportscustomer-gatewayRs dhcp-optionsR#s export-tasktexportRPtakitamitaritekitemiteriRCtisinternet-gatewayRs network-aclRsnetwork-interfacetenisreserved-instancestxxxs route-tabletrtbssecurity-grouptsgtsnapshotR2sspot-instances-requesttsirRR+tvolRsvpc-peering-connectionRsvpn-connectionRs vpn-gatewayRcCsWt|tjs!tdnx/|jD]$}|j|dr+|j|Sq+WdS(Ns#argument type must be a string typet-(t isinstancetsixt string_typest TypeErrort_prefix_type_mapR(RtitemR7((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyR*"s cCstt|jjS(N(titertsetRR&(R((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyt__iter__)s(RRRR*R(((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyRrs<  cCsd}d}t|jdkr|rBtdj|n|sQd}n|jd}t|dkry$t|d}t|d}Wqtk rtd qXn td |d ks|d krtd qnt|jdkr|r%tdj|n|sCtdj|nd|kr^tdnt ||\}}|d ks|d krtdn|d krd}n|d krd}qn||fS(NRt1s<argument -p/--port-range: not compatible with protocol "{0}"s-1:-1t:iiis:argument -t/--icmp-type-code: value must have format "1:2"isAargument -t/--icmp-type-code: ICMP type, code must be at least -1Rt6Rt17s@argument -t/--icmp-type-code: not compatible with protocol "{0}"s7argument -p/--port-range is required for protocol "{0}"sLargument -p/--port-range: multi-port range must be separated by "-", not ":"s<argument -p/--port-range: port number(s) must be at least -1i(sicmpR(stcpRsudpR( RkR RRRtsplitR_RRt_parse_port_range(RRdRcRRttypes((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyt parse_ports/sF           cCsyt|t|fSWntk r-nX|jddkr|jd}y"t|dt|dfSWqtk rqXnt|tjry tj||}||fSWqtj k rqXnt dj |dS(NRiisnargument -p/--port-range: '{0}' is neither a port number, range of port numbers, nor a recognized service name( RRtcountRRRRtsockett getservbynameterrorRR(RdRtportstport((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyR`s$ "  (*targparseRtoperatorRtos.pathtosRtstringRR\t lxml.etreeR RRtrequestbuilder.auth.awstrequestbuilder.exceptionsRRRtrequestbuilder.mixinsRtrequestbuilder.requestRtrequestbuilder.serviceRtrequests.exceptionsRRteuca2ools.commandsR teuca2ools.exceptionsR teuca2ools.utilR R R"tobjectRrR)RkRR(((sC/usr/lib/python2.7/site-packages/euca2ools/commands/ec2/__init__.pyts2         ( 1