Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions libcloud/compute/drivers/ec2.py
Original file line number Diff line number Diff line change
Expand Up @@ -5398,7 +5398,13 @@ def ex_replace_route(self, route_table, cidr,

def _ex_connection_class_kwargs(self):
kwargs = super(BaseEC2NodeDriver, self)._ex_connection_class_kwargs()
kwargs['signature_version'] = self.signature_version
if hasattr(self, 'token') and self.token is not None:
kwargs['token'] = self.token
# Force signature_version 4 for tokens or auth breaks
kwargs['signature_version'] = '4'
else:
kwargs['signature_version'] = self.signature_version

return kwargs

def _to_nodes(self, object, xpath):
Expand Down Expand Up @@ -6335,7 +6341,7 @@ class EC2NodeDriver(BaseEC2NodeDriver):
}

def __init__(self, key, secret=None, secure=True, host=None, port=None,
region='us-east-1', **kwargs):
region='us-east-1', token=None, **kwargs):
if hasattr(self, '_region'):
region = self._region

Expand All @@ -6345,6 +6351,7 @@ def __init__(self, key, secret=None, secure=True, host=None, port=None,

details = REGION_DETAILS[region]
self.region_name = region
self.token = token
self.api_name = details['api_name']
self.country = details['country']
self.signature_version = details.get('signature_version',
Expand Down
13 changes: 13 additions & 0 deletions libcloud/test/compute/test_ec2.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,19 @@ def setUp(self):
self.driver = EC2NodeDriver(*EC2_PARAMS,
**{'region': self.region})

def test_instantiate_driver_with_token(self):
token = 'temporary_credentials_token'
driver = EC2NodeDriver(*EC2_PARAMS, **{'region': self.region, 'token': token})
self.assertTrue(hasattr(driver, 'token'), 'Driver has no attribute token')
self.assertEquals(token, driver.token, "Driver token does not match with provided token")

def test_driver_with_token_signature_version(self):
token = 'temporary_credentials_token'
driver = EC2NodeDriver(*EC2_PARAMS, **{'region': self.region, 'token': token})
kwargs = driver._ex_connection_class_kwargs()
self.assertIn('signature_version', kwargs)
self.assertEquals('4', kwargs['signature_version'], 'Signature version is not 4 with temporary credentials')

def test_create_node(self):
image = NodeImage(id='ami-be3adfd7',
name=self.image_name,
Expand Down