Class: VirtualServer

Inherits:
Object
  • Object
show all
Defined in:
lib/simple_lb.rb

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ VirtualServer

Returns a new instance of VirtualServer.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 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

Instance Method Details

#create_config(config_path) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
# 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) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# 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) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# 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) ⇒ Object



28
29
30
31
32
33
# 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

#usageObject



4
5
6
7
8
9
10
# 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