iControlREST: Ruby: To Output a List of Virtual Servers and their Associated Pools and Pool Members.
Problem this snippet solves:
This script enumerates virtual servers and their associated pools and pool members and their status, each virtual server on a line of its own in the ";' delimited format. Essentially, the code shows a way to parse the 'ltm/virtual' object and get the information required. It had a specific need to address when it was written, and it can be modified to suit other similar requirements.
How to use this snippet:
This code has been tested with Ruby 2.3.1p112.
Code :
#!/usr/local/bin/ruby -w
#
# This script enumerates virtual servers and their associated pools and
# pool members and their status, each virtual server on a line of its own
# in the ";' delimited format.
#
#-------------------------------------------------------------------------
require 'rubygems'
require 'rest-client'
require 'json'
# define program-wide variables
BIGIP_ADDRESS = 'mgmt_IP_addr'
BIGIP_USER = 'admin'
BIGIP_PASS = 'admin'
SLEEP_TIME = 20
bigip = RestClient::Resource.new(
"https://#{BIGIP_ADDRESS}/mgmt/tm/",
:user => BIGIP_USER,
:password => BIGIP_PASS,
:headers => { :content_type => 'application/json' },
:verify_ssl => false
)
# Get virtual servers:
vservers = bigip['ltm/virtual'].get
vservers_obj = JSON.parse(vservers)
# Get pools:
pools = bigip['ltm/pool?expandSubcollections=true'].get
pools_obj = JSON.parse(pools)
# Output header:
puts "Virtual Server Name;Virtual Server Destination;Virtual Server Partition;Pool Name;Pool LB Mode;Pool Member Name (address)(state)"
$output = ''
# Process data:
vservers_obj.each do |vserver_obj|
vserver_obj.each do |vserver_obj_element|
if vserver_obj_element.is_a?(Array)
vserver_obj_element.each do |vserver_obj_element_property|
if vserver_obj_element_property.is_a?(Hash)
if vserver_obj_element_property.has_key?("name")
vs_name = vserver_obj_element_property.fetch("name")
$output = $output + vs_name + ';'
end
if vserver_obj_element_property.has_key?("destination")
vs_destination = vserver_obj_element_property.fetch("destination")
$output = $output + vs_destination + ';'
end
if vserver_obj_element_property.has_key?("partition")
vs_partition = vserver_obj_element_property.fetch("partition")
$output = $output + vs_partition + ';'
end
if vserver_obj_element_property.has_key?("pool")
pool_name_from_vs = vserver_obj_element_property.fetch("pool")
pools_obj.each_pair do |key, val|
next if key == "kind"
next if key == "selfLink"
for x in 0..(val.length-1)
if val[x]["fullPath"] == pool_name_from_vs
$output = $output + val[x]["name"] + ";" + val[x]["loadBalancingMode"]
if val[x].has_key?("membersReference")
val[x]["membersReference"].each_pair do |mrefkey,mrefval|
next if mrefkey == "link"
next if mrefkey == "isSubcollection"
for i in 0..(mrefval.length-1)
if i == 0
$output = $output + ";" + mrefval[i]["name"] + "(" + mrefval[i]["address"] + ")(" + mrefval[i]["state"] + "),"
else
$output = $output + mrefval[i]["name"] + "(" + mrefval[i]["address"] + ")(" + mrefval[i]["state"] + "),"
end
if i == mrefval.length-1
$output.chop!
$output += "\n"
end
end
end
else
$output = $output + ";;\n"
end
break
end
end
end
else
$output = $output + ";;\n"
end
end
end
end
end
end
puts $output
#---END---Tested this on version:
11.6Published Aug 06, 2016
Version 1.0JG
Cumulonimbus
Seasoned UNIX system administrator/programmer.JG
Cumulonimbus
Seasoned UNIX system administrator/programmer.No CommentsBe the first to comment