netscaler 0.2.0 → 0.3.0

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