icontrol 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|