netscaler 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.rdoc +2 -0
- data/VERSION +1 -1
- data/lib/netscaler/connection.rb +14 -3
- data/lib/netscaler/http_adapter.rb +5 -1
- data/lib/netscaler/lb.rb +22 -0
- data/lib/netscaler/lb/monitor.rb +37 -0
- data/lib/netscaler/lb/vserver.rb +52 -0
- data/lib/netscaler/lb/vserver/bind.rb +27 -0
- data/lib/netscaler/lb/vserver/unbind.rb +29 -0
- data/lib/netscaler/mock_adapter.rb +6 -0
- data/lib/netscaler/monkey_patches.rb +3 -1
- data/lib/netscaler/policy/stringmap.rb +4 -8
- data/lib/netscaler/server.rb +21 -4
- data/lib/netscaler/service.rb +57 -5
- data/lib/netscaler/servicegroup.rb +72 -9
- data/netscaler.gemspec +9 -3
- data/spec/lbvserver_spec.rb +175 -0
- data/spec/netscaler_spec.rb +10 -0
- data/spec/server_spec.rb +32 -6
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTM3NDRkODQzNmM4MzYyMDhkZmZhYzFkODYzM2M5ZDdiODI0Mzc4ZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmMxMWVjMzk2Yjc2ZTAyZTRmOTlhYzEzMWJlY2M2OTUwMTI5NTMxMw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGQ5YmJjOTkyNTE0ZjQxNTY0MWQ0MWMxOWE2ZDJmMjVkZTcwMWVkOWVmMWRh
|
10
|
+
Y2UwNDIyNDlkNWJmMjQ1ZWNmZWY3MWY0YjE4NDE0MmVlN2U1NTU3MzhhOWE3
|
11
|
+
YjlhM2ZiOTUxZjJlYTI0MjYzZWM3NmI1NWEwYmQxZWQ0NjhjZWU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZDM0MmI5YzcxYzU4OTAxZDRmNzJiZWQ5ZGYyN2ZlZGZlOGNjN2NlNGUxYzc0
|
14
|
+
ZDYwY2RmZTAyYmFiMmVlNWQxNTM4OGY1MmY4M2JjZDM3OWIxYTA1NjA0ZGVi
|
15
|
+
NWJhYTNiNWUzM2QwNTcxM2MzZjdjNWMzMzFkMmMzODg2YTk1N2U=
|
data/README.rdoc
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/GravityLabs/netscaler.svg?branch=master)](https://travis-ci.org/GravityLabs/netscaler)
|
2
|
+
|
1
3
|
= Netscaler Gem
|
2
4
|
|
3
5
|
A gem that uses the Netscaler {Nitro API}[http://support.citrix.com/proddocs/topic/netscaler-main-api-10-map/ns-nitro-wrapper-con.html] to access configs and stats. This has been tested only on Netscaler 9.3. Hoping to have Netscaler 10.0 support added in the near future.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/netscaler/connection.rb
CHANGED
@@ -10,6 +10,7 @@ require 'netscaler/load_balancing'
|
|
10
10
|
require 'netscaler/http_adapter'
|
11
11
|
require 'netscaler/adapter'
|
12
12
|
require 'netscaler/policy'
|
13
|
+
require 'netscaler/lb'
|
13
14
|
|
14
15
|
module Netscaler
|
15
16
|
class Connection
|
@@ -22,14 +23,16 @@ module Netscaler
|
|
22
23
|
|
23
24
|
raise ArgumentError, "Required options are missing. #{missing_options.join(', ')}" if missing_options.length > 0
|
24
25
|
|
25
|
-
@username
|
26
|
-
@password
|
27
|
-
@
|
26
|
+
@username = options[:username]
|
27
|
+
@password = options[:password]
|
28
|
+
@verify_ssl = options[:verify_ssl].nil? ? true : options[:verify_ssl]
|
29
|
+
@adapter = HttpAdapter.new :hostname => "https://#{options[:hostname]}", :username => @username, :password => @password, :verify_ssl => @verify_ssl
|
28
30
|
@load_balancing = LoadBalancing.new self
|
29
31
|
@service = Service.new self
|
30
32
|
@servicegroups = ServiceGroup.new self
|
31
33
|
@servers = Server.new self
|
32
34
|
@policy = Policy.new self
|
35
|
+
@lb = Lb.new self
|
33
36
|
end
|
34
37
|
|
35
38
|
def adapter
|
@@ -56,6 +59,10 @@ module Netscaler
|
|
56
59
|
@policy
|
57
60
|
end
|
58
61
|
|
62
|
+
def lb
|
63
|
+
@lb
|
64
|
+
end
|
65
|
+
|
59
66
|
def servers
|
60
67
|
return @servers
|
61
68
|
end
|
@@ -64,6 +71,10 @@ module Netscaler
|
|
64
71
|
return @adapter.session
|
65
72
|
end
|
66
73
|
|
74
|
+
def verify_ssl
|
75
|
+
return @verify_ssl
|
76
|
+
end
|
77
|
+
|
67
78
|
def login()
|
68
79
|
payload = {
|
69
80
|
'username' => @username,
|
@@ -5,7 +5,11 @@ require 'json'
|
|
5
5
|
module Netscaler
|
6
6
|
class HttpAdapter < Adapter
|
7
7
|
def initialize(args)
|
8
|
-
@site=RestClient::Resource.new
|
8
|
+
@site = RestClient::Resource.new(args[:hostname], {
|
9
|
+
:user => args[:username],
|
10
|
+
:password => args[:password],
|
11
|
+
:verify_ssl => args[:verify_ssl]
|
12
|
+
})
|
9
13
|
end
|
10
14
|
|
11
15
|
def post_no_body(part, data, args={})
|
data/lib/netscaler/lb.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'netscaler/lb/monitor'
|
2
|
+
require 'netscaler/lb/vserver'
|
3
|
+
require 'netscaler/lb/vserver/bind'
|
4
|
+
require 'netscaler/lb/vserver/unbind'
|
5
|
+
|
6
|
+
module Netscaler
|
7
|
+
class Lb
|
8
|
+
|
9
|
+
def initialize(netscaler)
|
10
|
+
@netscaler = netscaler
|
11
|
+
end
|
12
|
+
|
13
|
+
def monitor
|
14
|
+
Monitor.new @netscaler
|
15
|
+
end
|
16
|
+
|
17
|
+
def vserver
|
18
|
+
Vserver.new @netscaler
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'netscaler/netscaler_service'
|
2
|
+
|
3
|
+
module Netscaler
|
4
|
+
class Lb
|
5
|
+
class Monitor < NetscalerService
|
6
|
+
|
7
|
+
def initialize(netscaler)
|
8
|
+
@netscaler = netscaler
|
9
|
+
end
|
10
|
+
|
11
|
+
def bind(payload) # :args: :monitorName => 'http', :entityName => 'foo' :entityType => '[service|servicegroup]'
|
12
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
13
|
+
validate_payload(payload, [:monitorName, :entityName, :entityType])
|
14
|
+
valid_entityTypes = %w(service servicegroup)
|
15
|
+
raise ArgumentError, ":entityType does not equal one of the following: #{valid_entityTypes.flatten}" unless valid_entityTypes.include?(payload[:entityType])
|
16
|
+
new_payload = {:monitorName => payload[:monitorName],
|
17
|
+
:"#{payload[:entityType]}Name" => payload[:entityName]}
|
18
|
+
|
19
|
+
return @netscaler.adapter.post_no_body("config/lbmonitor_#{payload[:entityType]}_binding/#{payload[:monitorName]}?action=bind",
|
20
|
+
{'params' => {'action' => 'bind'}, "lbmonitor_#{payload[:entityType]}_binding" => new_payload})
|
21
|
+
end
|
22
|
+
|
23
|
+
def unbind(payload) # :args: :monitorName => 'http', :entityName => 'foo' :entityType => '[service|servicegroup]'
|
24
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
25
|
+
validate_payload(payload, [:monitorName, :entityName, :entityType])
|
26
|
+
valid_entityTypes = %w(service servicegroup)
|
27
|
+
raise ArgumentError, ":entityType does not equal one of the following: #{valid_entityTypes.flatten}" unless valid_entityTypes.include?(payload[:entityType])
|
28
|
+
new_payload = {:monitorName => payload[:monitorName],
|
29
|
+
:"#{payload[:entityType]}Name" => payload[:entityName]}
|
30
|
+
|
31
|
+
return @netscaler.adapter.post_no_body("config/lbmonitor_servicegroup_binding/#{payload[:monitorName]}?action=unbind",
|
32
|
+
{'params' => {'action' => 'unbind'}, 'lbmonitor_servicegroup_binding' => new_payload})
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'netscaler/netscaler_service'
|
2
|
+
|
3
|
+
module Netscaler
|
4
|
+
class Lb
|
5
|
+
class Vserver < NetscalerService
|
6
|
+
def initialize(netscaler)
|
7
|
+
@netscaler=netscaler
|
8
|
+
end
|
9
|
+
|
10
|
+
def show(payload={})
|
11
|
+
if payload[:name] != nil then
|
12
|
+
validate_payload(payload, [:name])
|
13
|
+
return @netscaler.adapter.get("config/lbvserver/#{payload[:name]}")
|
14
|
+
elsif payload == {} then
|
15
|
+
return @netscaler.adapter.get('config/lbvserver/')
|
16
|
+
else
|
17
|
+
raise ArgumentError, 'payload supplied must have been missing :name'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def show_binding(payload)
|
22
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
23
|
+
payload = Netscaler.hash_hack(payload)
|
24
|
+
validate_payload(payload, [:name])
|
25
|
+
return @netscaler.adapter.get("config/lbvserver_binding/#{payload[:name]}")
|
26
|
+
end
|
27
|
+
|
28
|
+
def remove(payload) # :args: :name
|
29
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
30
|
+
payload = Netscaler.hash_hack(payload)
|
31
|
+
validate_payload(payload, [:name])
|
32
|
+
return @netscaler.adapter.delete("config/lbvserver/#{payload[:name]}")
|
33
|
+
end
|
34
|
+
|
35
|
+
def add(payload)
|
36
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
37
|
+
payload = Netscaler.hash_hack(payload)
|
38
|
+
validate_payload(payload, [:name, :serviceType, :ipv46, :port])
|
39
|
+
return @netscaler.adapter.post_no_body('config/lbvserver/', {'lbvserver' => payload})
|
40
|
+
end
|
41
|
+
|
42
|
+
def bind
|
43
|
+
Bind.new @netscaler
|
44
|
+
end
|
45
|
+
|
46
|
+
def unbind
|
47
|
+
Unbind.new @netscaler
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Netscaler
|
2
|
+
class Lb
|
3
|
+
class Vserver
|
4
|
+
class Bind < NetscalerService
|
5
|
+
def initialize(netscaler)
|
6
|
+
@netscaler=netscaler
|
7
|
+
end
|
8
|
+
|
9
|
+
def service(payload)
|
10
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
11
|
+
validate_payload(payload, [:name, :serviceName])
|
12
|
+
return @netscaler.adapter.post_no_body("config/lbvserver_service_binding/#{payload['name']}?action=bind/", {'params' => {'action' => 'bind'}, 'lbvserver_service_binding' => payload})
|
13
|
+
end
|
14
|
+
|
15
|
+
def rewrite_policy(payload)
|
16
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
17
|
+
validate_payload(payload, [:name, :policyName, :priority, :bindpoint])
|
18
|
+
return @netscaler.adapter.post_no_body("config/lbvserver_service_binding/#{payload['name']}?action=bind/", {'params' => {'action' => 'bind'}, 'lbvserver_rewritepolicy_binding' => payload})
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#require 'netscaler/netscaler_service'
|
2
|
+
module Netscaler
|
3
|
+
class Lb
|
4
|
+
class Vserver
|
5
|
+
class Unbind < NetscalerService
|
6
|
+
def initialize(netscaler)
|
7
|
+
@netscaler=netscaler
|
8
|
+
end
|
9
|
+
|
10
|
+
def service(payload)
|
11
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
12
|
+
validate_payload(payload, [:name, :serviceName])
|
13
|
+
return @netscaler.adapter.post_no_body("config/lbvserver_service_binding/#{payload['name']}?action=unbind/", {'params' => {'action' => 'unbind'}, 'lbvserver_service_binding' => payload})
|
14
|
+
end
|
15
|
+
|
16
|
+
def rewrite_policy(payload)
|
17
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
18
|
+
validate_payload(payload, [:name, :policyName])
|
19
|
+
return @netscaler.adapter.post_no_body("config/lbvserver_service_binding/#{payload['name']}?action=bind/", {'params' => {'action' => 'unbind'}, 'lbvserver_rewritepolicy_binding' => payload})
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
|
@@ -1,5 +1,7 @@
|
|
1
1
|
module Netscaler
|
2
|
-
|
2
|
+
# #hash_hack is mainly used in all the methods to provide backward compatibility for the older methods.
|
3
|
+
# Prior to this the method argument keys were string. We later made them to symbols. This allows users
|
4
|
+
# to use both but will eventually deprecate this.
|
3
5
|
def self.hash_hack(hash)
|
4
6
|
raise ArgumentError, 'payload must be a hash.' unless hash.is_a?(Hash)
|
5
7
|
hash.default_proc = proc{|h, k| h.key?(k.to_s) ? h[k.to_s] : nil}
|
@@ -7,9 +7,8 @@ module Netscaler
|
|
7
7
|
@netscaler = netscaler
|
8
8
|
end
|
9
9
|
|
10
|
-
def list(payload = nil)
|
10
|
+
def list(payload = nil) # :args: :name => 'foo'
|
11
11
|
if payload !=nil then
|
12
|
-
payload = Netscaler.hash_hack(payload)
|
13
12
|
validate_payload(payload, [:name])
|
14
13
|
return @netscaler.adapter.get("config/policystringmap/#{payload[:name]}")
|
15
14
|
else
|
@@ -17,23 +16,20 @@ module Netscaler
|
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
|
-
def add(payload)
|
19
|
+
def add(payload) # :args: :name => 'foo'
|
21
20
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
22
|
-
payload = Netscaler.hash_hack(payload)
|
23
21
|
validate_payload(payload, [:name])
|
24
22
|
return @netscaler.adapter.post_no_body('config/policystringmap/', 'policystringmap' => payload)
|
25
23
|
end
|
26
24
|
|
27
|
-
def get(payload)
|
25
|
+
def get(payload) # :args: :name => 'foo'
|
28
26
|
raise ArgumentError, 'arg must contain name of policystringmap! :name => "foo"' if payload.nil?
|
29
|
-
payload = Netscaler.hash_hack(payload)
|
30
27
|
validate_payload(payload, [:name])
|
31
28
|
return @netscaler.adapter.get("config/policystringmap_pattern_binding/#{payload[:name]}")
|
32
29
|
end
|
33
30
|
|
34
|
-
def bind(payload)
|
31
|
+
def bind(payload) # :args: :name => 'foo', :key => 'a', :value => '1'
|
35
32
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
36
|
-
payload = Netscaler.hash_hack(payload)
|
37
33
|
validate_payload(payload, [:name, :key, :value])
|
38
34
|
return @netscaler.adapter.post_no_body('config/policystringmap_pattern_binding/', 'policystringmap_pattern_binding' => payload)
|
39
35
|
end
|
data/lib/netscaler/server.rb
CHANGED
@@ -6,16 +6,33 @@ module Netscaler
|
|
6
6
|
@netscaler = netscaler
|
7
7
|
end
|
8
8
|
|
9
|
-
|
9
|
+
##
|
10
|
+
# method #add requires arg :name but :ipaddress and :domain are optional but requires one of them.
|
11
|
+
def add(server) # :args: :name => 'foo', :ipaddress => '192.168.1.10', :domain => 'bar.com'
|
10
12
|
raise ArgumentError, 'server cannot be null' if server.nil?
|
11
13
|
server = Netscaler.hash_hack(server)
|
12
|
-
if server[:
|
13
|
-
validate_payload(server, [:name, :ipaddress])
|
14
|
-
else
|
14
|
+
if server[:domain] != nil then
|
15
15
|
validate_payload(server, [:name, :domain])
|
16
|
+
else
|
17
|
+
validate_payload(server, [:name, :ipaddress])
|
16
18
|
end
|
17
19
|
|
18
20
|
return @netscaler.adapter.post_no_body('config/server/', {'server' => server})
|
19
21
|
end
|
22
|
+
|
23
|
+
def remove(payload) # :args: :server
|
24
|
+
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
25
|
+
payload = Netscaler.hash_hack(payload)
|
26
|
+
validate_payload(payload, [:server])
|
27
|
+
return @netscaler.adapter.delete("config/server/#{payload[:server]}")
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# :category: Deprecated Methods
|
32
|
+
# DEPRECATED: Please use #add instead=.
|
33
|
+
def add_server(server)
|
34
|
+
warn '[DEPRECATION] "add_server" is deprecated. Please use "#add" instead.'
|
35
|
+
self.add server
|
36
|
+
end
|
20
37
|
end
|
21
38
|
end
|
data/lib/netscaler/service.rb
CHANGED
@@ -1,52 +1,104 @@
|
|
1
1
|
require 'netscaler/netscaler_service'
|
2
2
|
|
3
3
|
module Netscaler
|
4
|
+
##
|
5
|
+
# Netscaler::Service handles all service entity calls.
|
6
|
+
# This includes #add, #enable, #disable and #show
|
4
7
|
class Service < NetscalerService
|
5
8
|
def initialize(netscaler)
|
6
9
|
@netscaler=netscaler
|
7
10
|
end
|
8
11
|
|
9
|
-
|
12
|
+
##
|
13
|
+
# This method require you already have a server created using Netscaler::Server#add
|
14
|
+
# or if it is already configured on the netscaler.
|
15
|
+
def add(payload) # :args: :name, :serverName, :serviceType, :port
|
10
16
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
11
17
|
payload = Netscaler.hash_hack(payload)
|
12
18
|
validate_payload(payload, [:name, :serverName, :serviceType, :port])
|
13
19
|
return @netscaler.adapter.post_no_body('config/service/', {'service' => payload})
|
14
20
|
end
|
15
21
|
|
16
|
-
|
17
|
-
|
22
|
+
##
|
23
|
+
# :category: Deprecated Methods
|
24
|
+
# DEPRECATED: Please use #add instead=.
|
25
|
+
def add_service(payload)
|
26
|
+
warn '[DEPRECATION] "add_service" is deprecated. Please use "#add" instead.'
|
27
|
+
self.add(payload)
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# :serverName is optional, if omitted it will return all services
|
32
|
+
# configured on the Netscaler.
|
33
|
+
def show(payload) # :args: :serverName => 'foo'
|
34
|
+
return @netscaler.adapter.get('config/service/', args) if payload.nil?
|
18
35
|
payload = Netscaler.hash_hack(payload)
|
19
36
|
validate_payload(payload, [:serviceName])
|
20
37
|
return @netscaler.adapter.get("config/service/#{payload[:serviceName]}")
|
21
38
|
end
|
22
39
|
|
40
|
+
##
|
41
|
+
# :category: Deprecated Methods
|
42
|
+
# DEPRECATED: Please use #show instead=.
|
43
|
+
def get_service(payload)
|
44
|
+
warn '[DEPRECATION] "get_service" is deprecated. Please use "#show" instead.'
|
45
|
+
self.show(payload)
|
46
|
+
end
|
47
|
+
|
48
|
+
##
|
49
|
+
# :category: Deprecated Methods
|
50
|
+
# DEPRECATED: Please use #show instead=.
|
23
51
|
def get_services(args={})
|
52
|
+
warn '[DEPRECATION] "get_services" is deprecated. Please use "#show" instead.'
|
24
53
|
return @netscaler.adapter.get('config/service/', args)
|
25
54
|
end
|
26
55
|
|
27
|
-
def
|
56
|
+
def enable(payload) # :args: :name => 'foo'
|
28
57
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
29
58
|
payload = Netscaler.hash_hack(payload)
|
30
59
|
validate_payload(payload, [:name])
|
31
60
|
return @netscaler.adapter.post_no_body('config/service/', {'params' => {'action' => 'enable'}, 'service' => payload})
|
32
61
|
end
|
33
62
|
|
34
|
-
|
63
|
+
##
|
64
|
+
# :category: Deprecated Methods
|
65
|
+
# DEPRECATED: Please use #enable instead=.
|
66
|
+
def enable_service(payload)
|
67
|
+
warn '[DEPRECATION] "enable_service" is deprecated. Please use "#enable" instead.'
|
68
|
+
self.enable(payload)
|
69
|
+
end
|
70
|
+
|
71
|
+
def disable(payload) # :args: :name => 'foo'
|
35
72
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
36
73
|
payload = Netscaler.hash_hack(payload)
|
37
74
|
validate_payload(payload, [:name])
|
38
75
|
return @netscaler.adapter.post_no_body('config/service/', {'params' => {'action' => 'disable'}, 'service' => payload})
|
39
76
|
end
|
40
77
|
|
78
|
+
##
|
79
|
+
# :category: Deprecated Methods
|
80
|
+
# DEPRECATED: Please use #disable instead=.
|
81
|
+
def disable_service(payload)
|
82
|
+
warn '[DEPRECATION] "disable_service" is deprecated. Please use "#disable" instead.'
|
83
|
+
self.disable(payload)
|
84
|
+
end
|
41
85
|
|
86
|
+
##
|
87
|
+
# :category: Deprecated Methods
|
88
|
+
# DEPRECATED: Please use Netscaler::Lb::Monitor.bind instead=.
|
42
89
|
def lbmonitor_service_binding(payload)
|
90
|
+
warn '[DEPRECATION] "lbmonitor_service_binding" is deprecated. Please use "Netscaler::Lb::Monitor.bind" instead.'
|
43
91
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
44
92
|
payload = Netscaler.hash_hack(payload)
|
45
93
|
validate_payload(payload, [:serviceName, :monitorName])
|
46
94
|
return @netscaler.adapter.post_no_body("config/lbmonitor_service_binding/#{payload[:monitorName]}?action=bind", {'params' => {'action' => 'bind'}, 'lbmonitor_service_binding' => payload})
|
47
95
|
end
|
48
96
|
|
97
|
+
##
|
98
|
+
# :category: Deprecated Methods
|
99
|
+
# DEPRECATED: Please use Netscaler::Lb::Monitor.unbind instead=.
|
49
100
|
def lbmonitor_service_unbinding(payload)
|
101
|
+
warn '[DEPRECATION] "lbmonitor_service_binding" is deprecated. Please use "Netscaler::Lb::Monitor.bind" instead.'
|
50
102
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
51
103
|
payload = Netscaler.hash_hack(payload)
|
52
104
|
validate_payload(payload, [:serviceName, :monitorName])
|
@@ -6,60 +6,123 @@ module Netscaler
|
|
6
6
|
@netscaler=netscaler
|
7
7
|
end
|
8
8
|
|
9
|
-
def
|
9
|
+
def add(payload) # :args: :serviceGroupName => 'foo', :serviceType => 'HTTP'
|
10
10
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
11
11
|
payload = Netscaler.hash_hack(payload)
|
12
12
|
validate_payload(payload, [:serviceGroupName, :serviceType])
|
13
13
|
return @netscaler.adapter.post_no_body("config/servicegroup/", "servicegroup" => payload)
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
##
|
17
|
+
# :category: Deprecated Methods
|
18
|
+
# DEPRECATED: Please use #add instead=.
|
19
|
+
def add_servicegroup(payload)
|
20
|
+
warn '[DEPRECATION] "add_servicegroup" is deprecated. Please use "#add" instead.'
|
21
|
+
self.add(payload)
|
22
|
+
end
|
23
|
+
|
24
|
+
def remove(payload) # :arg: serviceGroupName
|
17
25
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
18
26
|
payload = Netscaler.hash_hack(payload)
|
19
27
|
validate_payload(payload, [:serviceGroupName])
|
20
28
|
return @netscaler.adapter.delete("config/servicegroup/#{payload[:serviceGroupName]}")
|
21
29
|
end
|
22
30
|
|
23
|
-
|
24
|
-
|
31
|
+
##
|
32
|
+
# :category: Deprecated Methods
|
33
|
+
# DEPRECATED: Please use #remove instead=.
|
34
|
+
def remove_servicegroup(payload)
|
35
|
+
warn '[DEPRECATION] "remove_servicegroup" is deprecated. Please use "#remove" instead.'
|
36
|
+
self.remove(payload)
|
37
|
+
end
|
38
|
+
|
39
|
+
##
|
40
|
+
# argument is optional, if left empty it will return all servicegroups
|
41
|
+
def show(payload) # :arg: servicegroupname
|
42
|
+
return @netscaler.adapter.get("config/servicegroup/", args) if payload.nil?
|
25
43
|
return @netscaler.adapter.get("config/servicegroup/#{payload}")
|
26
44
|
end
|
27
45
|
|
28
|
-
|
29
|
-
|
46
|
+
##
|
47
|
+
# :category: Deprecated Methods
|
48
|
+
# DEPRECATED: Please use #show instead=.
|
49
|
+
def get_servicegroup(payload)
|
50
|
+
warn '[DEPRECATION] "get_servicegroup" is deprecated. Please use "#show" instead.'
|
51
|
+
self.show(payload)
|
52
|
+
end
|
53
|
+
|
54
|
+
##
|
55
|
+
# :category: Deprecated Methods
|
56
|
+
# DEPRECATED: Please use #show instead=.
|
57
|
+
def get_servicegroups(payload)
|
58
|
+
warn '[DEPRECATION] "get_servicegroup" is deprecated. Please use "#show" instead.'
|
59
|
+
self.show(payload)
|
30
60
|
end
|
31
61
|
|
32
|
-
def
|
62
|
+
def show_bindings(payload) # :args: servicegroupname
|
33
63
|
return @netscaler.adapter.get("config/servicegroup_servicegroupmember_binding/#{payload}")
|
34
64
|
end
|
35
65
|
|
66
|
+
##
|
67
|
+
# :category: Deprecated Methods
|
68
|
+
# DEPRECATED: Please use #show_bindings instead=.
|
69
|
+
def get_servicegroup_servicegroupmember_bindings(payload)
|
70
|
+
warn '[DEPRECATION] "get_servicegroup_servicegroupmember_bindings" is deprecated. Please use "#show_bindings" instead.'
|
71
|
+
self.show_bindings(payload)
|
72
|
+
end
|
73
|
+
|
74
|
+
##
|
75
|
+
# :category: Deprecated Methods
|
76
|
+
# DEPRECATED: Please use Netscaler::Lb::Monitor.bind instead=.
|
36
77
|
def lbmonitor_servicegroup_binding(payload)
|
78
|
+
warn '[DEPRECATION] "lbmonitor_servicegroup_binding" is deprecated. Please use "Netscaler::Lb::Monitor.bind" instead.'
|
37
79
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
38
80
|
payload = Netscaler.hash_hack(payload)
|
39
81
|
validate_payload(payload, [:serviceGroupName, :monitorName])
|
40
82
|
return @netscaler.adapter.post_no_body("config/lbmonitor_servicegroup_binding/#{payload[:monitorName]}?action=bind", {'params' => {'action' => 'bind'}, 'lbmonitor_servicegroup_binding' => payload})
|
41
83
|
end
|
42
84
|
|
85
|
+
##
|
86
|
+
# :category: Deprecated Methods
|
87
|
+
# DEPRECATED: Please use Netscaler::Lb::Monitor.unbind instead=.
|
43
88
|
def lbmonitor_servicegroup_unbinding(payload)
|
89
|
+
warn '[DEPRECATION] "lbmonitor_servicegroup_unbinding" is deprecated. Please use "Netscaler::Lb::Monitor.unbind" instead.'
|
44
90
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
45
91
|
payload = Netscaler.hash_hack(payload)
|
46
92
|
validate_payload(payload, [:serviceGroupName, :monitorName])
|
47
93
|
return @netscaler.adapter.post_no_body("config/lbmonitor_servicegroup_binding/#{payload[:monitorName]}?action=unbind", {'params' => {'action' => 'unbind'}, 'lbmonitor_servicegroup_binding' => payload})
|
48
94
|
end
|
49
95
|
|
50
|
-
def
|
96
|
+
def bind(payload) # :args: :serviceGroupName => 'foo', :port => '80', :serverName => 'bar'
|
51
97
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
52
98
|
payload = Netscaler.hash_hack(payload)
|
53
99
|
validate_payload(payload, [:serviceGroupName, :port, :serverName])
|
54
100
|
return @netscaler.adapter.post_no_body("config/servicegroup_servicegroupmember_binding/#{payload['serviceGroupName']}?action=bind", {'params' => {'action' => 'bind'}, 'servicegroup_servicegroupmember_binding' => payload})
|
55
101
|
end
|
56
102
|
|
57
|
-
|
103
|
+
|
104
|
+
##
|
105
|
+
# :category: Deprecated Methods
|
106
|
+
# DEPRECATED: Please use #bind instead=.
|
107
|
+
def bind_servicegroup_servicegroupmember(payload)
|
108
|
+
warn '[DEPRECATION] "bind_servicegroup_servicegroupmember" is deprecated. Please use #bind instead.'
|
109
|
+
self.bind(payload)
|
110
|
+
end
|
111
|
+
|
112
|
+
def unbind(payload) # :args: :serviceGroupName => 'foo', :port => '80', :serverName => 'bar'
|
58
113
|
raise ArgumentError, 'payload cannot be null' if payload.nil?
|
59
114
|
payload = Netscaler.hash_hack(payload)
|
60
115
|
validate_payload(payload, [:serviceGroupName, :port, :serverName])
|
61
116
|
return @netscaler.adapter.post_no_body("config/servicegroup_servicegroupmember_binding/#{payload['serviceGroupName']}?action=unbind", {'params' => {'action' => 'unbind'}, 'servicegroup_servicegroupmember_binding' => payload})
|
62
117
|
end
|
63
118
|
|
119
|
+
##
|
120
|
+
# :category: Deprecated Methods
|
121
|
+
# DEPRECATED: Please use #unbind instead=.
|
122
|
+
def unbind_servicegroup_servicegroupmember(payload)
|
123
|
+
warn '[DEPRECATION] "unbind_servicegroup_servicegroupmember" is deprecated. Please use #unbind instead.'
|
124
|
+
self.unbind(payload)
|
125
|
+
end
|
126
|
+
|
64
127
|
end
|
65
128
|
end
|
data/netscaler.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: netscaler 0.
|
5
|
+
# stub: netscaler 0.3.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "netscaler"
|
9
|
-
s.version = "0.
|
9
|
+
s.version = "0.3.0"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Jeremy Custenborder", "David Andrew", "Jarrett Irons"]
|
14
|
-
s.date = "2014-
|
14
|
+
s.date = "2014-10-26"
|
15
15
|
s.description = "Netscaler api working against the Citrix Nitro api. Currently supports Nitro 9.3. Hope to add support for 10.X. Currently has support for som basics such as adding servers/services/servicegroups."
|
16
16
|
s.email = ["jeremy@scarcemedia.com", "david.andrew@webtrends.com", "jarrett.irons@gmail.com"]
|
17
17
|
s.extra_rdoc_files = [
|
@@ -31,6 +31,11 @@ Gem::Specification.new do |s|
|
|
31
31
|
"lib/netscaler/adapter.rb",
|
32
32
|
"lib/netscaler/connection.rb",
|
33
33
|
"lib/netscaler/http_adapter.rb",
|
34
|
+
"lib/netscaler/lb.rb",
|
35
|
+
"lib/netscaler/lb/monitor.rb",
|
36
|
+
"lib/netscaler/lb/vserver.rb",
|
37
|
+
"lib/netscaler/lb/vserver/bind.rb",
|
38
|
+
"lib/netscaler/lb/vserver/unbind.rb",
|
34
39
|
"lib/netscaler/load_balancing.rb",
|
35
40
|
"lib/netscaler/mock_adapter.rb",
|
36
41
|
"lib/netscaler/monkey_patches.rb",
|
@@ -41,6 +46,7 @@ Gem::Specification.new do |s|
|
|
41
46
|
"lib/netscaler/service.rb",
|
42
47
|
"lib/netscaler/servicegroup.rb",
|
43
48
|
"netscaler.gemspec",
|
49
|
+
"spec/lbvserver_spec.rb",
|
44
50
|
"spec/netscaler_spec.rb",
|
45
51
|
"spec/policy_stringmap_spec.rb",
|
46
52
|
"spec/server_spec.rb",
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
require 'netscaler'
|
3
|
+
require 'netscaler/mock_adapter'
|
4
|
+
|
5
|
+
describe Netscaler::Lb::Vserver do
|
6
|
+
|
7
|
+
connection = Netscaler::Connection.new 'hostname' => 'foo', 'password' => 'bar', 'username' => 'bar'
|
8
|
+
connection.adapter = Netscaler::MockAdapter.new :body => '{ "errorcode": 0, "message": "Done" }'
|
9
|
+
|
10
|
+
context 'when adding a new lbvserver' do
|
11
|
+
it 'a name is required' do
|
12
|
+
expect {
|
13
|
+
connection.lb.vserver.add(:serviceType => 'HTTP', :port => '80', :ipv46 => '1.1.1.1')
|
14
|
+
}.should raise_error(ArgumentError, /name/)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'a service type is required' do
|
18
|
+
expect {
|
19
|
+
connection.lb.vserver.add(:name => 'foo', :port => '80', :ipv46 => '1.1.1.1')
|
20
|
+
}.should raise_error(ArgumentError, /serviceType/)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'a port is required' do
|
24
|
+
expect {
|
25
|
+
connection.lb.vserver.add(:name => 'foo', :serviceType => 'HTTP', :ipv46 => '1.1.1.1')
|
26
|
+
}.should raise_error(ArgumentError, /port/)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'a ipv46 is required' do
|
30
|
+
expect {
|
31
|
+
connection.lb.vserver.add(:name => 'foo', :serviceType => 'HTTP', :port => '80')
|
32
|
+
}.should raise_error(ArgumentError, /ipv46/)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'return hash when supplied all required params' do
|
36
|
+
result = connection.lb.vserver.add(:name => 'foo', :serviceType => 'HTTP', :port => '80', :ipv46 => '1.1.1.1')
|
37
|
+
result.should be_kind_of(Hash)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when using the show method in Lb::Vserver' do
|
42
|
+
it 'with no param used it will return all vservers' do
|
43
|
+
result = connection.lb.vserver.show
|
44
|
+
result.should be_kind_of(Hash)
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'supplying the name parameter will return Hash' do
|
48
|
+
result = connection.lb.vserver.show :name => 'foo'
|
49
|
+
result.should be_kind_of(Hash)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'when showing a particular lb vserver string is invalid' do
|
53
|
+
expect {
|
54
|
+
connection.lb.vserver.show('asdf')
|
55
|
+
}.should raise_error(TypeError, /convert/)
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'when showing a particular lb vserver :name is required' do
|
59
|
+
expect {
|
60
|
+
connection.lb.vserver.show(:foo => 'bar')
|
61
|
+
}.should raise_error(ArgumentError, /name/)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when removing an lb vserver' do
|
66
|
+
it 'a name is required' do
|
67
|
+
expect {
|
68
|
+
connection.lb.vserver.remove()
|
69
|
+
}.should raise_error(ArgumentError, /wrong number/)
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'throw an arg error if :name arg is missing' do
|
73
|
+
expect {
|
74
|
+
connection.lb.vserver.remove(:foo => 'bar')
|
75
|
+
}.should raise_error(ArgumentError, /name/)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should return a hash if :name is supplied' do
|
79
|
+
result = connection.lb.vserver.remove :name => 'foo'
|
80
|
+
result.should be_kind_of(Hash)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'when showing lbvserver bindings' do
|
85
|
+
it 'should throw an error if there is no arg' do
|
86
|
+
expect {
|
87
|
+
connection.lb.vserver.show_binding()
|
88
|
+
}.should raise_error(ArgumentError, /wrong number/)
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'throw an arg error if :name arg is missing' do
|
92
|
+
expect {
|
93
|
+
connection.lb.vserver.show_binding(:foo => 'bar')
|
94
|
+
}.should raise_error(ArgumentError, /name/)
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should return a hash if :name is supplied' do
|
98
|
+
result = connection.lb.vserver.show_binding :name => 'foo'
|
99
|
+
result.should be_kind_of(Hash)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'when [un]binding services to lb vserver' do
|
104
|
+
it 'should throw an error if :name arg is not given' do
|
105
|
+
expect {
|
106
|
+
connection.lb.vserver.bind.service :serviceName => 'foo'
|
107
|
+
}.should raise_error(ArgumentError, /name/)
|
108
|
+
expect {
|
109
|
+
connection.lb.vserver.unbind.service :serviceName => 'foo'
|
110
|
+
}.should raise_error(ArgumentError, /name/)
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'should throw an error if :serviceName arg is not given' do
|
114
|
+
expect {
|
115
|
+
connection.lb.vserver.bind.service :name => 'foo'
|
116
|
+
}.should raise_error(ArgumentError, /serviceName/)
|
117
|
+
|
118
|
+
expect {
|
119
|
+
connection.lb.vserver.unbind.service :name => 'foo'
|
120
|
+
}.should raise_error(ArgumentError, /serviceName/)
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should return a Hash if all require arguments are supplied' do
|
125
|
+
result = connection.lb.vserver.bind.service :name => 'foo', :serviceName => ''
|
126
|
+
result.should be_kind_of(Hash)
|
127
|
+
unbind_result = connection.lb.vserver.unbind.service :name => 'foo', :serviceName => ''
|
128
|
+
unbind_result.should be_kind_of(Hash)
|
129
|
+
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
context 'when [un]binding rewritepolicies to lb vserver' do
|
134
|
+
it 'should throw an error if :name arg is not given' do
|
135
|
+
expect {
|
136
|
+
connection.lb.vserver.bind.rewrite_policy :policyName => 'bar', :priority => '10', :bindpoint => 'request'
|
137
|
+
}.should raise_error(ArgumentError, /name/)
|
138
|
+
|
139
|
+
expect {
|
140
|
+
connection.lb.vserver.unbind.rewrite_policy :policyName => 'bar', :priority => '10', :bindpoint => 'request'
|
141
|
+
}.should raise_error(ArgumentError, /name/)
|
142
|
+
|
143
|
+
end
|
144
|
+
|
145
|
+
it 'should throw an error if :policyName arg is not given' do
|
146
|
+
expect {
|
147
|
+
connection.lb.vserver.bind.rewrite_policy :name => 'foo', :priority => '10', :bindpoint => 'request'
|
148
|
+
}.should raise_error(ArgumentError, /policyName/)
|
149
|
+
|
150
|
+
expect {
|
151
|
+
connection.lb.vserver.unbind.rewrite_policy :name => 'foo', :priority => '10', :bindpoint => 'request'
|
152
|
+
}.should raise_error(ArgumentError, /policyName/)
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'should throw an error if :priority arg is not given' do
|
156
|
+
expect {
|
157
|
+
connection.lb.vserver.bind.rewrite_policy :name => 'foo', :policyName => 'bar', :bindpoint => 'request'
|
158
|
+
}.should raise_error(ArgumentError, /priority/)
|
159
|
+
end
|
160
|
+
|
161
|
+
it 'should throw an error if :bindpoint arg is not given' do
|
162
|
+
expect {
|
163
|
+
connection.lb.vserver.bind.rewrite_policy :name => 'foo', :policyName => 'bar', :priority => '10'
|
164
|
+
}.should raise_error(ArgumentError, /bindpoint/)
|
165
|
+
end
|
166
|
+
|
167
|
+
it 'should return a Hash if all require arguments are supplied' do
|
168
|
+
result = connection.lb.vserver.bind.rewrite_policy :name => 'foo', :policyName => 'bar', :priority => '10', :bindpoint => 'request'
|
169
|
+
result.should be_kind_of(Hash)
|
170
|
+
unbind_result = connection.lb.vserver.unbind.rewrite_policy :name => 'foo', :policyName => 'bar'
|
171
|
+
unbind_result.should be_kind_of(Hash)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
data/spec/netscaler_spec.rb
CHANGED
@@ -19,6 +19,16 @@ describe Netscaler do
|
|
19
19
|
netscaler = Netscaler::Connection.new 'username'=> 'foo', 'hostname' => 'bar'
|
20
20
|
}.should raise_error(ArgumentError, /password/)
|
21
21
|
end
|
22
|
+
it 'verify_ssl should be true' do
|
23
|
+
netscaler = Netscaler::Connection.new 'username'=> 'foo', 'hostname' => 'bar', 'password' => 'baz'
|
24
|
+
netscaler.verify_ssl == true
|
25
|
+
end
|
26
|
+
context 'if setting verify_ssl to false' do
|
27
|
+
it 'verify_ssl should be false' do
|
28
|
+
netscaler = Netscaler::Connection.new 'username'=> 'foo', 'hostname' => 'bar', 'password' => 'baz', 'verify_ssl' => false
|
29
|
+
netscaler.verify_ssl == false
|
30
|
+
end
|
31
|
+
end
|
22
32
|
end
|
23
33
|
|
24
34
|
context 'when logging in' do
|
data/spec/server_spec.rb
CHANGED
@@ -3,21 +3,47 @@ require 'netscaler'
|
|
3
3
|
require 'netscaler/mock_adapter'
|
4
4
|
|
5
5
|
describe Netscaler::Server do
|
6
|
-
|
7
|
-
|
6
|
+
connection = Netscaler::Connection.new 'hostname'=> 'foo', 'password' => 'bar', 'username'=> 'bar'
|
7
|
+
connection.adapter = Netscaler::MockAdapter.new :body => '{ "errorcode": 0, "message": "Done" }'
|
8
8
|
|
9
|
+
context 'when adding a new server' do
|
9
10
|
it 'a name is required' do
|
10
|
-
#netscaler.adapter = Netscaler::MockAdapter.new :status_code=>400, :body => '{ "errorcode": 1095, "message": "Required argument missing [name]", "severity": "ERROR" }',
|
11
|
-
|
12
11
|
expect {
|
13
12
|
connection.servers.add_server({'ipaddress'=>'123.123.123.123'})
|
14
13
|
}.should raise_error(ArgumentError, /name/)
|
14
|
+
|
15
|
+
expect {
|
16
|
+
connection.servers.add({'ipaddress'=>'123.123.123.123'})
|
17
|
+
}.should raise_error(ArgumentError, /name/)
|
15
18
|
end
|
16
19
|
|
17
|
-
it '
|
20
|
+
it 'an ipaddress is required' do
|
18
21
|
expect {
|
19
22
|
connection.servers.add_server({'name'=>'hostname'})
|
20
|
-
}.should raise_error(ArgumentError, /
|
23
|
+
}.should raise_error(ArgumentError, /ipaddress/)
|
24
|
+
|
25
|
+
expect {
|
26
|
+
connection.servers.add({'name'=>'hostname'})
|
27
|
+
}.should raise_error(ArgumentError, /ipaddress/)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns a Hash object if all necessary args are supplied' do
|
31
|
+
result = connection.servers.add :name => 'foo', :domain => 'foo.bar.com'
|
32
|
+
result.should be_kind_of(Hash)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context 'when removing a server' do
|
37
|
+
it ':server is required' do
|
38
|
+
expect {
|
39
|
+
connection.servers.remove({'ipaddress'=>'123.123.123.123'})
|
40
|
+
}.should raise_error(ArgumentError, /server/)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns a Hash object if all necessary args are supplied' do
|
44
|
+
result = connection.servers.remove :server => 'foo'
|
45
|
+
result.should be_kind_of(Hash)
|
21
46
|
end
|
22
47
|
end
|
48
|
+
|
23
49
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netscaler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Custenborder
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-10-26 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rest-client
|
@@ -149,6 +149,11 @@ files:
|
|
149
149
|
- lib/netscaler/adapter.rb
|
150
150
|
- lib/netscaler/connection.rb
|
151
151
|
- lib/netscaler/http_adapter.rb
|
152
|
+
- lib/netscaler/lb.rb
|
153
|
+
- lib/netscaler/lb/monitor.rb
|
154
|
+
- lib/netscaler/lb/vserver.rb
|
155
|
+
- lib/netscaler/lb/vserver/bind.rb
|
156
|
+
- lib/netscaler/lb/vserver/unbind.rb
|
152
157
|
- lib/netscaler/load_balancing.rb
|
153
158
|
- lib/netscaler/mock_adapter.rb
|
154
159
|
- lib/netscaler/monkey_patches.rb
|
@@ -159,6 +164,7 @@ files:
|
|
159
164
|
- lib/netscaler/service.rb
|
160
165
|
- lib/netscaler/servicegroup.rb
|
161
166
|
- netscaler.gemspec
|
167
|
+
- spec/lbvserver_spec.rb
|
162
168
|
- spec/netscaler_spec.rb
|
163
169
|
- spec/policy_stringmap_spec.rb
|
164
170
|
- spec/server_spec.rb
|