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