2013-06-09 16:25:59 +02:00
|
|
|
from base import Task
|
2013-06-23 15:26:08 +02:00
|
|
|
from common import phases
|
2013-06-24 23:12:39 +02:00
|
|
|
import host
|
2013-05-02 19:13:35 +02:00
|
|
|
|
|
|
|
|
|
|
|
class GetCredentials(Task):
|
2013-06-09 20:29:54 +02:00
|
|
|
description = 'Getting AWS credentials'
|
2013-06-23 22:12:29 +02:00
|
|
|
phase = phases.preparation
|
2013-06-09 20:29:54 +02:00
|
|
|
|
2013-05-02 19:13:35 +02:00
|
|
|
def run(self, info):
|
|
|
|
super(GetCredentials, self).run(info)
|
2013-06-23 12:00:17 +02:00
|
|
|
info.credentials = self.get_credentials(info.manifest)
|
2013-05-02 19:13:35 +02:00
|
|
|
|
2013-06-23 12:00:17 +02:00
|
|
|
def get_credentials(self, manifest):
|
2013-05-02 19:13:35 +02:00
|
|
|
from os import getenv
|
2013-06-09 15:50:00 +02:00
|
|
|
# manifest overrides environment
|
2013-05-02 19:13:35 +02:00
|
|
|
if(manifest.credentials['access-key'] and manifest.credentials['secret-key']):
|
|
|
|
return {'access_key': manifest.credentials['access-key'],
|
|
|
|
'secret_key': manifest.credentials['secret-key']}
|
|
|
|
if(getenv('EC2_ACCESS_KEY') and getenv('EC2_SECRET_KEY')):
|
|
|
|
return {'access_key': getenv('EC2_ACCESS_KEY'),
|
|
|
|
'secret_key': getenv('EC2_SECRET_KEY')}
|
|
|
|
|
|
|
|
if(bool(manifest.credentials['access-key']) != bool(manifest.credentials['secret-key'])):
|
|
|
|
raise RuntimeError('Both the access key and secret key must be specified in the manifest.')
|
|
|
|
if(bool(getenv('EC2_ACCESS_KEY')) != bool(getenv('EC2_SECRET_KEY'))):
|
|
|
|
raise RuntimeError('Both the access key and secret key must be specified as environment variables.')
|
|
|
|
|
|
|
|
raise RuntimeError('No ec2 credentials found.')
|
|
|
|
|
|
|
|
|
|
|
|
class Connect(Task):
|
2013-06-09 20:29:54 +02:00
|
|
|
description = 'Connecting to EC2'
|
2013-06-23 22:12:29 +02:00
|
|
|
phase = phases.preparation
|
2013-06-24 23:12:39 +02:00
|
|
|
after = [GetCredentials, host.GetInfo]
|
2013-06-26 20:14:37 +02:00
|
|
|
|
2013-05-02 19:13:35 +02:00
|
|
|
def run(self, info):
|
|
|
|
super(Connect, self).run(info)
|
2013-06-23 12:00:17 +02:00
|
|
|
from boto.ec2 import connect_to_region
|
|
|
|
info.connection = connect_to_region(info.host['region'],
|
|
|
|
aws_access_key_id=info.credentials['access_key'],
|
|
|
|
aws_secret_access_key=info.credentials['secret_key'])
|