diff options
| author | Paul C. Buetow <paul@buetow.org> | 2014-04-16 09:08:22 +0200 |
|---|---|---|
| committer | Paul C. Buetow <paul@buetow.org> | 2014-04-16 09:08:22 +0200 |
| commit | 2f407b655ece7b8be70a34f42c6561723bfc7dae (patch) | |
| tree | dad74a111fd9d304eb3f5be82ce84eb966586c85 | |
| parent | 157bb60e68370003d1157b4595c70f495253be6f (diff) | |
| parent | 3666d7d9d08d6c79017f57085ca8270961bafde9 (diff) | |
Q: Why haven't you graduated yet?0.0.5
A: Well, Dad, I could have finished years ago, but I wanted
my dissertation to rhyme.
| -rw-r--r-- | Makefile | 3 | ||||
| -rw-r--r-- | README.pod | 142 | ||||
| -rw-r--r-- | README.txt | 125 | ||||
| -rw-r--r-- | docs/fapi.1 | 2 | ||||
| -rw-r--r-- | docs/fapi.pod | 23 | ||||
| -rw-r--r-- | fapi.conf.sample | 7 | ||||
| -rwxr-xr-x | src/fapi | 27 |
7 files changed, 180 insertions, 149 deletions
@@ -27,7 +27,8 @@ documentation: # To be replaced with sphynx instead of pod pod2man --release="$(NAME) $$(cat .version)" \ --center="User Commands" ./docs/$(NAME).pod > ./docs/$(NAME).1 - pod2text ./docs/$(NAME).pod | tee ./docs/$(NAME).txt > README.txt + pod2text ./docs/$(NAME).pod > ./docs/$(NAME).txt + cp ./docs/$(NAME).pod README.pod # Build a debian package (don't sign it, modify the arguments if you want to sign it) deb: all dpkg-buildpackage diff --git a/README.pod b/README.pod new file mode 100644 index 0000000..ca02281 --- /dev/null +++ b/README.pod @@ -0,0 +1,142 @@ +=head1 NAME + +fapi - A humble command line tool to manage F5 BigIP loadbalancers + +=head1 SYNOPSIS + +Just run + + fapi -h + +or + + f -h + +because it's shorter to type. + +=head1 ABOUT + +This is a simple command line client to do basic stuff with the iControl F5 API +such as: + + Managing Nodes + Managing Monitors + Managing Pools + Managing Virtual Servers + + +This is a private programming project programmed in my spare time. Therefore I +didn't bother to put it on a public website and github. Please open bug +reports, feature requests and pull requests at +L<https://github.com/rantanplan/fapi>. + +=head1 BIGSUDS + +=head2 Requirement of bigsuds + +This tool depends on bigsuds. Please install this library from F5 dev central +manually. Otherwise this script will not work. + +You can download bigsuds from here: + +L<https://devcentral.f5.com/d/bigsuds-python-icontrol-library> + +Unzip it and run + + sudo python setyp.py install + +You may also install bigsuds from the contrib dir of the fapi source tree. + +=head2 iControl reference + +Through bigsuds you can do everything what iControl can do: + +L<https://devcentral.f5.com/wiki/icontrol.apireference.ashx> + + +=head1 QUICK START + +Update your sources list: + + curl http://deb.buetow.org/apt/pubkey.gpg | sudo apt-key add - + echo 'deb http://deb.buetow.org/apt wheezy main' > \ + /etc/apt/sourcees.list.d/buetoworg.list + aptitude update + +And run + + aptitude install fapi + cp /usr/share/fapi/fapi.conf.sample ~/.fapi.conf + vim ~/.fapi.conf + + +=head1 EXAMPLES + +=head2 Listing + +If you want to list all configured objects on your partition just run + + f node # To list all nodes + f pool # To list all pool + ... # etc + +=head2 Setting up simple NAT Services + + (Docu to be written) + +=head2 Setting up simple SNAT Services + + (Docu to be written) + +=head2 Setting up a simple nPath Service + +A simple nPath service can be created as follows. + + # Creating two nodes, fapi auto resolves the IP addresses, and use the + # FQDN as the node name. + f node fooserver1.example.com create + f node fooserver2.example.com create + + # Creating a pool and add the nodes to it. Also specify the node ports to + # use by the monitors (and maybe PAT if enabled) + f pool foopool create + f pool foopool add member fooserver1.example.com:80 + f pool foopool add member fooserver2.example.com:80 + + # Add a monitor to the pool + f pool foopool add monitor http_lbtest + + # Create a nPath HTTP vserver, 'nPath' also auto disables NAT and PAT + # fapi auto resolves the IP address. + f vserver myvserver.example.com:80 create PROTOCOL_TCP nPath + + # Add the pool to the vserver. The vservers name inside of BigIP will be + # the FQDN followed by _PORT. In this case it would be: + # myvserver.example.com_80 (or full: /Partition/myvserver.example.com_80) + # The reason is that : are not allowed in vserver names. + f vserver myvserver.example.com:80 set pool foopool + + # Add a nPath HTTPS vserver + f vserver myvserver.example.com:443 create PROTOCOL_TCP nPath + f vserver myvserver.example.com:443 set pool foopool + +And everything can be deleted as folows: + + # You can also specify the full object name (including the partition) + f vserver /Common/myvserver.example.com_80 delete + + # Or just the way the service was created from command line + f vserver myvserver.example.com:443 delete + + f pool foopool delete + f node fooserver1.example.com delete + f node fooserver2.example.com delete + + +=head1 AUTHOR + +Paul C. Buetow - <paul@buetow.org> + +Also see L<http://fapi.buetow.org> + +=cut diff --git a/README.txt b/README.txt deleted file mode 100644 index b3d0a4f..0000000 --- a/README.txt +++ /dev/null @@ -1,125 +0,0 @@ -NAME - fapi - A humble command line tool to manage F5 BigIP loadbalancers - -SYNOPSIS - Just run - - fapi -h - - or - - f -h - - because it's shorter to type. - -ABOUT - This is a simple command line client to do basic stuff with the iControl - F5 API such as: - - Managing Nodes - Managing Monitors - Managing Pools - Managing Virtual Servers - - This is a private programming project programmed in my spare time. - Therefore I didn't bother to put it on a public website and github. - Please open bug reports, feature requests and pull requests at - <https://github.com/rantanplan/fapi>. - -BIGSUDS - Requirement of bigsuds - This tool depends on bigsuds. Please install this library from F5 dev - central manually. Otherwise this script will not work. - - You can download bigsuds from here: - - <https://devcentral.f5.com/d/bigsuds-python-icontrol-library> - - Unzip it and run - - sudo python setyp.py install - - You may also install bigsuds from the contrib dir of the fapi source - tree. - - iControl reference - Through bigsuds you can do everything what iControl can do: - - <https://devcentral.f5.com/wiki/icontrol.apireference.ashx> - -QUICK START - Update your sources list: - - curl http://deb.buetow.org/apt/pubkey.gpg | sudo apt-key add - - echo 'deb http://deb.buetow.org/apt wheezy main' > \ - /etc/apt/sourcees.list.d/buetoworg.list - aptitude update - - And run - - aptitude install fapi - cp /usr/share/fapi/fapi.conf.sample ~/.fapi.conf - vim ~/.fapi.conf - -EXAMPLES - Listing - If you want to list all configured objects on your partition just run - - f node # To list all nodes - f pool # To list all pool - ... # etc - - Setting up simple NAT Services - (Docu to be written) - - Setting up simple SNAT Services - (Docu to be written) - - Setting up a simple nPath Service - A simple nPath service can be created as follows. - - # Creating two nodes, fapi auto resolves the IP addresses, and use the - # FQDN as the node name. - f node fooserver1.example.com create - f node fooserver2.example.com create - - # Creating a pool and add the nodes to it. Also specify the node ports to - # use by the monitors (and maybe PAT if enabled) - f pool foopool create - f pool foopool add member fooserver1.example.com:80 - f pool foopool add member fooserver2.example.com:80 - - # Add a monitor to the pool - f pool foopool add monitor http_lbtest - - # Create a nPath HTTP vserver, 'nPath' also auto disables NAT and PAT - # fapi auto resolves the IP address. - f vserver myvserver.example.com:80 create PROTOCOL_TCP nPath - - # Add the pool to the vserver. The vservers name inside of BigIP will be - # the FQDN followed by _PORT. In this case it would be: - # myvserver.example.com_80 (or full: /Partition/myvserver.example.com_80) - # The reason is that : are not allowed in vserver names. - f vserver myvserver.example.com:80 set pool foopool - - # Add a nPath HTTPS vserver - f vserver myvserver.example.com:443 create PROTOCOL_TCP nPath - f vserver myvserver.example.com:443 set pool foopool - - And everything can be deleted as folows: - - # You can also specify the full object name (including the partition) - f vserver /Common/myvserver.example.com_80 delete - - # Or just the way the service was created from command line - f vserver myvserver.example.com:443 delete - - f pool foopool delete - f node fooserver1.example.com delete - f node fooserver2.example.com delete - -AUTHOR - Paul C. Buetow - <paul@buetow.org> - - Also see <http://fapi.buetow.org> - diff --git a/docs/fapi.1 b/docs/fapi.1 index 22dd83e..dbe6500 100644 --- a/docs/fapi.1 +++ b/docs/fapi.1 @@ -124,7 +124,7 @@ .\" ======================================================================== .\" .IX Title "FAPI 1" -.TH FAPI 1 "2014-04-16" "fapi 0.0.4" "User Commands" +.TH FAPI 1 "2014-04-16" "fapi 0.0.3" "User Commands" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l diff --git a/docs/fapi.pod b/docs/fapi.pod index ca02281..f0f7394 100644 --- a/docs/fapi.pod +++ b/docs/fapi.pod @@ -80,17 +80,7 @@ If you want to list all configured objects on your partition just run f pool # To list all pool ... # etc -=head2 Setting up simple NAT Services - - (Docu to be written) - -=head2 Setting up simple SNAT Services - - (Docu to be written) - -=head2 Setting up a simple nPath Service - -A simple nPath service can be created as follows. +=head2 Setting up a simple pool # Creating two nodes, fapi auto resolves the IP addresses, and use the # FQDN as the node name. @@ -106,6 +96,10 @@ A simple nPath service can be created as follows. # Add a monitor to the pool f pool foopool add monitor http_lbtest +=head2 Setting up a simple nPath Service + +A simple nPath service can be created as follows. + # Create a nPath HTTP vserver, 'nPath' also auto disables NAT and PAT # fapi auto resolves the IP address. f vserver myvserver.example.com:80 create PROTOCOL_TCP nPath @@ -132,6 +126,13 @@ And everything can be deleted as folows: f node fooserver1.example.com delete f node fooserver2.example.com delete +=head2 Setting up simple NAT Services + + (Docu to be written) + +=head2 Setting up simple SNAT Services + + (Docu to be written) =head1 AUTHOR diff --git a/fapi.conf.sample b/fapi.conf.sample index 57216ea..b1085da 100644 --- a/fapi.conf.sample +++ b/fapi.conf.sample @@ -2,6 +2,9 @@ [fapi] username: paul password64: SECRET -# Will try every box and will use the first one which works -hostnames: bigip.example.com,bigip2.example.com +# The qa loadbalancers (if specified -e qa) +loadbalancers_qa: qa-01.example.com,qa-02.example.com +# The qa loadbalancers (if specified -e live) +loadbalancers_live: be-01.example.com,qa-be-02.example.com,qa-be-03.lb.server.la +# You can specify your own/more envs too... partition: Common @@ -20,12 +20,14 @@ __program__ = 'fapi' __version__ = 'VERSION_DEVEL' # Replaced by a Makefile tsubet __prompt__ = '>>>' # Default prompt +def print_version(): + print 'This is %s version %s' % (__program__, __version__) def print_synopsis(): ''' Prints the full Synopsis string ''' + print_version() print "\n".join([ - 'This is %s version %s' % (__program__, __version__), '', 'Synopsis:', ' fapi monitor', @@ -62,7 +64,11 @@ class Fapi(object): self._args = args self._config = ConfigParser.ConfigParser() self._config.read(args.C) - self._partition = self._config.get('fapi', 'partition') + + if args.p != None: + self._partition = args.p + else: + self._partition = self._config.get('fapi', 'partition') def __login(self): @@ -83,11 +89,12 @@ class Fapi(object): self.info('Login to BigIP API with user %s' % username) # Try a comma separated lists of F5 boxes, use the first one + loadbalancers = c.get('fapi', 'loadbalancers_' + a.e) err = None - for hostname in c.get('fapi', 'hostnames').split(','): + for loadbalancer in loadbalancers.split(','): try: - self.info('Trying to login to \'%s\'' % hostname) - self._f5 = bigsuds.BIGIP(hostname = hostname, + self.info('Trying to login to \'%s\'' % loadbalancer) + self._f5 = bigsuds.BIGIP(hostname = loadbalancer, username = username, password = password) self._f5.Management.Partition.set_active_partition(self._partition) @@ -95,7 +102,7 @@ class Fapi(object): err = None break except Exception, e: - err = '%s:%s' % (hostname, e) + err = '%s:%s' % (loadbalancer, e) pass if err: @@ -230,7 +237,7 @@ class Fapi(object): elif a.sub == 'create': poolmembers = [] - method = a.m + method = 'LB_METHOD_ROUND_ROBIN' if a.sub3: for x in a.sub3.split(','): fqdn, ip, port = self.lookup(x) @@ -431,11 +438,12 @@ if __name__ == '__main__': ''' The main function, here we will have Popcorn for free! ''' parser = argparse.ArgumentParser(add_help=False) + parser.add_argument('-e', action='store', help='Env to use, e.g. dev,qa,live', + default='qa') parser.add_argument('-h', action='store_true', help='Help') + parser.add_argument('-p', action='store', help='Overwrite partition from fapi.conf') parser.add_argument('-v', action='store_true', help='Verbose') parser.add_argument('-V', action='store_true', help='Print version') - parser.add_argument('-m', action='store', help='The default lbmethod', - default='LB_METHOD_ROUND_ROBIN') parser.add_argument('-C', action='store', help='Config file', default=expanduser('~') + '/.fapi.conf') @@ -456,6 +464,7 @@ if __name__ == '__main__': sys.exit(0) if args.V: + print_version() sys.exit(0) fapi = Fapi(args) |
