Exemple #1
0
class EC2(object):
    def __init__(self, configpath):
        configpath = os.path.abspath(configpath)
        if not os.path.exists(configpath):
            log.error("Config '%s' doesn't exist." % configpath)
            sys.exit(1)
        if os.path.isdir(configpath):
            configpath = os.path.join(configpath, 'aws.conf')
        self.config = Config(configpath)
        self.known_hosts = os.path.join(self.config.path, 'known_hosts')
        self.instances = {}
        for sid in self.config.get('instance', {}):
            self.instances[sid] = Instance(self, sid)
        self.servers = {}
        for sid in self.config.get('server', {}):
            self.servers[sid] = Server(self, sid)
        intersection = set(self.instances).intersection(set(self.servers))
        if len(intersection) > 0:
            log.error("Instance and server names must be unique, the following names are duplicated:")
            log.error("\n".join(intersection))
            sys.exit(1)
        self.all = {}
        self.all.update(self.instances)
        self.all.update(self.servers)

	self.clusters = {}
	for cid in self.config.get('cluster',{}):
	    self.clusters[cid] = Cluster(self,cid)
Exemple #2
0
 def testOverrides(self):
     contents = StringIO("\n".join([
         "[section]",
         "value=1"]))
     config = Config(contents).parse()
     self.assertDictEqual(
         config,
         {'global': {'section': {'value': '1'}}})
     self.assertDictEqual(
         config.get_section_with_overrides(
             'global',
             'section',
             overrides=None),
         {'value': '1'})
     self.assertDictEqual(
         config.get_section_with_overrides(
             'global',
             'section',
             overrides={'value': '2'}),
         {'value': '2'})
     self.assertDictEqual(
         config.get_section_with_overrides(
             'global',
             'section',
             overrides={'value2': '2'}),
         {'value': '1', 'value2': '2'})
     # make sure nothing is changed afterwards
     self.assertDictEqual(
         config,
         {'global': {'section': {'value': '1'}}})
Exemple #3
0
    def testMassagedOverrides(self):
        from mr.awsome.config import IntegerMassager

        dummyplugin.massagers.append(IntegerMassager('global', 'value'))
        dummyplugin.massagers.append(IntegerMassager('global', 'value2'))
        contents = StringIO("\n".join([
            self.plugin_config,
            "[section]",
            "value=1"]))
        config = Config(contents).parse()
        self.assertDictEqual(
            config['global'],
            {'section': {'value': 1}})
        self.assertDictEqual(
            config.get_section_with_overrides(
                'global',
                'section',
                overrides=None),
            {'value': 1})
        self.assertDictEqual(
            config.get_section_with_overrides(
                'global',
                'section',
                overrides={'value': '2'}),
            {'value': 2})
        self.assertDictEqual(
            config.get_section_with_overrides(
                'global',
                'section',
                overrides={'value2': '2'}),
            {'value': 1, 'value2': 2})
        # make sure nothing is changed afterwards
        self.assertDictEqual(
            config['global'],
            {'section': {'value': 1}})
Exemple #4
0
 def config(self):
     configpath = os.path.abspath(self.configfile)
     if not os.path.exists(configpath):
         log.error("Config '%s' doesn't exist." % configpath)
         sys.exit(1)
     config = Config(configpath, bbb_config=True)
     config.parse()
     return config
Exemple #5
0
class EC2(object):
    def __init__(self, configpath):
        configpath = os.path.abspath(configpath)
        if not os.path.exists(configpath):
            log.error("Config '%s' doesn't exist." % configpath)
            sys.exit(1)
        if os.path.isdir(configpath):
            configpath = os.path.join(configpath, 'aws.conf')
        self.config = Config(configpath)
        self.known_hosts = os.path.join(self.config.path, 'known_hosts')
        self.instances = {}
        for sid in self.config.get('instance', {}):
            self.instances[sid] = Instance(self, sid)
        self.servers = {}
        for sid in self.config.get('server', {}):
            self.servers[sid] = Server(self, sid)
        intersection = set(self.instances).intersection(set(self.servers))
        if len(intersection) > 0:
            log.error("Instance and server names must be unique, the following names are duplicated:")
            log.error("\n".join(intersection))
            sys.exit(1)
        self.all = {}
        self.all.update(self.instances)
        self.all.update(self.servers)

    @lazy
    def credentials(self):
        aws_id = None
        aws_key = None
        if 'AWS_ACCESS_KEY_ID' not in os.environ or 'AWS_SECRET_ACCESS_KEY' not in os.environ:
            try:
                id_file = self.config['global']['aws']['access-key-id']
                key_file = self.config['global']['aws']['secret-access-key']
            except KeyError:
                log.error("You need to either set the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables or add the path to files containing them to the config. You can find the values at http://aws.amazon.com under 'Your Account'-'Security Credentials'.")
                sys.exit(1)
            id_file = os.path.abspath(os.path.expanduser(os.path.expandvars(id_file)))
            if not os.path.exists(id_file):
                log.error("The access-key-id file at '%s' doesn't exist." % id_file)
                sys.exit(1)
            key_file = os.path.abspath(os.path.expanduser(os.path.expandvars(key_file)))
            if not os.path.exists(key_file):
                log.error("The secret-access-key file at '%s' doesn't exist." % key_file)
                sys.exit(1)
            aws_id = open(id_file).readline().strip()
            aws_key = open(key_file).readline().strip()
        return (aws_id, aws_key)

    @lazy
    def regions(self):
        (aws_id, aws_key) = self.credentials
        return dict((x.name, x) for x in boto.ec2.regions(
            aws_access_key_id=aws_id, aws_secret_access_key=aws_key
        ))

    @property
    def snapshots(self):
        return dict((x.id, x) for x in self.conn.get_all_snapshots(owner="self"))

    @lazy
    def conn(self):
        (aws_id, aws_key) = self.credentials
        region_id = self.config.get(
                'global', {}).get(
                    'aws', {}).get(
                        'region', None)
        if region_id is None:
            log.error("No region set in global config")
            sys.exit(1)
        region = self.regions[region_id]
        return region.connect(
            aws_access_key_id=aws_id, aws_secret_access_key=aws_key
        )
Exemple #6
0
 def _create_config(self, contents, path=None):
     contents = StringIO(contents)
     config = Config(contents, path=path)
     config._add_massager(
         StartupScriptMassager('instance', 'startup_script'))
     return config.parse()