From 4754af459d0b23fc54a9cc5bb2c3062aac02f299 Mon Sep 17 00:00:00 2001 From: Thomas Wiest Date: Fri, 13 Mar 2015 17:01:03 -0400 Subject: renamed AnsibleUtil to AwsUtil because that's what it really is. --- bin/awsutil.py | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 bin/awsutil.py (limited to 'bin/awsutil.py') diff --git a/bin/awsutil.py b/bin/awsutil.py new file mode 100644 index 000000000..b6b323778 --- /dev/null +++ b/bin/awsutil.py @@ -0,0 +1,134 @@ +# vim: expandtab:tabstop=4:shiftwidth=4 + +import subprocess +import os +import json +import re + +class AwsUtil(object): + def __init__(self): + self.host_type_aliases = { + 'legacy-openshift-broker': ['broker', 'ex-srv'], + 'openshift-node': ['node', 'ex-node'], + 'openshift-messagebus': ['msg'], + 'openshift-customer-database': ['mongo'], + 'openshift-website-proxy': ['proxy'], + 'openshift-community-website': ['drupal'], + 'package-mirror': ['mirror'], + } + + self.alias_lookup = {} + for key, values in self.host_type_aliases.iteritems(): + for value in values: + self.alias_lookup[value] = key + + self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__))) + self.multi_ec2_path = os.path.realpath(os.path.join(self.file_path, '..','inventory','multi_ec2.py')) + + def get_inventory(self,args=[]): + cmd = [self.multi_ec2_path] + + if args: + cmd.extend(args) + + env = os.environ + + p = subprocess.Popen(cmd, stderr=subprocess.PIPE, + stdout=subprocess.PIPE, env=env) + + out,err = p.communicate() + + if p.returncode != 0: + raise RuntimeError(err) + + return json.loads(out.strip()) + + def get_environments(self): + pattern = re.compile(r'^tag_environment_(.*)') + + envs = [] + inv = self.get_inventory() + for key in inv.keys(): + m = pattern.match(key) + if m: + envs.append(m.group(1)) + + envs.sort() + return envs + + def get_host_types(self): + pattern = re.compile(r'^tag_host-type_(.*)') + + host_types = [] + inv = self.get_inventory() + for key in inv.keys(): + m = pattern.match(key) + if m: + host_types.append(m.group(1)) + + host_types.sort() + return host_types + + def get_security_groups(self): + pattern = re.compile(r'^security_group_(.*)') + + groups = [] + inv = self.get_inventory() + for key in inv.keys(): + m = pattern.match(key) + if m: + groups.append(m.group(1)) + + groups.sort() + return groups + + def build_host_dict_by_env(self, args=[]): + inv = self.get_inventory(args) + + inst_by_env = {} + for dns, host in inv['_meta']['hostvars'].items(): + if host['ec2_tag_environment'] not in inst_by_env: + inst_by_env[host['ec2_tag_environment']] = {} + host_id = "%s:%s" % (host['ec2_tag_Name'],host['ec2_id']) + inst_by_env[host['ec2_tag_environment']][host_id] = host + + return inst_by_env + + # Display host_types + def print_host_types(self): + host_types = self.get_host_types() + ht_format_str = "%35s" + alias_format_str = "%-20s" + combined_format_str = ht_format_str + " " + alias_format_str + + print + print combined_format_str % ('Host Types', 'Aliases') + print combined_format_str % ('----------', '-------') + + for ht in host_types: + aliases = [] + if ht in self.host_type_aliases: + aliases = self.host_type_aliases[ht] + print combined_format_str % (ht, ", ".join(aliases)) + else: + print ht_format_str % ht + print + + # Convert host-type aliases to real a host-type + def resolve_host_type(self, host_type): + if self.alias_lookup.has_key(host_type): + return self.alias_lookup[host_type] + return host_type + + def gen_env_host_type_tag(self, host_type, env): + """Generate the environment host type tag + """ + host_type = self.resolve_host_type(host_type) + return "tag_env-host-type_%s-%s" % (env, host_type) + + def get_host_list(self, host_type, env): + """Get the list of hosts from the inventory using host-type and environment + """ + inv = self.get_inventory() + host_type_tag = self.gen_env_host_type_tag(host_type, env) + return inv[host_type_tag] -- cgit v1.2.3 From 8279328096bceca3d79b51d711433991aef06bf4 Mon Sep 17 00:00:00 2001 From: Thomas Wiest Date: Fri, 13 Mar 2015 17:01:40 -0400 Subject: fixed bug in AwsUtil that was causing it to blow up on hosts without an environment set. --- bin/awsutil.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'bin/awsutil.py') diff --git a/bin/awsutil.py b/bin/awsutil.py index b6b323778..979455c13 100644 --- a/bin/awsutil.py +++ b/bin/awsutil.py @@ -87,6 +87,10 @@ class AwsUtil(object): inst_by_env = {} for dns, host in inv['_meta']['hostvars'].items(): + # If you don't have an environment tag, we're going to ignore you + if not host.has_key('ec2_tag_environment'): + continue + if host['ec2_tag_environment'] not in inst_by_env: inst_by_env[host['ec2_tag_environment']] = {} host_id = "%s:%s" % (host['ec2_tag_Name'],host['ec2_id']) -- cgit v1.2.3 From 35a8d1f73a54d468782547020975b79a77bffda2 Mon Sep 17 00:00:00 2001 From: Thomas Wiest Date: Fri, 13 Mar 2015 17:04:29 -0400 Subject: made the bug fix more python-esq --- bin/awsutil.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'bin/awsutil.py') diff --git a/bin/awsutil.py b/bin/awsutil.py index 979455c13..37259b946 100644 --- a/bin/awsutil.py +++ b/bin/awsutil.py @@ -88,7 +88,7 @@ class AwsUtil(object): inst_by_env = {} for dns, host in inv['_meta']['hostvars'].items(): # If you don't have an environment tag, we're going to ignore you - if not host.has_key('ec2_tag_environment'): + if 'ec2_tag_environment' not in host: continue if host['ec2_tag_environment'] not in inst_by_env: -- cgit v1.2.3