Something i found kind of useful.
Original Instructions found on F5’s page:
https://devcentral.f5.com/tech-tips/articles/getting-started-with-ruby-and-icontrol
I assume you’re running ubuntu or debian
1. Install Ruby Gems
apt-get install ruby rubygems libopenssl-ruby
2. Download iControl
iControl Ruby Gem
3. Install iControl gem
gem install f5-icontrol-10.2.0.gem
Run one of the example files (located in /var/lib/gems/1.8/gems/f5-icontrol-10.2.0.a.1/examples/ if installed as ‘root’)
ruby get_version.rb <f5address> <username> <pass>
=> BIG-IP_v10.1.0
And Lastly Here’s a little script to grab the Down/Disabled/Active Pool Members of a given pool
This was constructed with the help of some of the example scripts that installed with the icontrol gem.
Example usage:
f5-pool-members.rb -b bigIPAddress -u user -p pass -n poolname
-b bigip-address, BIGIP Load balancer address
--bigip-address
-u, --bigip-user bigip-user Username of BIGIP admin
-p, --bigip-pass bigip-pass Password of BIGIP admin
-n, --pool-name pool-name Name of pool
-h, --help Display this screen
#!/usr/bin/env ruby
# == Synopsis
# f5-node-initiator - Quickly add nodes to pools
# == Usage
# f5-node-initiator [OPTIONS]
# -h, --help:
# show help
#
# --bigip-address, -b [hostname]:
# specify the destination BIG-IP for virtual and pool creation
#
# --bigip-user, -u [username]:
# username for destination BIG-IP
#
# --bigip-pass, -p [password]:
# password for destination BIG-IP
#
# --pool-name, -n [name]:
# name of pool to add node to
#
# --node-definition, -d [ip address:port]:
# definition for node being added to pool, example: 10.2.1.1:443
require 'rubygems'
require 'f5-icontrol'
require 'optparse'
bigip_address = ''
bigip_user = ''
bigip_pass = ''
pool_name = ''
node_address = ''
node_port = 80
# Current script's name
currentFile = File.basename(__FILE__)
# IF options undefined set to help option
if ARGV.empty?
ARGV[0] = '-h'
end
# This hash will hold all of the options
opt = {}
optparse = OptionParser.new do |opts|
# Set a banner, displayed at the top of help screen
opts.banner = "#{currentFile} -b bigIPAddress -u user -p pass -n poolname"
# Define the options, and what they do
opts.on( '-b', '--bigip-address bigip-address', 'BIGIP Load balancer address' ) do |x|
bigip_address = x
end
opts.on( '-u', '--bigip-user bigip-user', 'Username of BIGIP admin' ) do |x|
bigip_user = x
end
opts.on( '-p', '--bigip-pass bigip-pass', 'Password of BIGIP admin' ) do |x|
bigip_pass = x
end
opts.on( '-n', '--pool-name pool-name', 'Name of pool' ) do |x|
pool_name = x
end
#opts.on( '-d', '--node-definition node-definition', 'definition for node being added to pool, example: 10.2.1.1:443' ) do |x|
# node_definition = x
#end
# This displays the help screen
opts.on( '-h', '--help', 'Display this screen' ) do
puts opts
exit 1
end
end
# Parse Command options
optparse.parse!
# Initiate SOAP RPC connection to BIG-IP
bigip = F5::IControl.new(bigip_address, bigip_user, bigip_pass, ['LocalLB.Pool']).get_interfaces
# Insure that target pool exists
unless bigip['LocalLB.Pool'].get_list.include? pool_name
puts 'ERROR: target pool "' + pool_name +'" does not exist'
exit 1
end
ActiveMembers = Array.new
DisabledMembers = Array.new
DownMembers = Array.new
bigip['LocalLB.Pool'].get_monitor_instance([ pool_name ])[0].collect do |pool_member1|
puts
node_addr = pool_member1['instance']['instance_definition']['ipport']['address'].to_s
node_port = pool_member1['instance']['instance_definition']['ipport']['port'].to_s
if pool_member1['instance_state'].to_s =~ /INSTANCE_STATE_DOWN/
DownMembers.push node_addr
elsif pool_member1['enabled_state'].to_s =~ /false/
DisabledMembers.push node_addr
else
ActiveMembers.push node_addr
end
#puts "Node: #{node_addr}:#{node_port}"
#puts "Node Health: #{pool_member1['instance_state']}"
#puts "Enabled State: #{pool_member1['enabled_state']}"
end
puts "Poolname: " + pool_name
puts "=============== Unhealthy State Nodes ================"
DownMembers.each do |x|
puts x
end
puts "=============== Disabled State Nodes ================"
DisabledMembers.each do |x|
puts x
end
puts "=============== Active and Healthy State Nodes ================"
ActiveMembers.each do |x|
puts x
end
Example Output:
Poolname: myf5_pool =============== Unhealthy State Nodes ================ 10.0.0.3 =============== Disabled State Nodes ================ 10.0.0.4 =============== Active and Healthy State Nodes ================ 10.0.0.2 10.0.0.1

