1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
#!/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
__prompt__ = '>>>' # Default prompt
class Fapi(object):
''' The main F5 API Tool Object '''
def __init__(self, args):
''' Initialize the config file, username and password '''
config_file = args.C
config = ConfigParser.ConfigParser()
config.read(config_file)
self._config = config
self._args = 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._partition = config.get('fapi', 'partition')
self.__info('Setting partition to %s' % self._partition)
self._f5.Management.Partition.set_active_partition(self._partition)
except Exception, e:
self.__info(e)
def __login(self, username, password):
''' Logs into the F5 BigIP SOAP API '''
self.__info('Login to BigIP API with user %s' % username)
hostname = self._config.get('fapi', 'hostname')
try:
self._f5 = bigsuds.BIGIP(
hostname = hostname,
username = username,
password = password,
)
except Exception, e:
self.__info(e)
def __info(self, message):
''' Prints an informational message to stderr '''
print >> sys.stderr, '%s %s' % (__prompt__, message)
def run(self):
''' Do the actual stuff '''
f = self._f5
a = self._args
flag = False
if a.action == 'show':
if a.arg == 'pool':
if a.subarg == 'status':
self.__info('Get pool status')
pool_name = args.subarg2
print f.LocalLB.Pool.get_object_status([pool_name])
flag = True
elif a.subarg == 'members':
self.__info('Get pool members')
pool_name = args.subarg2
print f.LocalLB.Pool.get_member_v2([pool_name])
flag = True
else:
self.__info('Get pool list')
print f.LocalLB.Pool.get_list()
flag = True
if not flag:
self.__info('Don\'t know what to do')
sys.exit(1)
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('action', help='The action')
parser.add_argument('arg', help='The argument for the action')
parser.add_argument('subarg', nargs='?', help='A sub argument')
parser.add_argument('subarg2', nargs='?', help='Another sub argument')
args = parser.parse_args()
if args.V:
print 'This is %s version %s' % (__program__, __version__)
sys.exit(0)
fapi = Fapi(args)
fapi.run()
# vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4
|