18d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Copyright (c) 2014 Skytap http://skytap.com/ 28d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# 38d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# Permission is hereby granted, free of charge, to any person obtaining a 48d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# copy of this software and associated documentation files (the 58d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# "Software"), to deal in the Software without restriction, including 68d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# without limitation the rights to use, copy, modify, merge, publish, dis- 78d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# tribute, sublicense, and/or sell copies of the Software, and to permit 88d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# persons to whom the Software is furnished to do so, subject to the fol- 98d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# lowing conditions: 108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# 118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# The above copyright notice and this permission notice shall be included 128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# in all copies or substantial portions of the Software. 138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# 148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- 168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT 178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi# IN THE SOFTWARE. 218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi""" 238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi KandoiRepresents a VPC Peering Connection. 248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi""" 258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoifrom boto.ec2.ec2object import TaggedEC2Object 278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass VpcInfo(object): 298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def __init__(self): 308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi """ 318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi Information on peer Vpc. 328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar id: The unique ID of peer Vpc. 348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar owner_id: Owner of peer Vpc. 358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar cidr_block: CIDR Block of peer Vpc. 368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi """ 378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.vpc_id = None 398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.owner_id = None 408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.cidr_block = None 418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def __repr__(self): 438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return 'VpcInfo:%s' % self.vpc_id 448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def startElement(self, name, attrs, connection): 468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi pass 478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def endElement(self, name, value, connection): 498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi if name == 'vpcId': 508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.vpc_id = value 518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi elif name == 'ownerId': 528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.owner_id = value 538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi elif name == 'cidrBlock': 548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.cidr_block = value 558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi else: 568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi setattr(self, name, value) 578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass VpcPeeringConnectionStatus(object): 598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi """ 608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi The status of VPC peering connection. 618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar code: The status of the VPC peering connection. Valid values are: 638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 648d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi * pending-acceptance 658d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi * failed 668d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi * expired 678d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi * provisioning 688d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi * active 698d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi * deleted 708d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi * rejected 718d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 728d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar message: A message that provides more information about the status of the VPC peering connection, if applicable. 738d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi """ 748d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def __init__(self, code=0, message=None): 758d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.code = code 768d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.message = message 778d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 788d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def __repr__(self): 798d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return '%s(%d)' % (self.code, self.message) 808d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 818d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def startElement(self, name, attrs, connection): 828d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi pass 838d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 848d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def endElement(self, name, value, connection): 858d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi if name == 'code': 868d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.code = value 878d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi elif name == 'message': 888d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.message = value 898d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi else: 908d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi setattr(self, name, value) 918d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 928d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 938d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 948d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoiclass VpcPeeringConnection(TaggedEC2Object): 958d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 968d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def __init__(self, connection=None): 978d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi """ 988d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi Represents a VPC peering connection. 998d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1008d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar id: The unique ID of the VPC peering connection. 1018d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar accepter_vpc_info: Information on peer Vpc. 1028d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar requester_vpc_info: Information on requester Vpc. 1038d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar expiration_time: The expiration date and time for the VPC peering connection. 1048d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar status_code: The status of the VPC peering connection. 1058d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi :ivar status_message: A message that provides more information about the status of the VPC peering connection, if applicable. 1068d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi """ 1078d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi super(VpcPeeringConnection, self).__init__(connection) 1088d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.id = None 1098d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.accepter_vpc_info = VpcInfo() 1108d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.requester_vpc_info = VpcInfo() 1118d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.expiration_time = None 1128d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self._status = VpcPeeringConnectionStatus() 1138d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1148d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi @property 1158d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def status_code(self): 1168d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return self._status.code 1178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1188d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi @property 1198d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def status_message(self): 1208d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return self._status.message 1218d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1228d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def __repr__(self): 1238d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return 'VpcPeeringConnection:%s' % self.id 1248d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1258d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def startElement(self, name, attrs, connection): 1268d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi retval = super(VpcPeeringConnection, self).startElement(name, attrs, connection) 1278d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi if retval is not None: 1288d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return retval 1298d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1308d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi if name == 'requesterVpcInfo': 1318d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return self.requester_vpc_info 1328d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi elif name == 'accepterVpcInfo': 1338d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return self.accepter_vpc_info 1348d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi elif name == 'status': 1358d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return self._status 1368d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1378d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return None 1388d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1398d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def endElement(self, name, value, connection): 1408d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi if name == 'vpcPeeringConnectionId': 1418d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.id = value 1428d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi elif name == 'expirationTime': 1438d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.expiration_time = value 1448d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi else: 1458d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi setattr(self, name, value) 1468d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1478d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def delete(self): 1488d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return self.connection.delete_vpc_peering_connection(self.id) 1498d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1508d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def _update(self, updated): 1518d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self.__dict__.update(updated.__dict__) 1528d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi 1538d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi def update(self, validate=False, dry_run=False): 1548d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi vpc_peering_connection_list = self.connection.get_all_vpc_peering_connections( 1558d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi [self.id], 1568d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi dry_run=dry_run 1578d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi ) 1588d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi if len(vpc_peering_connection_list): 1598d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi updated_vpc_peering_connection = vpc_peering_connection_list[0] 1608d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi self._update(updated_vpc_peering_connection) 1618d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi elif validate: 1628d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi raise ValueError('%s is not a valid VpcPeeringConnection ID' % (self.id,)) 1638d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi return self.status_code 164