diff options
| author | Paul C. Buetow <paul@buetow.org> | 2014-04-12 09:19:49 +0200 |
|---|---|---|
| committer | Paul C. Buetow <paul@buetow.org> | 2014-04-12 09:19:49 +0200 |
| commit | f443c7064482f493917e16c7d04f6da85974134f (patch) | |
| tree | 3e76ad9ace1288b4ef44e27b1a5630d69cc46505 /src | |
| parent | ae903b3d1a6b768195b829b19b76975ccb51d1a2 (diff) | |
mv to src
Diffstat (limited to 'src')
| -rwxr-xr-x | src/fapi.py | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/src/fapi.py b/src/fapi.py new file mode 100755 index 0000000..189bb89 --- /dev/null +++ b/src/fapi.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python + +# 2014 (c) Paul C. Buetow + +import argparse +import base64 +import getpass +import sys +import bigsuds + +from os.path import expanduser + +import ConfigParser + +__program__ = 'fapi' +__version__ = 'VERSION_DEVEL' # Replaced by a Makefile target + +class Fapi(object): + ''' The main F5 API Tool Object ''' + + def __init__(self, args): + ''' Initialize the config file, username and password ''' + + if args.v: + print 'Reading configuration' + + config_file = args.C + + config = ConfigParser.ConfigParser() + config.read(config_file) + + self.config = config + self.__args_merge(args) + + if config.has_option('fapi', 'username'): + username = config.get('fapi', 'username') + else: + username = getpass.getuser() + + if config.has_option('fapi', 'password64'): + password = base64.decodestring(config.get('fapi', 'password64')) + else: + prompt = 'Enter API password for user %s: ' % username + password = getpass.getpass(prompt) + + self.__login(username, password) + + try: + self.bigip.Management.Partition.set_active_partition( + config.get('fapi', 'partition')) + + except Exception, e: + print "Exception: %s" % e + + + def __args_merge(self, args): + ''' Merges args to the config object ''' + + if not self.config.has_section('args'): + self.config.add_section('args') + + for k, v in vars(args).items(): + if args.v: print "Set arg %s: %s" % (k, v) + self.config.set('args', k, str(v)) + + def __login(self, username, password): + ''' Logs into the F5 BigIP SOAP API ''' + + if self.config.getboolean('args', 'v'): + print 'Login to BigIP API with user %s' % username + + hostname = self.config.get('fapi', 'hostname') + + try: + self.bigip = bigsuds.BIGIP( + hostname = hostname, + username = username, + password = password, + ) + except Exception, e: + print "Exception: %s" % e + + def run(self): + ''' Do the actual stuff ''' + + if self.config.getboolean('args', 'list'): + print 'Hello' + + else: + print 'No such action' + +if __name__ == '__main__': + ''' The main function, here we will have Popcorn for free! ''' + + parser = argparse.ArgumentParser() + parser.add_argument('-v', action='store_true', help='Verbose') + parser.add_argument('-V', action='store_true', help='Print version') + parser.add_argument('-C', action='store', help='Config file', + default=expanduser('~') + '/.fapi.conf') + parser.add_argument('list', action='store_true', help='List') + parser.add_argument('pool', action='store_true', help='Server pool') + + args = parser.parse_args() + + if args.V: + print 'This is ' + __program__ + ' version ' + __version__ + sys.exit(0) + + fapi = Fapi(args) + fapi.run() + +# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 |
