Class: VirtualServer

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

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ VirtualServer

Returns a new instance of VirtualServer.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/simple_lb.rb', line 5

def initialize(args)
  @@vs_attrs = args.to_a
  if @@vs_attrs.blank?
    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
  $vs_name       = @@vs_attrs.shift
  $vs_address    = @@vs_attrs.shift
  $pool_member1  = @@vs_attrs.shift
  VirtualServer.create_config
  VirtualServer.create_soap_connection('Pool')
  VirtualServer.create_soap_connection('VirtualServer')
end

Class Method Details

.create_configObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/simple_lb.rb', line 22

def self.create_config
  path = File.expand_path '~/.bigip.yml'
  config = YAML.load(File.read(path)) rescue nil
  unless config
    config = {
      ipaddress: '172.16.222.120',
      user:      'admin',
      password:  'admin'
    }
    File.open(path, 'w') { |f| YAML.dump(config, f) }
    abort "Created config file #{path} update with your bigip info"
  end
  @ipaddress = config[:ipaddress]
  @user = config[:user]
  @password = config[:password]
end

.create_pool(soap, pool_name, pool_member) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/simple_lb.rb', line 57

def self.create_pool(soap, pool_name, pool_member)
  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) ⇒ Object



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/simple_lb.rb', line 39

def self.create_soap_connection(locallb_prop)
  @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)
  end
end

.create_virtual_server(soap, vs_name, vs_address) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/simple_lb.rb', line 79

def self.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