NodeInitiator
Problem this snippet solves:
This will add a member to a pool on a BIG-IP. This script was written for use in the F5-node-initiator cookbook for Opscode Chef. Automating-Web-App-Deployments-with-Opscode-Chef-and-iControl.aspx
How to use this snippet:
Requirements
- Ruby
- Ruby Gems
- F5 iControl for Ruby library (Getting-Started-With-Ruby-and-iControl.aspx)
- other dependencies will be installed with the iControl gem
Installation Steps
- Install Ruby, Ruby Gems, and the Ruby iControl libraries
- Copy this code to /usr/local/bin and chmod +x to make the script executable
- Run it!
- f5-node-initiator -b 192.168.1.245 -u admin -p admin -n my_test_pool -d 10.0.0.10:80
Code :
#!/usr/bin/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 'getoptlong' require 'rdoc/usage' options = GetoptLong.new( [ '--bigip-address', '-b', GetoptLong::REQUIRED_ARGUMENT ], [ '--bigip-user', '-u', GetoptLong::REQUIRED_ARGUMENT ], [ '--bigip-pass', '-p', GetoptLong::REQUIRED_ARGUMENT ], [ '--pool-name', '-n', GetoptLong::REQUIRED_ARGUMENT ], [ '--node-definition', '-d', GetoptLong::REQUIRED_ARGUMENT ], [ '--help', '-h', GetoptLong::NO_ARGUMENT ] ) bigip_address = '' bigip_user = '' bigip_pass = '' pool_name = '' node_address = '' node_port = 80 options.each do |option, arg| case option when '--bigip-address' bigip_address = arg when '--bigip-user' bigip_user = arg when '--bigip-pass' bigip_pass = arg when '--pool-name' pool_name = arg when '--node-definition' if arg =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d+/ node_address = arg.split(':')[0] node_port = arg.split(':')[1] end when '--help' RDoc::usage end end RDoc::usage if bigip_address.empty? or bigip_user.empty? or bigip_pass.empty? or pool_name.empty? or node_address.empty? # 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 # collect list of existing pool member definitions pool_members = bigip['LocalLB.Pool'].get_member([ pool_name ])[0].collect do |pool_member| pool_member['address'] + ':' + pool_member['port'].to_s end # don't attempt to add member if it already exists unless pool_members.include?(node_address + ':' + node_port.to_s) bigip['LocalLB.Pool'].add_member([ pool_name ], [[{ 'address' => node_address, 'port' => node_port.to_i }]]) end
Published Mar 08, 2015
Version 1.0CodeCentral_194
Cirrus
Joined May 05, 2019
CodeCentral_194
Cirrus
Joined May 05, 2019
No CommentsBe the first to comment