netscaler-cli 0.2.3 → 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.
- data/Gemfile +9 -0
- data/Gemfile.lock +28 -0
- data/README.markdown +8 -4
- data/Rakefile +3 -3
- data/lib/netscaler/baseexecutor.rb +8 -10
- data/lib/netscaler/clitemplate.rb +4 -0
- data/lib/netscaler/config.rb +23 -9
- data/lib/netscaler/server/executor.rb +52 -4
- data/lib/netscaler/service/executor.rb +45 -17
- data/lib/netscaler/version.rb +1 -1
- data/lib/netscaler/vserver/executor.rb +107 -5
- data/spec/config_spec.rb +7 -1
- data/spec/configs/simple-config.yml +5 -1
- metadata +72 -27
- data/lib/VERSION +0 -1
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
GEM
|
2
|
+
remote: http://rubygems.org/
|
3
|
+
specs:
|
4
|
+
builder (3.0.0)
|
5
|
+
crack (0.1.8)
|
6
|
+
diff-lcs (1.1.2)
|
7
|
+
highline (1.6.1)
|
8
|
+
log4r (1.1.9)
|
9
|
+
rspec (2.2.0)
|
10
|
+
rspec-core (~> 2.2)
|
11
|
+
rspec-expectations (~> 2.2)
|
12
|
+
rspec-mocks (~> 2.2)
|
13
|
+
rspec-core (2.2.1)
|
14
|
+
rspec-expectations (2.2.0)
|
15
|
+
diff-lcs (~> 1.1.2)
|
16
|
+
rspec-mocks (2.2.0)
|
17
|
+
savon (0.7.9)
|
18
|
+
builder (>= 2.1.2)
|
19
|
+
crack (>= 0.1.4)
|
20
|
+
|
21
|
+
PLATFORMS
|
22
|
+
ruby
|
23
|
+
|
24
|
+
DEPENDENCIES
|
25
|
+
highline (>= 1.6)
|
26
|
+
log4r (~> 1.1)
|
27
|
+
rspec
|
28
|
+
savon (~> 0.7)
|
data/README.markdown
CHANGED
@@ -12,9 +12,12 @@ The command line tools can be installed with:
|
|
12
12
|
|
13
13
|
The following commands are currently a part of the system:
|
14
14
|
|
15
|
-
* *netscaler-vserver* -- An interface for enabling, disabling, and binding responder policies to a specific virtual server.
|
16
|
-
* *netscaler-service* -- An interface for enabling, disabling, and binding
|
15
|
+
* *netscaler-vserver* -- An interface for enabling, disabling, querying, and binding responder policies to a specific virtual server.
|
16
|
+
* *netscaler-service* -- An interface for enabling, disabling, querying, and binding servers to specific services.
|
17
|
+
* *netscaler-server* -- An interface for enabling, disabling, querying, and binding servers to virtual servers.
|
17
18
|
|
19
|
+
Each command requires at least the --netscaler flag (which can be the full netscaler host name in the configuration file, or its alias, see below).
|
20
|
+
|
18
21
|
# Configuration
|
19
22
|
|
20
23
|
All of the commands rely upon a configuration file in the YAML format. By default, it looks for a file in your home directory
|
@@ -23,8 +26,9 @@ All of the commands rely upon a configuration file in the YAML format. By defau
|
|
23
26
|
|
24
27
|
Each load balancer requires an entry in the file in the form:
|
25
28
|
|
26
|
-
netscaler.loadbalancer.somecompany.com
|
29
|
+
netscaler.loadbalancer.somecompany.com:
|
27
30
|
username: 'some.username'
|
28
31
|
password: 'super!duper!secret!'
|
32
|
+
alias: prod
|
29
33
|
|
30
|
-
Multiple entries can be in the file; the password
|
34
|
+
Multiple entries can be in the file; the password and the alias settings are not required. An alias can be used as a shortcut name on the command line for a particular netscaler server. However, if no password is given in the file for a given configuration, the tool will ask you for it.
|
data/Rakefile
CHANGED
@@ -28,11 +28,11 @@ begin
|
|
28
28
|
gem.homepage = 'http://github.com/gabemc/netscaler-cli'
|
29
29
|
gem.files = FileList["[A-Z]*", "{bin,lib,spec}/**/*"]
|
30
30
|
|
31
|
-
gem.add_dependency '
|
32
|
-
gem.add_dependency 'log4r', '>=1.1.7'
|
31
|
+
gem.add_dependency 'log4r', '>=1.1.9'
|
33
32
|
gem.add_dependency 'savon', '>=0.7.9'
|
33
|
+
gem.add_dependency 'highline', '>=1.6'
|
34
34
|
|
35
|
-
gem.add_development_dependency 'rspec', '>=2.0
|
35
|
+
gem.add_development_dependency 'rspec', '>=2.2.0'
|
36
36
|
end
|
37
37
|
rescue LoadError
|
38
38
|
puts "Jeweler or dependencies are not available. Install it with: sudo gem install jeweler"
|
@@ -4,7 +4,7 @@ module Netscaler
|
|
4
4
|
class BaseExecutor
|
5
5
|
include Netscaler::Logging
|
6
6
|
|
7
|
-
attr_reader :host, :client
|
7
|
+
attr_reader :host, :client, :json
|
8
8
|
|
9
9
|
def initialize(host, client)
|
10
10
|
@host = host
|
@@ -32,16 +32,14 @@ module Netscaler
|
|
32
32
|
log.debug(result)
|
33
33
|
|
34
34
|
response = result.to_hash["#{name.to_s}_response".to_sym]
|
35
|
-
|
35
|
+
msg = response[:return][:message]
|
36
|
+
if msg !~ /^Done$/
|
37
|
+
log.error(response[:return][:message])
|
38
|
+
exit(1)
|
39
|
+
elsif block_given?
|
36
40
|
yield response
|
37
|
-
else
|
38
|
-
msg
|
39
|
-
if msg !~ /^Done$/
|
40
|
-
log.error(response[:return][:message])
|
41
|
-
exit(1)
|
42
|
-
else
|
43
|
-
log.debug(msg)
|
44
|
-
end
|
41
|
+
else
|
42
|
+
log.debug(msg)
|
45
43
|
end
|
46
44
|
|
47
45
|
result
|
@@ -78,6 +78,10 @@ module Netscaler
|
|
78
78
|
"Prints extra debug information") do |d|
|
79
79
|
options[:debug] = d
|
80
80
|
end
|
81
|
+
opts.on('--json',
|
82
|
+
"Prints out JSON data instead of textual output.") do |j|
|
83
|
+
options[:json] = j
|
84
|
+
end
|
81
85
|
opts.on('-v', '--version',
|
82
86
|
"Show the version information") do |v|
|
83
87
|
puts "#{File.basename($0)} version: #{Netscaler::Version.to_s}"
|
data/lib/netscaler/config.rb
CHANGED
@@ -10,17 +10,22 @@ module Netscaler
|
|
10
10
|
@servers = read_config_file(file)
|
11
11
|
end
|
12
12
|
|
13
|
-
def [](
|
14
|
-
|
15
|
-
|
16
|
-
|
13
|
+
def [](name)
|
14
|
+
# First, try the aliases
|
15
|
+
@servers.each_key do |lbname|
|
16
|
+
found = @servers[lbname]
|
17
|
+
if found['alias'] == name
|
18
|
+
return create_config(lbname, found)
|
19
|
+
end
|
17
20
|
end
|
18
21
|
|
19
|
-
|
20
|
-
|
22
|
+
# Next, check the actual server names
|
23
|
+
found = @servers[name]
|
24
|
+
if found.nil?
|
25
|
+
raise Netscaler::ConfigurationError.new("The specified Netscaler host was not found")
|
21
26
|
end
|
22
27
|
|
23
|
-
|
28
|
+
return create_config(name, found)
|
24
29
|
end
|
25
30
|
|
26
31
|
def load_balancers
|
@@ -28,6 +33,14 @@ module Netscaler
|
|
28
33
|
end
|
29
34
|
|
30
35
|
private
|
36
|
+
def create_config(lbname, yaml)
|
37
|
+
if yaml['username'].nil?
|
38
|
+
raise Netscaler::ConfigurationError.new("No username was specified for the given Netscaler host")
|
39
|
+
end
|
40
|
+
|
41
|
+
Configuration.new(lbname, yaml['username'], yaml['password'], yaml['alias'])
|
42
|
+
end
|
43
|
+
|
31
44
|
def read_config_file(file)
|
32
45
|
if file.nil?
|
33
46
|
file = File.expand_path(".netscaler-cli.yml", Etc.getpwuid.dir)
|
@@ -47,12 +60,13 @@ module Netscaler
|
|
47
60
|
end
|
48
61
|
|
49
62
|
class Configuration
|
50
|
-
attr_reader :host, :username, :password
|
63
|
+
attr_reader :host, :username, :password, :alias
|
51
64
|
|
52
|
-
def initialize(host, username, password=nil)
|
65
|
+
def initialize(host, username, password=nil, nalias=nil)
|
53
66
|
@host = host
|
54
67
|
@username = username
|
55
68
|
@password = password
|
69
|
+
@alias = nalias
|
56
70
|
|
57
71
|
query_password
|
58
72
|
end
|
@@ -17,11 +17,59 @@ module Netscaler::Server
|
|
17
17
|
|
18
18
|
def status(options)
|
19
19
|
send_request('getserver', @params) do |response|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
resp = Response.new(response)
|
21
|
+
if options[:json]
|
22
|
+
puts resp.to_json
|
23
|
+
else
|
24
|
+
puts resp.to_s
|
25
|
+
end
|
24
26
|
end
|
25
27
|
end
|
26
28
|
end
|
29
|
+
|
30
|
+
class Response
|
31
|
+
attr_reader :raw_response, :info
|
32
|
+
|
33
|
+
def initialize(raw_response)
|
34
|
+
@raw_response = raw_response
|
35
|
+
@info = raw_response[:return][:list][:item]
|
36
|
+
end
|
37
|
+
|
38
|
+
def name
|
39
|
+
info[:name]
|
40
|
+
end
|
41
|
+
|
42
|
+
def ip_address
|
43
|
+
info[:ipaddress]
|
44
|
+
end
|
45
|
+
|
46
|
+
def state
|
47
|
+
info[:state]
|
48
|
+
end
|
49
|
+
|
50
|
+
def services
|
51
|
+
info[:servicename][:item]
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
base = "Name:\t#{name}\nIP Address:\t#{ip_address}\nState:\t#{state}\nServices:\n"
|
56
|
+
services.each do |service|
|
57
|
+
base << "\t#{service}\n"
|
58
|
+
end
|
59
|
+
base
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_json
|
63
|
+
base = "{ 'name': '#{name}', 'ip_address': '#{ip_address}', 'state': '#{state}', 'services': ["
|
64
|
+
|
65
|
+
services.each_with_index do |service, i|
|
66
|
+
base << "'#{service}'"
|
67
|
+
if i != services.length - 1
|
68
|
+
base << ", "
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
base << "] }"
|
73
|
+
end
|
74
|
+
end
|
27
75
|
end
|
@@ -19,25 +19,12 @@ module Netscaler::Service
|
|
19
19
|
send_request('disableservice', params)
|
20
20
|
end
|
21
21
|
|
22
|
-
def status(options)
|
23
|
-
send_request('getservice', @params) do |response|
|
24
|
-
info = response[:return][:list][:item]
|
25
|
-
puts "Name: #{info[:name]}"
|
26
|
-
puts "IP Address: #{info[:ipaddress]}"
|
27
|
-
puts "Port: #{info[:port]}"
|
28
|
-
puts "State: #{info[:svrstate]}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
22
|
def bind(options)
|
33
23
|
params = {
|
34
24
|
:name => options[:vserver],
|
35
25
|
:servicename => host
|
36
26
|
}
|
37
|
-
send_request('bindlbvserver_service', params)
|
38
|
-
#require 'pp'
|
39
|
-
#pp response
|
40
|
-
end
|
27
|
+
send_request('bindlbvserver_service', params)
|
41
28
|
end
|
42
29
|
|
43
30
|
def unbind(options)
|
@@ -45,10 +32,51 @@ module Netscaler::Service
|
|
45
32
|
:name => options[:vserver],
|
46
33
|
:servicename => host
|
47
34
|
}
|
48
|
-
send_request('unbindlbvserver_service', params)
|
49
|
-
|
50
|
-
|
35
|
+
send_request('unbindlbvserver_service', params)
|
36
|
+
end
|
37
|
+
|
38
|
+
def status(options)
|
39
|
+
send_request('getservice', @params) do |response|
|
40
|
+
resp = Response.new(response)
|
41
|
+
if options[:json]
|
42
|
+
puts resp.to_json
|
43
|
+
else
|
44
|
+
puts resp.to_s
|
45
|
+
end
|
51
46
|
end
|
52
47
|
end
|
53
48
|
end
|
49
|
+
|
50
|
+
class Response
|
51
|
+
attr_reader :raw_response, :info
|
52
|
+
|
53
|
+
def initialize(raw_response)
|
54
|
+
@raw_response = raw_response
|
55
|
+
@info = raw_response[:return][:list][:item]
|
56
|
+
end
|
57
|
+
|
58
|
+
def name
|
59
|
+
info[:name]
|
60
|
+
end
|
61
|
+
|
62
|
+
def ip_address
|
63
|
+
info[:ipaddress]
|
64
|
+
end
|
65
|
+
|
66
|
+
def state
|
67
|
+
info[:svrstate]
|
68
|
+
end
|
69
|
+
|
70
|
+
def port
|
71
|
+
info[:port]
|
72
|
+
end
|
73
|
+
|
74
|
+
def to_s
|
75
|
+
"Name:\t#{name}\nIP:\t#{ip_address}\nState:\t#{state}\nPort:\t#{port}"
|
76
|
+
end
|
77
|
+
|
78
|
+
def to_json
|
79
|
+
"{ 'name': '#{name}', 'ip_address': '#{ip_address}', 'state': '#{state}', 'port': #{port} }"
|
80
|
+
end
|
81
|
+
end
|
54
82
|
end
|
data/lib/netscaler/version.rb
CHANGED
@@ -2,7 +2,7 @@ require 'scanf'
|
|
2
2
|
|
3
3
|
module Netscaler
|
4
4
|
class Version
|
5
|
-
CURRENT = File.read(File.dirname(__FILE__)
|
5
|
+
CURRENT = File.read(File.join(File.dirname(__FILE__), '..', '..', 'etc', 'Version'))
|
6
6
|
MAJOR, MINOR, TINY = CURRENT.scanf('%d.%d.%d')
|
7
7
|
|
8
8
|
def self.to_s
|
@@ -21,13 +21,15 @@ module Netscaler::VServer
|
|
21
21
|
def status(options)
|
22
22
|
send_request('getlbvserver', @params) do |response|
|
23
23
|
begin
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
resp = Response.new(response)
|
25
|
+
if options[:json]
|
26
|
+
puts resp.to_json
|
27
|
+
else
|
28
|
+
puts resp.to_s
|
29
|
+
end
|
29
30
|
rescue Exception => e
|
30
31
|
log.fatal "Unable to lookup any information for host: #{host}"
|
32
|
+
puts e
|
31
33
|
exit(1)
|
32
34
|
end
|
33
35
|
end
|
@@ -54,4 +56,104 @@ module Netscaler::VServer
|
|
54
56
|
send_request('unbindlbvserver_policy', params)
|
55
57
|
end
|
56
58
|
end
|
59
|
+
|
60
|
+
class Response
|
61
|
+
attr_reader :raw_response, :info
|
62
|
+
|
63
|
+
def initialize(raw_response)
|
64
|
+
@raw_response = raw_response
|
65
|
+
@info = raw_response[:return][:list][:item]
|
66
|
+
end
|
67
|
+
|
68
|
+
def name
|
69
|
+
info[:name]
|
70
|
+
end
|
71
|
+
|
72
|
+
def ip_address
|
73
|
+
if info[:ipaddress] =~ /0\.0\.0\.0/
|
74
|
+
info[:ipaddress2]
|
75
|
+
else
|
76
|
+
info[:ipaddress]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def type
|
81
|
+
info[:servicetype]
|
82
|
+
end
|
83
|
+
|
84
|
+
def port
|
85
|
+
info[:port]
|
86
|
+
end
|
87
|
+
|
88
|
+
def state
|
89
|
+
info[:state]
|
90
|
+
end
|
91
|
+
|
92
|
+
def servers
|
93
|
+
@parsed_servers ||= []
|
94
|
+
if !@parsed_servers.empty?
|
95
|
+
return @parsed_servers
|
96
|
+
end
|
97
|
+
|
98
|
+
info[:servicename][:item].each do |name|
|
99
|
+
srv = ServerInfo.new
|
100
|
+
srv.name = name
|
101
|
+
@parsed_servers << srv
|
102
|
+
end
|
103
|
+
|
104
|
+
info[:svcstate][:item].each_with_index do |state, i|
|
105
|
+
@parsed_servers[i].state = state
|
106
|
+
end
|
107
|
+
|
108
|
+
info[:svcport][:item].each_with_index do |port, i|
|
109
|
+
@parsed_servers[i].port = port
|
110
|
+
end
|
111
|
+
|
112
|
+
info[:svcipaddress][:item].each_with_index do |ip_address, i|
|
113
|
+
@parsed_servers[i].ip_address = ip_address
|
114
|
+
end
|
115
|
+
|
116
|
+
info[:svctype][:item].each_with_index do |type, i|
|
117
|
+
@parsed_servers[i].type = type
|
118
|
+
end
|
119
|
+
|
120
|
+
@parsed_servers
|
121
|
+
end
|
122
|
+
|
123
|
+
def to_s
|
124
|
+
base = "Name:\t#{name}\nIP:\t#{ip_address}\nState:\t#{state}\nPort:\t#{port}\nType:\t#{type}\nServers:\n"
|
125
|
+
servers.each do |server|
|
126
|
+
base << server.to_s
|
127
|
+
base << "\n\n"
|
128
|
+
end
|
129
|
+
base
|
130
|
+
end
|
131
|
+
|
132
|
+
def to_json
|
133
|
+
base = "{ 'name': '#{name}', 'ip_address': '#{ip_address}', 'state': '#{state}', 'port': '#{port}', 'type': #{type}, 'servers': [\n "
|
134
|
+
|
135
|
+
servers.each_with_index do |server, i|
|
136
|
+
base << server.to_json
|
137
|
+
if i != servers.length - 1
|
138
|
+
base << ",\n "
|
139
|
+
else
|
140
|
+
base << "\n"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
base << "] }"
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
class ServerInfo
|
149
|
+
attr_accessor :name, :ip_address, :state, :port, :type
|
150
|
+
|
151
|
+
def to_s
|
152
|
+
"\tName:\t#{name}\n\tIP:\t#{ip_address}\n\tState:\t#{state}\n\tPort:\t#{port}\n\tType:\t#{type}"
|
153
|
+
end
|
154
|
+
|
155
|
+
def to_json
|
156
|
+
"{ 'name': '#{name}', 'ip_address': '#{ip_address}', 'state': '#{state}', 'port': #{port}, 'type': '#{type}' }"
|
157
|
+
end
|
158
|
+
end
|
57
159
|
end
|
data/spec/config_spec.rb
CHANGED
@@ -16,7 +16,7 @@ module Netscaler
|
|
16
16
|
|
17
17
|
describe "when reading an existing file" do
|
18
18
|
it "should be able to load the basic config file" do
|
19
|
-
reading('simple-config.yml').load_balancers.length.should eql(
|
19
|
+
reading('simple-config.yml').load_balancers.length.should eql(2)
|
20
20
|
end
|
21
21
|
|
22
22
|
it "should set the username and password correctly when set in the file." do
|
@@ -24,6 +24,12 @@ module Netscaler
|
|
24
24
|
config.username.should eql('some_user')
|
25
25
|
config.password.should eql('somepass')
|
26
26
|
end
|
27
|
+
|
28
|
+
it "should load via an alias" do
|
29
|
+
config = reading('simple-config.yml')['else']
|
30
|
+
config.alias.should eql('else')
|
31
|
+
config.username.should eql('here')
|
32
|
+
end
|
27
33
|
end
|
28
34
|
|
29
35
|
describe "when reading a non-existent or bad file" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netscaler-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 2
|
9
8
|
- 3
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gabe McArthur
|
@@ -15,45 +15,74 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-12-03 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: log4r
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
hash:
|
29
|
+
hash: 13
|
30
30
|
segments:
|
31
31
|
- 1
|
32
|
-
-
|
33
|
-
|
34
|
-
version: 1.5.2
|
32
|
+
- 1
|
33
|
+
version: "1.1"
|
35
34
|
type: :runtime
|
36
35
|
version_requirements: *id001
|
37
36
|
- !ruby/object:Gem::Dependency
|
38
|
-
name:
|
37
|
+
name: savon
|
39
38
|
prerelease: false
|
40
39
|
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 5
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 7
|
48
|
+
version: "0.7"
|
49
|
+
type: :runtime
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: highline
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
55
|
none: false
|
42
56
|
requirements:
|
43
57
|
- - ">="
|
44
58
|
- !ruby/object:Gem::Version
|
45
|
-
hash:
|
59
|
+
hash: 3
|
46
60
|
segments:
|
47
61
|
- 1
|
62
|
+
- 6
|
63
|
+
version: "1.6"
|
64
|
+
type: :runtime
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: log4r
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 1
|
75
|
+
segments:
|
48
76
|
- 1
|
49
|
-
-
|
50
|
-
|
77
|
+
- 1
|
78
|
+
- 9
|
79
|
+
version: 1.1.9
|
51
80
|
type: :runtime
|
52
|
-
version_requirements: *
|
81
|
+
version_requirements: *id004
|
53
82
|
- !ruby/object:Gem::Dependency
|
54
83
|
name: savon
|
55
84
|
prerelease: false
|
56
|
-
requirement: &
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
57
86
|
none: false
|
58
87
|
requirements:
|
59
88
|
- - ">="
|
@@ -65,23 +94,38 @@ dependencies:
|
|
65
94
|
- 9
|
66
95
|
version: 0.7.9
|
67
96
|
type: :runtime
|
68
|
-
version_requirements: *
|
97
|
+
version_requirements: *id005
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: highline
|
100
|
+
prerelease: false
|
101
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
hash: 3
|
107
|
+
segments:
|
108
|
+
- 1
|
109
|
+
- 6
|
110
|
+
version: "1.6"
|
111
|
+
type: :runtime
|
112
|
+
version_requirements: *id006
|
69
113
|
- !ruby/object:Gem::Dependency
|
70
114
|
name: rspec
|
71
115
|
prerelease: false
|
72
|
-
requirement: &
|
116
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
73
117
|
none: false
|
74
118
|
requirements:
|
75
119
|
- - ">="
|
76
120
|
- !ruby/object:Gem::Version
|
77
|
-
hash:
|
121
|
+
hash: 7
|
78
122
|
segments:
|
79
123
|
- 2
|
124
|
+
- 2
|
80
125
|
- 0
|
81
|
-
|
82
|
-
version: 2.0.1
|
126
|
+
version: 2.2.0
|
83
127
|
type: :development
|
84
|
-
version_requirements: *
|
128
|
+
version_requirements: *id007
|
85
129
|
description: This gem installs several simple command line utilities locally. It uses the NSConfig.wsdl SOAP interface for remote access.
|
86
130
|
email:
|
87
131
|
- madeonamac@gmail.com
|
@@ -94,12 +138,13 @@ extensions: []
|
|
94
138
|
extra_rdoc_files:
|
95
139
|
- README.markdown
|
96
140
|
files:
|
141
|
+
- Gemfile
|
142
|
+
- Gemfile.lock
|
97
143
|
- README.markdown
|
98
144
|
- Rakefile
|
99
145
|
- bin/netscaler-server
|
100
146
|
- bin/netscaler-service
|
101
147
|
- bin/netscaler-vserver
|
102
|
-
- lib/VERSION
|
103
148
|
- lib/netscaler/baseexecutor.rb
|
104
149
|
- lib/netscaler/clitemplate.rb
|
105
150
|
- lib/netscaler/config.rb
|
@@ -126,8 +171,8 @@ homepage: http://github.com/gabemc/netscaler-cli
|
|
126
171
|
licenses: []
|
127
172
|
|
128
173
|
post_install_message:
|
129
|
-
rdoc_options:
|
130
|
-
|
174
|
+
rdoc_options: []
|
175
|
+
|
131
176
|
require_paths:
|
132
177
|
- lib
|
133
178
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -156,8 +201,8 @@ signing_key:
|
|
156
201
|
specification_version: 3
|
157
202
|
summary: Simple command line utilities for interacting remotely with a Netscaler load balancer.
|
158
203
|
test_files:
|
159
|
-
- spec/
|
204
|
+
- spec/config_spec.rb
|
160
205
|
- spec/helpers.rb
|
161
206
|
- spec/server/cli_spec.rb
|
162
207
|
- spec/service/cli_spec.rb
|
163
|
-
- spec/
|
208
|
+
- spec/vserver/cli_spec.rb
|
data/lib/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
0.2.3
|