diff options
| -rwxr-xr-x | bin/ohi | 96 | ||||
| -rw-r--r-- | bin/openshift-ansible-bin.spec | 2 | 
2 files changed, 97 insertions, 1 deletions
diff --git a/bin/ohi b/bin/ohi new file mode 100755 index 000000000..06a375cdb --- /dev/null +++ b/bin/ohi @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# vim: expandtab:tabstop=4:shiftwidth=4 + +import argparse +import traceback +import sys +import os +import re +import tempfile +import time +import subprocess +import ConfigParser + +from openshift_ansible import awsutil + +CONFIG_MAIN_SECTION = 'main' +CONFIG_HOST_TYPE_ALIAS_SECTION = 'host_type_aliases' +CONFIG_INVENTORY_OPTION = 'inventory' + +class ArgumentMismatchError(ValueError): pass + +class Ohi(object): +    def __init__(self): +        self.inventory = None +        self.host_type_aliases = {} +        self.file_path = os.path.join(os.path.dirname(os.path.realpath(__file__))) + +        # Default the config path to /etc +        self.config_path = os.path.join(os.path.sep, 'etc',  \ +                                        'openshift_ansible', \ +                                        'openshift_ansible.conf') + +        self.parse_cli_args() +        self.parse_config_file() + +        self.aws = awsutil.AwsUtil(self.inventory, self.host_type_aliases) + +    def run(self): +        if self.args.list_host_types: +            self.aws.print_host_types() +            return 0 + +        if self.args.env and \ +           self.args.host_type: +            hosts = self.aws.get_host_list(self.args.host_type, self.args.env) +            for host in hosts: +                print host +            return 0 + +        # If it makes it here, we weren't able to determine what they wanted to do +        raise ArgumentMismatchError("Invalid combination of arguments") + +    def parse_config_file(self): +        if os.path.isfile(self.config_path): +            config = ConfigParser.ConfigParser() +            config.read(self.config_path) + +            if config.has_section(CONFIG_MAIN_SECTION) and \ +               config.has_option(CONFIG_MAIN_SECTION, CONFIG_INVENTORY_OPTION): +                self.inventory = config.get(CONFIG_MAIN_SECTION, CONFIG_INVENTORY_OPTION) + +            self.host_type_aliases = {} +            if config.has_section(CONFIG_HOST_TYPE_ALIAS_SECTION): +                for alias in config.options(CONFIG_HOST_TYPE_ALIAS_SECTION): +                    value = config.get(CONFIG_HOST_TYPE_ALIAS_SECTION, alias).split(',') +                    self.host_type_aliases[alias] = value + +    def parse_cli_args(self): +        """Setup the command line parser with the options we want +        """ + +        parser = argparse.ArgumentParser(description='Openshift Host Inventory') + +        parser.add_argument('--list-host-types', default=False, action='store_true', +                       help='List all of the host types') + +        parser.add_argument('-e', '--env', action="store", +                       help="Which environment to use") + +        parser.add_argument('-t', '--host-type', action="store", +                       help="Which host type to use") + +        self.args = parser.parse_args() + + +if __name__ == '__main__': +    if len(sys.argv) == 1: +        print "\nError: No options given. Use --help to see the available options\n" +        sys.exit(0) + +    try: +        ohi = Ohi() +        exitcode = ohi.run() +        sys.exit(exitcode) +    except ArgumentMismatchError as e: +        print "\nError: %s\n" % e.message diff --git a/bin/openshift-ansible-bin.spec b/bin/openshift-ansible-bin.spec index 695aebc28..876bca1d7 100644 --- a/bin/openshift-ansible-bin.spec +++ b/bin/openshift-ansible-bin.spec @@ -23,7 +23,7 @@ mkdir -p %{buildroot}%{python_sitelib}/openshift_ansible  mkdir -p %{buildroot}/etc/bash_completion.d  mkdir -p %{buildroot}/etc/openshift_ansible -cp -p ossh oscp opssh %{buildroot}%{_bindir} +cp -p ossh oscp opssh ohi %{buildroot}%{_bindir}  cp -p openshift_ansible/* %{buildroot}%{python_sitelib}/openshift_ansible  cp -p ossh_bash_completion %{buildroot}/etc/bash_completion.d  | 
