__init__.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. """
  2. Provider implementation based on boto library for EC2-compatible clouds.
  3. """
  4. import boto
  5. from boto.ec2.regioninfo import RegionInfo
  6. from cloudbridge.util import Bunch
  7. from cloudbridge.providers.interfaces import CloudProvider
  8. from cloudbridge.providers.interfaces import SecurityManager
  9. from cloudbridge.providers.interfaces import KeyPair
  10. class EC2CloudProviderV1(CloudProvider):
  11. def __init__(self, config):
  12. print "EC2CloudProviderV1; for config: '%s'" % config
  13. self.config = config
  14. self.a_key = config.access_key
  15. self.s_key = config.secret_key
  16. self.cloud_type = 'ec2'
  17. # Initialize optional fields
  18. if type(config) is Bunch:
  19. self.is_secure = config.get('is_secure', True)
  20. self.region_name = config.get('region_name', 'us-east-1')
  21. self.region_endpoint = config.get('region_endpoint', 'ec2.us-east-1.amazonaws.com')
  22. self.ec2_port = config.get('ec2_port', '')
  23. self.ec2_conn_path = config.get('ec2_conn_path', '/')
  24. else:
  25. if hasattr(config.is_secure):
  26. self.is_secure = config.is_secure
  27. else:
  28. self.is_secure = True
  29. if hasattr(config.region_name):
  30. self.region_name = config.region_name
  31. else:
  32. self.region_name = 'us-east-1'
  33. if hasattr(config.region_endpoint):
  34. self.region_endpoint = config.region_endpoint
  35. else:
  36. self.region_endpoint = 'ec2.us-east-1.amazonaws.com'
  37. if hasattr(config.ec2_port):
  38. self.ec2_port = config.ec2_port
  39. else:
  40. self.ec2_port = ''
  41. if hasattr(config.ec2_conn_path):
  42. self.ec2_conn_path = config.ec2_conn_path
  43. else:
  44. self.ec2_conn_path = "/"
  45. self.ec2_conn = self._connect_ec2()
  46. # self.Compute = EC2ComputeManager(self)
  47. # self.Images = EC2ImageManager(self)
  48. self.Security = EC2SecurityManager(self)
  49. # self.BlockStore = EC2BlockStore(self)
  50. # self.ObjectStore = EC2ObjectStore(self)
  51. def _connect_ec2(self):
  52. """
  53. Get a boto connection object for the given cloud.
  54. """
  55. r = RegionInfo(name=self.region_name, endpoint=self.region_endpoint)
  56. ec2_conn = boto.connect_ec2(aws_access_key_id=self.a_key,
  57. aws_secret_access_key=self.s_key,
  58. # api_version is needed for availability zone support for EC2
  59. api_version='2012-06-01' if self.cloud_type == 'ec2' else None,
  60. is_secure=self.is_secure,
  61. region=r,
  62. port=self.ec2_port,
  63. path=self.ec2_conn_path,
  64. validate_certs=False)
  65. return ec2_conn
  66. class EC2SecurityManager(SecurityManager):
  67. def __init__(self, provider):
  68. self.provider = provider
  69. def list_key_pairs(self):
  70. """
  71. List all key pairs.
  72. :rtype: ``list`` of :class:`.KeyPair`
  73. :return: list of KeyPair objects
  74. """
  75. kps = self.provider.ec2_conn.get_all_key_pairs()
  76. kpl = []
  77. for kp in kps:
  78. kpl.append(KeyPair(kp.name))
  79. return kpl