bootstrap-vz/providers/ec2/tasks/connection.py

44 lines
1.4 KiB
Python
Raw Normal View History

2013-06-09 16:25:59 +02:00
from base import Task
from common import phases
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):
keys = ['access-key', 'secret-key']
if info.manifest.volume['backing'] == 's3':
keys.extend(['certificate', 'private-key', 'user-id'])
info.credentials = self.get_credentials(info.manifest, keys)
2013-05-02 19:13:35 +02:00
def get_credentials(self, manifest, keys):
2013-05-02 19:13:35 +02:00
from os import getenv
creds = {}
if all(key in manifest.data['credentials'] for key in keys):
for key in keys:
creds[key] = manifest.data['credentials'][key]
return creds
def env_key(key):
2013-12-14 19:37:23 +01:00
return ('aws-' + key).upper().replace('-', '_')
if all(getenv(env_key(key)) is not None for key in keys):
for key in keys:
creds[key] = getenv(env_key(key))
return creds
raise RuntimeError(('No ec2 credentials found, they must all be specified '
'exclusively via environment variables or through the manifest.'))
2013-05-02 19:13:35 +02:00
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
predecessors = [GetCredentials, host.GetInfo]
2013-06-26 20:14:37 +02:00
2013-05-02 19:13:35 +02:00
def run(self, info):
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'])