class VirtualServer

Public Class Methods

new(args) click to toggle source
# File lib/simple_lb.rb, line 12
def initialize(args)
  config_path = File.expand_path '~/.bigip.yml'
  create_config(config_path) unless File.exist?(config_path)
  if args.blank?
    usage
  else
    @vs_attrs = args.to_a
  end
  load_config(config_path)
  vs_name       = @vs_attrs.shift
  vs_address    = @vs_attrs.shift
  pool_member1  = @vs_attrs.shift
  create_soap_connection('Pool', vs_name, vs_address, pool_member1, @vs_attrs)
  create_soap_connection('VirtualServer', vs_name, vs_address, pool_member1, @vs_attrs)
end

Public Instance Methods

create_config(config_path) click to toggle source
# File lib/simple_lb.rb, line 35
def create_config(config_path)
  config =  {
    ipaddress: '172.16.222.120',
    user:      'admin',
    password:  'admin'
  }
  File.open(config_path, 'w') do |f|
    YAML.dump(config, f)
  end
  puts "Created config file #{config_path} update with your bigip info"
  exit
end
create_pool(soap, pool_name, pool_member, vs_attrs) click to toggle source
# File lib/simple_lb.rb, line 66
def create_pool(soap, pool_name, pool_member, vs_attrs)
  r =
    soap.call :create do |pool|
      pool.message 'pool_names' => { item: ["#{pool_name}"] },
                   'lb_methods' => { item: ['LB_METHOD_ROUND_ROBIN'] },
                   'members' => { item:
                                  { item:
                                    [address: pool_member, port: '80'] } }
    end
    unless vs_attrs.blank?
      vs_attrs.each do |member|
        soap.call :add_member do |pool|
          pool.message 'pool_names' => { item: ["#{pool_name}"] },
                       'members' => { item:
                                      { item:
                                        [address: member, port: '80'] } }
        end
        r.success?
      end
    end
end
create_soap_connection(locallb_prop, vs_name, vs_address, pool_member1, vs_attrs) click to toggle source
# File lib/simple_lb.rb, line 48
def create_soap_connection(locallb_prop, vs_name, vs_address, pool_member1, vs_attrs)
  @soap =
  Savon.client do |s|
    s.wsdl "https://#{@ipaddress}/iControl/iControlPortal.cgi?WSDL=LocalLB.#{locallb_prop}"
    s.basic_auth [@user, @password]
    s.ssl_verify_mode :none
    s.endpoint "https://#{@ipaddress}/iControl/iControlPortal.cgi"
    s.namespace "urn:iControl:LocalLB/#{locallb_prop}"
    s.convert_request_keys_to :none
  end
  case locallb_prop
  when 'VirtualServer'
    create_virtual_server(@soap, vs_name, vs_address)
  when 'Pool'
    create_pool(@soap, vs_name, pool_member1, vs_attrs)
  end
end
create_virtual_server(soap, vs_name, vs_address) click to toggle source
# File lib/simple_lb.rb, line 88
def create_virtual_server(soap, vs_name, vs_address)
  vsdefinitions = [
    name:              vs_name,
    address:           vs_address,
    port:              '80',
    protocol:          'PROTOCOL_TCP']
  vswildmasks =        '255.255.255.255'
  vsresources = [
    type:              'RESOURCE_TYPE_POOL',
    default_pool_name: vs_name]
  vsprofiles = [
    profile_type:      'PROFILE_TYPE_FAST_L4',
    profile_context:   'PROFILE_CONTEXT_TYPE_ALL',
    profile_name:      'tcp']
  r =
    soap.call :create do |vs|
      vs.message definitions: { item: vsdefinitions },
                 wildmasks:   { item: vswildmasks },
                 resources:   { item: vsresources },
                 profiles:    { item: { item: vsprofiles } }
    end
  r.success?
end
load_config(config_path) click to toggle source
# File lib/simple_lb.rb, line 28
def load_config(config_path)
  config = YAML.load_file(config_path)
  @ipaddress = config[:ipaddress]
  @user = config[:user]
  @password = config[:password]
end
usage() click to toggle source
# File lib/simple_lb.rb, line 4
def usage
  puts 'Usage:'
  puts 'simple_lb <vs_server_name> <vs_ipaddress> <member1_ip> <member2_ip>'
  puts 'Example:'
  puts 'simple_lb my_vserver 192.168.10.100 192.168.10.102 192.168.10.103'
  exit
end