summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul C. Buetow <paul@buetow.org>2014-04-16 09:08:22 +0200
committerPaul C. Buetow <paul@buetow.org>2014-04-16 09:08:22 +0200
commit2f407b655ece7b8be70a34f42c6561723bfc7dae (patch)
treedad74a111fd9d304eb3f5be82ce84eb966586c85
parent157bb60e68370003d1157b4595c70f495253be6f (diff)
parent3666d7d9d08d6c79017f57085ca8270961bafde9 (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--Makefile3
-rw-r--r--README.pod142
-rw-r--r--README.txt125
-rw-r--r--docs/fapi.12
-rw-r--r--docs/fapi.pod23
-rw-r--r--fapi.conf.sample7
-rwxr-xr-xsrc/fapi27
7 files changed, 180 insertions, 149 deletions
diff --git a/Makefile b/Makefile
index 28c5e3f..fc5f669 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/src/fapi b/src/fapi
index 0d0d3fb..9a4dd9f 100755
--- a/src/fapi
+++ b/src/fapi
@@ -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)