icontrol 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +45 -1
- data/lib/icontrol/attributable.rb +13 -1
- data/lib/icontrol/base.rb +3 -2
- data/lib/icontrol/common.rb +43 -43
- data/lib/icontrol/local_lb/common.rb +57 -28
- data/lib/icontrol/local_lb/virtual_server.rb +92 -28
- data/lib/icontrol/mappings.rb +7 -7
- data/lib/icontrol/statistic_type.rb +946 -504
- data/spec/fixtures/endpoint_helper.rb +1 -1
- data/spec/icontrol_local_lb_virtual_server_spec.rb +55 -13
- data/spec/spec_helper.rb +1 -1
- metadata +4 -6
- data/README.markdown +0 -9
data/README.rdoc
CHANGED
@@ -1,5 +1,49 @@
|
|
1
|
-
=
|
1
|
+
= IControl: F5 BigIP SOAP API Client
|
2
2
|
|
3
|
+
IControl allows you to easily connect to a BigIP F5 load balancer and by means of the SOAP API. You can programmatically do almost the same things that you would do throught the Web Interface.
|
4
|
+
|
5
|
+
= Installing
|
6
|
+
|
7
|
+
== Install the gem:
|
8
|
+
gem install icontrol
|
9
|
+
|
10
|
+
= Configuring
|
11
|
+
|
12
|
+
In order to configure you just have to set up the username, password and the server you're connecting to:
|
13
|
+
|
14
|
+
IControl.config[:user] = 'username'
|
15
|
+
IControl.config[:password] = 'secret'
|
16
|
+
IControl.config[:base_url] = "https://myf5.test.com/"
|
17
|
+
|
18
|
+
= Using the library
|
19
|
+
|
20
|
+
== Virtual Servers
|
21
|
+
|
22
|
+
You can retreive, create, delete and modify virtual servers, for more information see IControl::LocalLB::VirtualServer. As an example of you what you can do:
|
23
|
+
|
24
|
+
=== Creating a virtual Server
|
25
|
+
new_virtual_server = IControl::LocalLB::VirtualServer.create(:name => "foo_virtual_server",
|
26
|
+
:address => "192.168.1.1",
|
27
|
+
:port => "80",
|
28
|
+
:protocol => IControl::Common::ProtocolType::PROTOCOL_TCP,
|
29
|
+
:wildmask => "255.255.255.255",
|
30
|
+
:type => IControl::LocalLB::VirtualServer::Type::RESOURCE_TYPE_POOL,
|
31
|
+
:default_pool => foo_pool,
|
32
|
+
:profiles => [])
|
33
|
+
|
34
|
+
=== Obtaining an instance of a virtual server
|
35
|
+
|
36
|
+
|
37
|
+
my_virtual_server = IControl::LocalLB::VirtualServer.find("virtual_server_name")
|
38
|
+
|
39
|
+
|
40
|
+
=== Changing its default pool
|
41
|
+
|
42
|
+
my_virtual_server.default_pool = IControl::LocalLB::Pool.find("my_new_default_pool")
|
43
|
+
|
44
|
+
=== Destroying it
|
45
|
+
|
46
|
+
my_virtual_server.destroy
|
3
47
|
|
4
48
|
== Note on Patches/Pull Requests
|
5
49
|
|
@@ -18,10 +18,22 @@ module Attributable
|
|
18
18
|
end
|
19
19
|
|
20
20
|
module InstanceMethods
|
21
|
+
|
21
22
|
def initialize(attributes)
|
22
23
|
id = attributes.delete(self.class.id_name) if attributes && attributes[self.class.id_name]
|
23
24
|
@attributes = attributes || {}
|
24
|
-
@attributes[:id] ||= id
|
25
|
+
@attributes[:id] ||= id
|
26
|
+
|
27
|
+
# Now we define an alias for the id_name
|
28
|
+
id_name = self.class.id_name
|
29
|
+
|
30
|
+
(class << self; self; end).instance_eval do
|
31
|
+
define_method(id_name) do
|
32
|
+
@attributes[:id]
|
33
|
+
end
|
34
|
+
end if id_name
|
35
|
+
|
36
|
+
|
25
37
|
end
|
26
38
|
|
27
39
|
def method_missing(method_name,*args,&block)
|
data/lib/icontrol/base.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
require 'savon'
|
3
3
|
require 'net/https'
|
4
4
|
require 'digest/md5'
|
5
|
+
Savon::Request.log = false
|
5
6
|
|
6
7
|
# The idea is to create an object proxy to the web service client with the same structure
|
7
8
|
# than the IControl stuff
|
@@ -92,7 +93,7 @@ module IControl
|
|
92
93
|
@config = {
|
93
94
|
:user => "", # username and password
|
94
95
|
:password => "",
|
95
|
-
:base_url => "", # base url for the web-service (https://example.com/
|
96
|
+
:base_url => "", # base url for the web-service (https://example.com/)
|
96
97
|
:test_mode => false, # When test mode is set, the soap responses are saved (this is done to ease the testing fixtures generation)
|
97
98
|
:test_path => File.join(File.dirname(__FILE__),"..","..","spec","fixtures"),
|
98
99
|
:test_file_prefix => ""
|
@@ -146,7 +147,7 @@ module IControl
|
|
146
147
|
return @client if @client
|
147
148
|
@client = nil
|
148
149
|
if IControl.configured?
|
149
|
-
@client = Savon::Client.new IControl.config[:base_url] + "?WSDL=#{name.to_s}.#{class_name.to_s}"
|
150
|
+
@client = Savon::Client.new IControl.config[:base_url] + "/iControl/iControlPortal.cgi?WSDL=#{name.to_s}.#{class_name.to_s}"
|
150
151
|
@client.request.basic_auth IControl.config[:user],IControl.config[:password]
|
151
152
|
@client.request.http.ssl_client_auth( :verify_mode => OpenSSL::SSL::VERIFY_NONE )
|
152
153
|
else
|
data/lib/icontrol/common.rb
CHANGED
@@ -5,38 +5,12 @@ module IControl
|
|
5
5
|
class NoSuchPoolException < Exception; end
|
6
6
|
class MethodNotImplementedException < Exception; end
|
7
7
|
|
8
|
-
module ConstDefiner
|
9
|
-
|
10
|
-
def self.included(base)
|
11
|
-
base.extend(ClassMethods)
|
12
|
-
end
|
13
|
-
|
14
|
-
module ClassMethods
|
15
|
-
|
16
|
-
def class_name
|
17
|
-
self.name.split("::").last
|
18
|
-
end
|
19
|
-
|
20
|
-
def declare_constants(constants,parent)
|
21
|
-
constants.each do |const_name|
|
22
|
-
klass = Class.new(parent)
|
23
|
-
self.const_set(const_name,klass)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def from_string(klass)
|
28
|
-
return eval("::#{self}::#{klass}")
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
|
34
8
|
module Common
|
35
9
|
|
36
10
|
class VLANFilterList
|
37
11
|
attr_accessor :state,:vlans
|
38
12
|
def initialize(attributes)
|
39
|
-
@state = IControl::Common::EnabledState.
|
13
|
+
@state = IControl::Common::EnabledState.const_get(attributes[:state])
|
40
14
|
@vlans = [attributes[:vlans][:item]].flatten.compact
|
41
15
|
end
|
42
16
|
|
@@ -72,30 +46,56 @@ module IControl
|
|
72
46
|
end
|
73
47
|
|
74
48
|
class SourcePortBehavior
|
75
|
-
|
76
|
-
|
49
|
+
# Attempt to preserve the source port (best effort). This is the default.
|
50
|
+
class SOURCE_PORT_PRESERVE ; VALUE = 0; end
|
51
|
+
# Preserve source port. Use of the preserve-strict setting should be restricted to UDP only under very special circumstances such as nPath or transparent (that is, no translation of any other L3/L4 field), where there is a 1:1 relationship between virtual IP addresses and node addresses, or when clustered multi-processing (CMP) is disabled.
|
52
|
+
class SOURCE_PORT_PRESERVE_STRICT ; VALUE = 1; end
|
53
|
+
# The change setting is useful for obfuscating internal network addresses.
|
54
|
+
class SOURCE_PORT_CHANGE ; VALUE = 2; end
|
77
55
|
end
|
78
|
-
|
56
|
+
|
57
|
+
##
|
58
|
+
# A list of enabled states.
|
79
59
|
class EnabledState
|
80
|
-
|
81
|
-
|
60
|
+
class STATE_DISABLED ; VALUE = 0; end
|
61
|
+
class STATE_ENABLED ; VALUE = 1; end
|
82
62
|
end
|
83
63
|
|
64
|
+
##
|
65
|
+
# A list of TMOS modules.
|
84
66
|
class TMOSModule
|
85
|
-
|
86
|
-
|
67
|
+
class TMOS_MODULE_SAM ; VALUE = 0; end
|
68
|
+
class TMOS_MODULE_ASM ; VALUE = 1; end
|
69
|
+
class TMOS_MODULE_WAM ; VALUE = 2; end
|
87
70
|
end
|
88
71
|
|
72
|
+
##
|
73
|
+
# An enumeration of protocol types.
|
89
74
|
class ProtocolType
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
75
|
+
# Protocol is wildcard.
|
76
|
+
class PROTOCOL_ANY ; VALUE = 0; end
|
77
|
+
# Protocol is IPv6 header.
|
78
|
+
class PROTOCOL_IPV6 ; VALUE = 1; end
|
79
|
+
# Protocol is IPv6 routing header.
|
80
|
+
class PROTOCOL_ROUTING ; VALUE = 2; end
|
81
|
+
# Protocol is IPv6 no next header.
|
82
|
+
class PROTOCOL_NONE ; VALUE = 3; end
|
83
|
+
# Protocol is IPv6 fragmentation header.
|
84
|
+
class PROTOCOL_FRAGMENT ; VALUE = 4; end
|
85
|
+
# Protocol is IPv6 destination options.
|
86
|
+
class PROTOCOL_DSTOPTS ; VALUE = 5; end
|
87
|
+
# Protocol is TCP.
|
88
|
+
class PROTOCOL_TCP ; VALUE = 6; end
|
89
|
+
# Protocol is UDP.
|
90
|
+
class PROTOCOL_UDP ; VALUE = 7; end
|
91
|
+
# Protocol is ICMP.
|
92
|
+
class PROTOCOL_ICMP ; VALUE = 8; end
|
93
|
+
# Protocol is ICMPv6.
|
94
|
+
class PROTOCOL_ICMPV6 ; VALUE = 9; end
|
95
|
+
# Protocol is OSPF.
|
96
|
+
class PROTOCOL_OSPF ; VALUE = 10; end
|
97
|
+
# Protocol is SCTP.
|
98
|
+
class PROTOCOL_SCTP ; VALUE = 11; end
|
99
99
|
end
|
100
100
|
|
101
101
|
class IPPortDefinition
|
@@ -1,47 +1,76 @@
|
|
1
1
|
module IControl
|
2
2
|
module LocalLB
|
3
3
|
|
4
|
+
##
|
5
|
+
# A list of possible levels for hardware acceleration.
|
4
6
|
class HardwareAccelerationMode
|
5
|
-
|
6
|
-
|
7
|
+
class HW_ACCELERATION_MODE_NONE ; VALUE = 0; end
|
8
|
+
class HW_ACCELERATION_MODE_ASSIST; VALUE = 1; end
|
9
|
+
class HW_ACCELERATION_MODE_FULL; VALUE = 2 ; end
|
7
10
|
end
|
8
11
|
|
12
|
+
##
|
13
|
+
# An enumeration of clone pool types.
|
9
14
|
class ClonePoolType
|
10
|
-
|
11
|
-
|
15
|
+
class CLONE_POOL_TYPE_UNDEFINED ; VALUE = 0; end
|
16
|
+
class CLONE_POOL_TYPE_CLIENTSIDE; VALUE = 1; end
|
17
|
+
class CLONE_POOL_TYPE_SERVERSIDE; VALUE = 2 ; end
|
12
18
|
end
|
13
19
|
|
20
|
+
##
|
21
|
+
# A list of profile context types.
|
14
22
|
class ProfileContextType
|
15
|
-
|
16
|
-
|
23
|
+
class PROFILE_CONTEXT_TYPE_ALL ; VALUE = 0; end
|
24
|
+
class PROFILE_CONTEXT_TYPE_CLIENT; VALUE = 1; end
|
25
|
+
class PROFILE_CONTEXT_TYPE_SERVER; VALUE = 2 ; end
|
17
26
|
end
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
|
28
|
+
##
|
29
|
+
# A list of translation types.
|
30
|
+
class SnatType
|
31
|
+
class SNAT_TYPE_NONE ; VALUE = 0; end
|
32
|
+
class SNAT_TYPE_TRANSLATION_ADDRESS ; VALUE = 1; end
|
33
|
+
class SNAT_TYPE_SNATPOOL ; VALUE = 2; end
|
34
|
+
class SNAT_TYPE_AUTOMAP ; VALUE = 3 ; end
|
22
35
|
end
|
23
36
|
|
37
|
+
##
|
38
|
+
# A list of profile types.
|
24
39
|
class ProfileType
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
40
|
+
class PROFILE_TYPE_TCP ; VALUE = 0; end
|
41
|
+
class PROFILE_TYPE_UDP; VALUE = 1; end
|
42
|
+
class PROFILE_TYPE_FTP; VALUE = 2; end
|
43
|
+
class PROFILE_TYPE_FAST_L4; VALUE = 3; end
|
44
|
+
class PROFILE_TYPE_HTTP; VALUE = 4; end
|
45
|
+
class PROFILE_TYPE_SERVER_SSL; VALUE = 5; end
|
46
|
+
class PROFILE_TYPE_CLIENT_SSL; VALUE = 6; end
|
47
|
+
class PROFILE_TYPE_AUTH; VALUE = 7; end
|
48
|
+
class PROFILE_TYPE_PERSISTENCE; VALUE = 8; end
|
49
|
+
class PROFILE_TYPE_CONNECTION_POOL; VALUE = 9; end
|
50
|
+
class PROFILE_TYPE_STREAM; VALUE = 10; end
|
51
|
+
class PROFILE_TYPE_XML; VALUE = 11; end
|
52
|
+
class PROFILE_TYPE_FAST_HTTP; VALUE = 12; end
|
53
|
+
class PROFILE_TYPE_IIOP; VALUE = 13; end
|
54
|
+
class PROFILE_TYPE_RTSP; VALUE = 14; end
|
55
|
+
class PROFILE_TYPE_STATISTICS; VALUE = 15; end
|
56
|
+
class PROFILE_TYPE_HTTPCLASS; VALUE = 16; end
|
57
|
+
class PROFILE_TYPE_DNS; VALUE = 17; end
|
58
|
+
class PROFILE_TYPE_SCTP; VALUE = 18; end
|
59
|
+
class PROFILE_TYPE_INSTANCE; VALUE = 19; end
|
60
|
+
class PROFILE_TYPE_SIPP; VALUE = 20 ; end
|
33
61
|
end
|
34
62
|
|
35
|
-
class PersistenceMode
|
36
|
-
include IControl::ConstDefiner
|
37
|
-
|
38
|
-
declare_constants [ :PERSISTENCE_MODE_NONE, :PERSISTENCE_MODE_SOURCE_ADDRESS_AFFINITY,
|
39
|
-
:PERSISTENCE_MODE_DESTINATION_ADDRESS_AFFINITY, :PERSISTENCE_MODE_COOKIE,
|
40
|
-
:PERSISTENCE_MODE_MSRDP, :PERSISTENCE_MODE_SSL_SID, :PERSISTENCE_MODE_SIP,
|
41
|
-
:PERSISTENCE_MODE_UIE, :PERSISTENCE_MODE_HASH ], PersistenceMode
|
42
|
-
|
43
|
-
end
|
44
63
|
|
45
|
-
|
64
|
+
class PersistenceMode
|
65
|
+
class PERSISTENCE_MODE_NONE ; VALUE = 0; end
|
66
|
+
class PERSISTENCE_MODE_SOURCE_ADDRESS_AFFINITY; VALUE = 1; end
|
67
|
+
class PERSISTENCE_MODE_DESTINATION_ADDRESS_AFFINITY; VALUE = 2; end
|
68
|
+
class PERSISTENCE_MODE_COOKIE; VALUE = 3; end
|
69
|
+
class PERSISTENCE_MODE_MSRDP; VALUE = 4; end
|
70
|
+
class PERSISTENCE_MODE_SSL_SID; VALUE = 5; end
|
71
|
+
class PERSISTENCE_MODE_SIP; VALUE = 6; end
|
72
|
+
class PERSISTENCE_MODE_UIE; VALUE = 7; end
|
73
|
+
class PERSISTENCE_MODE_HASH; VALUE = 8 ; end
|
74
|
+
end
|
46
75
|
end
|
47
76
|
end
|
@@ -8,20 +8,34 @@
|
|
8
8
|
IControl::LocalLB::VirtualServer
|
9
9
|
class IControl::LocalLB::VirtualServer
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
##
|
12
|
+
# A list of virtual server types.
|
13
|
+
module Type
|
14
|
+
# The virtual server is based on a pool.
|
15
|
+
class RESOURCE_TYPE_POOL ; VALUE = 0; end
|
16
|
+
# The virtual server only supports IP forwarding. There is no load balancing on this type of virtual server.
|
17
|
+
class RESOURCE_TYPE_IP_FORWARDING ; VALUE = 1; end
|
18
|
+
# The virtual server only supports L2 forwarding. There is no load balancing on this type of virtual server.
|
19
|
+
class RESOURCE_TYPE_L2_FORWARDING ; VALUE = 2; end
|
20
|
+
# All connections going to this virtual server will be rejected, and resets will be sent.
|
21
|
+
class RESOURCE_TYPE_REJECT ; VALUE = 3; end
|
22
|
+
# The virtual server is based on the Fast L4 profile.
|
23
|
+
class RESOURCE_TYPE_FAST_L4 ; VALUE = 4; end
|
24
|
+
# The virtual server is based on the Fast HTTP profile.
|
25
|
+
class RESOURCE_TYPE_FAST_HTTP ; VALUE = 5; end
|
17
26
|
end
|
18
27
|
|
28
|
+
##
|
29
|
+
# A list of CMP enable modes.
|
19
30
|
class CMPEnableMode
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
31
|
+
# The virtual server is enabled on all processing cores.
|
32
|
+
class RESOURCE_TYPE_CMP_ENABLE_ALL ; VALUE = 0; end
|
33
|
+
# The virtual server is enabled on a single processing core.
|
34
|
+
class RESOURCE_TYPE_CMP_ENABLE_SINGLE ; VALUE = 1; end
|
35
|
+
# The virtual server is enabled on a group of processing cores.
|
36
|
+
class RESOURCE_TYPE_CMP_ENABLE_GROUP ; VALUE = 2; end
|
37
|
+
|
38
|
+
class RESOURCE_TYPE_CMP_ENABLE_UNKNOWN ; VALUE = 3; end
|
25
39
|
end
|
26
40
|
|
27
41
|
class StatisticEntry
|
@@ -34,7 +48,7 @@ class IControl::LocalLB::VirtualServer
|
|
34
48
|
aux.virtual_server = IControl::LocalLB::VirtualServer.find(i[:virtual_server][:name])
|
35
49
|
aux.statistics = {}
|
36
50
|
i[:statistics][:item].each do |entry|
|
37
|
-
aux.statistics[IControl::Common::StatisticType.
|
51
|
+
aux.statistics[IControl::Common::StatisticType.const_get(entry[:type])] = IControl::Common::ULong64.new(entry[:value])
|
38
52
|
end
|
39
53
|
aux
|
40
54
|
end
|
@@ -46,7 +60,7 @@ class IControl::LocalLB::VirtualServer
|
|
46
60
|
attr_accessor :tmos_module ,:score
|
47
61
|
def initialize(attribules)
|
48
62
|
@score = attributes[:score]
|
49
|
-
@tmos_module = IControl::Common::TMOSModule.
|
63
|
+
@tmos_module = IControl::Common::TMOSModule.const_get(attributes[:tmos_module])
|
50
64
|
end
|
51
65
|
end
|
52
66
|
=begin
|
@@ -63,7 +77,7 @@ class IControl::LocalLB::VirtualServer
|
|
63
77
|
attr_accessor :pool,:clone_type
|
64
78
|
def initialize(attributes)
|
65
79
|
@pool = IControl::LocalLB::Pool.find(attributes[:pool_name])
|
66
|
-
@clone_type = IControl::LocalLB::ClonePoolType.
|
80
|
+
@clone_type = IControl::LocalLB::ClonePoolType.const_get(attributes[:type])
|
67
81
|
end
|
68
82
|
end
|
69
83
|
|
@@ -149,7 +163,7 @@ class IControl::LocalLB::VirtualServer
|
|
149
163
|
|
150
164
|
attributes[:profiles].each do |i|
|
151
165
|
if i.class == Hash
|
152
|
-
profiles["item#{item+=1}"] = {"profile_context" => i["profile_context"].
|
166
|
+
profiles["item#{item+=1}"] = {"profile_context" => i["profile_context"].name.split("::").last,"profile_name" => ( i["profile"] ? i["profile"] : "tcp" ) }
|
153
167
|
else
|
154
168
|
profiles["item#{item+=1}"] = {"profile_context" => i.profile_context,"profile_name" => i.profile_name || "tcp" }
|
155
169
|
end
|
@@ -160,12 +174,12 @@ class IControl::LocalLB::VirtualServer
|
|
160
174
|
:name => attributes[:name],
|
161
175
|
:address => attributes[:address],
|
162
176
|
"port" => attributes[:port],
|
163
|
-
:protocol => (attributes[:protocol] || IControl::Common::ProtocolType::PROTOCOL_TCP).
|
177
|
+
:protocol => (attributes[:protocol] || IControl::Common::ProtocolType::PROTOCOL_TCP).name.split("::").last
|
164
178
|
}
|
165
179
|
},
|
166
180
|
"wildmasks" => {:item => attributes[:wildmask] || "255.255.255.255"},
|
167
181
|
"resources" => {:item => {
|
168
|
-
:type => (attributes[:type] || IControl::LocalLB::VirtualServer::Type::RESOURCE_TYPE_POOL).
|
182
|
+
:type => (attributes[:type] || IControl::LocalLB::VirtualServer::Type::RESOURCE_TYPE_POOL).name.split("::").last,
|
169
183
|
"default_pool_name" => attributes[:default_pool] ? attributes[:default_pool].id : ""
|
170
184
|
}
|
171
185
|
},
|
@@ -203,7 +217,7 @@ class IControl::LocalLB::VirtualServer
|
|
203
217
|
IControl::LocalLB::VirtualServer.set_type do |soap|
|
204
218
|
soap.body = {
|
205
219
|
"virtual_servers" => {:item => id},
|
206
|
-
"types" => {:item => new_type.
|
220
|
+
"types" => {:item => new_type.name.split("::").last}
|
207
221
|
}
|
208
222
|
end
|
209
223
|
end
|
@@ -244,12 +258,20 @@ class IControl::LocalLB::VirtualServer
|
|
244
258
|
super
|
245
259
|
end
|
246
260
|
|
261
|
+
def disable
|
262
|
+
self.enabled_state= IControl::Common::EnabledState::STATE_DISABLED
|
263
|
+
end
|
264
|
+
|
265
|
+
def enable
|
266
|
+
self.enabled_state= IControl::Common::EnabledState::STATE_ENABLED
|
267
|
+
end
|
268
|
+
|
247
269
|
# Sets the enabled state of the specified virtual servers.
|
248
270
|
def enabled_state=(state)
|
249
271
|
IControl::LocalLB::VirtualServer.set_enabled_state do |soap|
|
250
272
|
soap.body = {
|
251
273
|
"virtual_servers" => {:item => id},
|
252
|
-
"states" => {:item => state.
|
274
|
+
"states" => {:item => state.name.split("::").last}
|
253
275
|
}
|
254
276
|
end if state
|
255
277
|
end
|
@@ -274,7 +296,7 @@ class IControl::LocalLB::VirtualServer
|
|
274
296
|
|
275
297
|
def connection_mirror_state=(state)
|
276
298
|
IControl::LocalLB::VirtualServer.set_connection_mirror_state do |soap|
|
277
|
-
soap.body = {"virtual_servers" => {:item => id},:states => {:item => state.
|
299
|
+
soap.body = {"virtual_servers" => {:item => id},:states => {:item => state.name.split("::").last }}
|
278
300
|
end
|
279
301
|
end
|
280
302
|
|
@@ -286,7 +308,10 @@ class IControl::LocalLB::VirtualServer
|
|
286
308
|
# Sets the connection limits of the specified virtual server.
|
287
309
|
def connection_limit=(limit)
|
288
310
|
IControl::LocalLB::VirtualServer.set_connection_limit do |soap|
|
289
|
-
|
311
|
+
limit = limit.is_a?(IControl::Common::ULong64) ? limit : IControl::Common::ULong64.new(:low => limit)
|
312
|
+
soap.body = {
|
313
|
+
"virtual_servers" => {:item => id},
|
314
|
+
:limits => {:item => limit.to_hash}}
|
290
315
|
end
|
291
316
|
end
|
292
317
|
|
@@ -363,6 +388,7 @@ private
|
|
363
388
|
|
364
389
|
public
|
365
390
|
|
391
|
+
|
366
392
|
# Gets the lists of VLANs on which access to the specified Virtual Servers are enabled/disabled.
|
367
393
|
def vlan
|
368
394
|
super
|
@@ -418,10 +444,37 @@ public
|
|
418
444
|
super
|
419
445
|
end
|
420
446
|
|
447
|
+
|
448
|
+
def remove_all_persistence_profiles!
|
449
|
+
IControl::LocalLB::VirtualServer.remove_all_persistence_profiles do |soap|
|
450
|
+
soap.body = {
|
451
|
+
"virtual_servers" => {:item => id }
|
452
|
+
}
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
421
456
|
def persistence_profile=(persistence_profile)
|
457
|
+
self.remove_all_persistence_profiles!
|
422
458
|
add_persistence_profile(persistence_profile)
|
423
459
|
end
|
424
460
|
|
461
|
+
|
462
|
+
def remove_persistence_profile(persistence_profile)
|
463
|
+
IControl::LocalLB::VirtualServer.remove_persistence_profile do |soap|
|
464
|
+
soap.body = {
|
465
|
+
"virtual_servers" => {:item => id},
|
466
|
+
"profiles" => {:item => {:item => {"profile_name" => persistence_profile.profile_name,"default_profile" => persistence_profile.default_profile}}}
|
467
|
+
}
|
468
|
+
end if persistence_profile && persistence_profile!= ""
|
469
|
+
end
|
470
|
+
|
471
|
+
|
472
|
+
def default_persistence_profile=(persistence_profile)
|
473
|
+
self.remove_persistence_profile(persistence_profile)
|
474
|
+
persistence_profile.default_profile = true
|
475
|
+
self.add_persistence_profile(persistence_profile)
|
476
|
+
end
|
477
|
+
|
425
478
|
def add_persistence_profile(persistence_profile)
|
426
479
|
IControl::LocalLB::VirtualServer.add_persistence_profile do |soap|
|
427
480
|
soap.body = {
|
@@ -465,7 +518,7 @@ public
|
|
465
518
|
IControl::LocalLB::VirtualServer.add_rule do |soap|
|
466
519
|
item = "item"; count = 0
|
467
520
|
my_rules = {}
|
468
|
-
rules.each{ |i| my_rules[item + (count +=1).to_s] = {"rule_name" => i.class == String ? i : i.
|
521
|
+
rules.each{ |i| my_rules[item + (count +=1).to_s] = {"rule_name" => i.class == String ? i : i.rule_name, "priority" => count } }
|
469
522
|
soap.body = {
|
470
523
|
"virtual_servers" => {:item => id},
|
471
524
|
"rules" => {"value" => my_rules }
|
@@ -524,7 +577,7 @@ public
|
|
524
577
|
IControl::LocalLB::VirtualServer.set_protocol do |soap|
|
525
578
|
soap.body = {
|
526
579
|
"virtual_servers" => {:item => id},
|
527
|
-
"protocols" => {:item => protocol.
|
580
|
+
"protocols" => {:item => protocol.name.split("::").last }
|
528
581
|
}
|
529
582
|
end
|
530
583
|
end
|
@@ -548,11 +601,11 @@ public
|
|
548
601
|
end
|
549
602
|
|
550
603
|
def enable_cmp!
|
551
|
-
cmp_enabled_state = IControl::Common::EnabledState::STATE_ENABLED
|
604
|
+
self.cmp_enabled_state = IControl::Common::EnabledState::STATE_ENABLED
|
552
605
|
end
|
553
606
|
|
554
607
|
def disable_cmp!
|
555
|
-
cmp_enabled_state = IControl::Common::EnabledState::STATE_DISABLED
|
608
|
+
self.cmp_enabled_state = IControl::Common::EnabledState::STATE_DISABLED
|
556
609
|
end
|
557
610
|
|
558
611
|
# Sets the translate cmp address state receives a EnabledState constant
|
@@ -572,7 +625,7 @@ public
|
|
572
625
|
"virtual_servers" => {:item => id},
|
573
626
|
"snatpools" => {:item => snat_pool.id}
|
574
627
|
}
|
575
|
-
end
|
628
|
+
end if snat_pool
|
576
629
|
end
|
577
630
|
|
578
631
|
def destroy
|
@@ -588,8 +641,19 @@ public
|
|
588
641
|
end
|
589
642
|
|
590
643
|
def vlan=(vlan)
|
591
|
-
|
592
|
-
|
644
|
+
count=0;
|
645
|
+
vlans = {}
|
646
|
+
vlan.vlans.each { |i| vlans["item#{count+=1}"]=i}
|
647
|
+
IControl::LocalLB::VirtualServer.set_vlan do |soap|
|
648
|
+
soap.body = {
|
649
|
+
"virtual_servers" => {:item => id},
|
650
|
+
"vlans" => { :item =>
|
651
|
+
{ :state => vlan.state.name.split("::").last,
|
652
|
+
:vlans => vlans
|
653
|
+
}
|
654
|
+
}
|
655
|
+
}
|
656
|
+
end
|
593
657
|
end
|
594
658
|
|
595
659
|
=begin
|