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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGQ5ZjU2M2IyYWI3NDM4YWIxYmU1NWI3YjFlYzlmMDE2ODFkYTBkMA==
4
+ YTM3NDRkODQzNmM4MzYyMDhkZmZhYzFkODYzM2M5ZDdiODI0Mzc4ZQ==
5
5
  data.tar.gz: !binary |-
6
- YWRlNGI3N2JhZGY0NmM3MWZiMWE0MjAyNDgyMWUzYzkxZjRiNGQ3Mw==
6
+ ZmMxMWVjMzk2Yjc2ZTAyZTRmOTlhYzEzMWJlY2M2OTUwMTI5NTMxMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZDE4YTIyMTRiMjQ2Yzc3NmJjNTZiYTVjNGNjMmVhYmI5NzQ2N2M1ZTY5ZTY1
10
- YzMwODE3YzVmNDgwOWEyMGQyM2QwNTQwYzkyZTU4NmVlMTcyNWMxNTRiYTMy
11
- NjkwMThlNjVhOWJjMTlhYjhlYjhhOTIyZTZjMGYwZDllOTAzNTc=
9
+ ZGQ5YmJjOTkyNTE0ZjQxNTY0MWQ0MWMxOWE2ZDJmMjVkZTcwMWVkOWVmMWRh
10
+ Y2UwNDIyNDlkNWJmMjQ1ZWNmZWY3MWY0YjE4NDE0MmVlN2U1NTU3MzhhOWE3
11
+ YjlhM2ZiOTUxZjJlYTI0MjYzZWM3NmI1NWEwYmQxZWQ0NjhjZWU=
12
12
  data.tar.gz: !binary |-
13
- NWM3NmNhOTJhMjY0M2ZjODJkNmJmYzhiMTViMmQ4MTg5ZjJiMmI0ODRkMmJl
14
- Nzc3YjBjZGNhZjMyMzY5YTAyMjU1NzE4NjIzNjNjYWJmZTA5Y2U0MTYyZWUw
15
- MTNmMjAzNjAyNWZiZWFmYmRjNDA0ZWYzMjU4MjZjNDFmMDc4Y2E=
13
+ ZDM0MmI5YzcxYzU4OTAxZDRmNzJiZWQ5ZGYyN2ZlZGZlOGNjN2NlNGUxYzc0
14
+ ZDYwY2RmZTAyYmFiMmVlNWQxNTM4OGY1MmY4M2JjZDM3OWIxYTA1NjA0ZGVi
15
+ NWJhYTNiNWUzM2QwNTcxM2MzZjdjNWMzMzFkMmMzODg2YTk1N2U=
@@ -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.2.0
1
+ 0.3.0
@@ -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 = options[:username]
26
- @password = options[:password]
27
- @adapter = HttpAdapter.new :hostname => "https://#{options[:hostname]}", :username => @username, :password => @password
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 args[:hostname], args[:username], args[:password]
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={})
@@ -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
+
@@ -53,5 +53,11 @@ module Netscaler
53
53
  return process_result(@result, @response)
54
54
  end
55
55
 
56
+ def delete(part, args={})
57
+ url = get_uri(part)
58
+ options = prepare_options(args)
59
+ return process_result(@result, @response)
60
+ end
61
+
56
62
  end
57
63
  end
@@ -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
@@ -6,16 +6,33 @@ module Netscaler
6
6
  @netscaler = netscaler
7
7
  end
8
8
 
9
- def add_server(server)
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[:ipaddress] != nil then
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
@@ -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
- def add_service(payload)
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
- def get_service(payload)
17
- raise ArgumentError, 'payload cannot be null' if payload.nil?
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 enable_service(payload)
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
- def disable_service(payload)
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 add_servicegroup(payload)
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
- def remove_servicegroup(payload)
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
- def get_servicegroup(payload)
24
- raise ArgumentError, 'arg must contain name of servicegroup!' if payload.nil?
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
- def get_servicegroups(args={})
29
- return @netscaler.adapter.get("config/servicegroup/", args)
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 get_servicegroup_servicegroupmember_bindings(payload)
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 bind_servicegroup_servicegroupmember(payload)
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
- def unbind_servicegroup_servicegroupmember(payload)
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
@@ -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.2.0 ruby lib
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.2.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-07-21"
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
@@ -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
@@ -3,21 +3,47 @@ require 'netscaler'
3
3
  require 'netscaler/mock_adapter'
4
4
 
5
5
  describe Netscaler::Server do
6
- context 'when adding a new server' do
7
- connection = Netscaler::Connection.new 'hostname'=> 'foo', 'password' => 'bar', 'username'=> 'bar'
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 'a domain is required' do
20
+ it 'an ipaddress is required' do
18
21
  expect {
19
22
  connection.servers.add_server({'name'=>'hostname'})
20
- }.should raise_error(ArgumentError, /domain/)
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.2.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-07-21 00:00:00.000000000 Z
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