diff options
| author | Jhon Honce <jhonce@redhat.com> | 2015-03-06 13:52:20 -0700 | 
|---|---|---|
| committer | Jhon Honce <jhonce@redhat.com> | 2015-03-24 11:04:22 -0700 | 
| commit | 7c7cb82fdd5583784fd5832b92886abf86934325 (patch) | |
| tree | 52b109394947ecc960ac458a6c69dce334a46467 /bin | |
| parent | 1c1df6a5733626865efc607d063f2a2a9b80499b (diff) | |
| download | openshift-7c7cb82fdd5583784fd5832b92886abf86934325.tar.gz openshift-7c7cb82fdd5583784fd5832b92886abf86934325.tar.bz2 openshift-7c7cb82fdd5583784fd5832b92886abf86934325.tar.xz openshift-7c7cb82fdd5583784fd5832b92886abf86934325.zip | |
Use ansible playbook to initialize openshift cluster
* Added playbooks/gce/openshift-cluster
* Added bin/cluster (will replace cluster.sh)
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/cluster | 100 | 
1 files changed, 100 insertions, 0 deletions
| diff --git a/bin/cluster b/bin/cluster new file mode 100755 index 000000000..7afdce0e5 --- /dev/null +++ b/bin/cluster @@ -0,0 +1,100 @@ +#!/usr/bin/env python +# vim: expandtab:tabstop=4:shiftwidth=4 + +import argparse +import ConfigParser +import sys +import os + + +class Cluster(object): +    """Python wrapper to ensure environment is correct for running ansible playbooks +    """ + +    def __init__(self, args): +        self.args = args + +        # setup ansible ssh environment +        if 'ANSIBLE_SSH_ARGS' not in os.environ: +            os.environ['ANSIBLE_SSH_ARGS'] = ( +                '-o ForwardAgent=yes' +                '-o StrictHostKeyChecking=no' +                '-o UserKnownHostsFile=/dev/null' +                '-o ControlMaster=auto' +                '-o ControlPersist=600s' +            ) + +    def apply(self): +        # setup ansible playbook environment +        config = ConfigParser.ConfigParser() +        if 'gce' == self.args.provider: +            config.readfp(open('inventory/gce/gce.ini')) + +            for key in config.options('gce'): +                os.environ[key] = config.get('gce', key) + +            inventory = '-i inventory/gce/gce.py' +        elif 'aws' == self.args.provider: +            config.readfp(open('inventory/aws/ec2.ini')) + +            for key in config.options('ec2'): +                os.environ[key] = config.get('ec2', key) + +            inventory = '-i inventory/aws/ec2.py' +        else: +            assert False, "invalid PROVIDER {}".format(self.args.provider) + +        env = {'cluster_id': self.args.cluster_id} + +        if 'create' == self.args.action: +            playbook = "playbooks/{}/openshift-cluster/launch.yml".format(self.args.provider) +            env['masters'] = self.args.masters +            env['nodes'] = self.args.nodes + +        elif 'terminate' == self.args.action: +            playbook = "playbooks/{}/openshift-cluster/terminate.yml".format(self.args.provider) +        elif 'list' == self.args.action: +            # todo: implement cluster list +            argparse.ArgumentError("ACTION {} not implemented".format(self.args.action)) +        elif 'update' == self.args.action: +            # todo: implement cluster update +            argparse.ArgumentError("ACTION {} not implemented".format(self.args.action)) +        else: +            assert False, "invalid ACTION {}".format(self.args.action) + +        verbose = '' +        if self.args.verbose > 0: +            verbose = '-{}'.format('v' * self.args.verbose) + +        ansible_env = '-e \'{}\''.format( +            ' '.join(['%s=%s' % (key, value) for (key, value) in env.items()]) +        ) + +        command = 'ansible-playbook {} {} {} {}'.format( +            verbose, inventory, ansible_env, playbook +        ) + +        if self.args.verbose > 1: +            command = 'time {}'.format(command) + +        if self.args.verbose > 0: +            sys.stderr.write('RUN [{}]\n'.format(command)) +            sys.stderr.flush() + +        os.system(command) + + +if __name__ == '__main__': +    parser = argparse.ArgumentParser(description='Manage OpenShift Cluster') +    parser.add_argument('-p', '--provider', default='gce', choices=['gce', 'aws'], +                        help='One of the supported cloud providers') +    parser.add_argument('-m', '--masters', default=1, type=int, help='number of masters to create in cluster') +    parser.add_argument('-n', '--nodes', default=2, type=int, help='number of nodes to create in cluster') +    parser.add_argument('-v', '--verbose', action='count', help='Multiple -v options increase the verbosity') +    parser.add_argument('--version', action='version', version='%(prog)s 0.1') +    parser.add_argument('action', choices=['create', 'terminate', 'update', 'list']) +    parser.add_argument('provider', choices=['gce', 'aws']) +    parser.add_argument('cluster_id', help='prefix for cluster VM names') +    args = parser.parse_args() + +    Cluster(args).apply() | 
