f5-icontrol 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/f5-icontrol.gemspec +3 -2
- data/lib/f5/cli/application.rb +26 -7
- data/lib/f5/icontrol/version.rb +1 -1
- data/spec/cli/pool_spec.rb +57 -3
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b41af60e6a4f2679ddf9c5cadedf90677f0ad54f
|
4
|
+
data.tar.gz: 4d8912cb7bba726e570e3ee78a172fc08c5ff74f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d2f31200ca7c977dafbbf6b3eddcc496b6896cdcb41b28dcfeda1ca124058a0113decc58cc420a46fc3011169dbb7eb8beed4e64d247dd1d161d0ee252aeb57e
|
7
|
+
data.tar.gz: e39a4d2fa1a3743ea8d181bb719a8bbf430050f56750ffd67315c2051ab4bbc03ca8839c072894aa53b4fa2aff845bfe79a0d4393b9311e9e55d44bb381a8dd4
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,11 @@
|
|
1
1
|
# Changelog
|
2
|
+
## 0.2.4
|
3
|
+
swalberg - support setting pool member ratios
|
4
|
+
## 0.2.3
|
5
|
+
Fix typo from previous release
|
6
|
+
## 0.2.2
|
7
|
+
davidalpert - Add some enumerations to localLB
|
8
|
+
Ignore this release there was a typo
|
2
9
|
## 0.2.1
|
3
10
|
davidalpert - Add some enumerations to localLB
|
4
11
|
|
data/f5-icontrol.gemspec
CHANGED
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_dependency "savon", "~> 2.0"
|
22
22
|
spec.add_dependency "thor"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
25
24
|
spec.add_development_dependency "awesome_print"
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
26
|
+
spec.add_development_dependency "byebug"
|
26
27
|
spec.add_development_dependency "rake"
|
27
28
|
spec.add_development_dependency "rspec"
|
28
|
-
spec.add_development_dependency "webmock"
|
29
29
|
spec.add_development_dependency "vcr"
|
30
|
+
spec.add_development_dependency "webmock"
|
30
31
|
end
|
data/lib/f5/cli/application.rb
CHANGED
@@ -210,8 +210,8 @@ module F5
|
|
210
210
|
response = client.Networking.VLAN.create_v2(
|
211
211
|
vlans: { item: [ name ] },
|
212
212
|
vlan_ids: { item: [ vid ] },
|
213
|
-
members: {
|
214
|
-
failsafe_states: {
|
213
|
+
members: { item: [ item: memberdata ] },
|
214
|
+
failsafe_states: { item: [ 'STATE_DISABLED' ] },
|
215
215
|
timeouts: { item: [ 100 ] } #???
|
216
216
|
)
|
217
217
|
puts response
|
@@ -286,19 +286,19 @@ module F5
|
|
286
286
|
response = client.LocalLB.Pool.set_member_session_enabled_state(
|
287
287
|
pool_names: { item: [ pool ] },
|
288
288
|
members: { item: [ set ] },
|
289
|
-
session_states: {
|
289
|
+
session_states: { item: [ set.map { "STATE_ENABLED" } ] }
|
290
290
|
)
|
291
291
|
|
292
292
|
response = client.LocalLB.Pool.set_member_monitor_state(
|
293
293
|
pool_names: { item: [ pool ] },
|
294
294
|
members: { item: [ set ] },
|
295
|
-
monitor_states: {
|
295
|
+
monitor_states: { item: [ set.map { "STATE_ENABLED" } ] }
|
296
296
|
)
|
297
297
|
|
298
298
|
end
|
299
299
|
|
300
300
|
desc "disable POOL MEMBERS", "Disables the given members"
|
301
|
-
method_option :force, default: false, desc: "Forces the node offline (only active connections allowed)"
|
301
|
+
method_option :force, default: false, type: :boolean, desc: "Forces the node offline (only active connections allowed)"
|
302
302
|
def disable(pool, *members)
|
303
303
|
set = pool_members(pool).select do |m|
|
304
304
|
members.include? m[:address]
|
@@ -307,19 +307,38 @@ module F5
|
|
307
307
|
response = client.LocalLB.Pool.set_member_session_enabled_state(
|
308
308
|
pool_names: { item: [ pool ] },
|
309
309
|
members: { item: [ set ] },
|
310
|
-
session_states: {
|
310
|
+
session_states: { item: [ set.map { "STATE_DISABLED" } ] }
|
311
311
|
)
|
312
312
|
|
313
313
|
if options[:force]
|
314
314
|
response = client.LocalLB.Pool.set_member_monitor_state(
|
315
315
|
pool_names: { item: [ pool ] },
|
316
316
|
members: { item: [ set ] },
|
317
|
-
monitor_states: {
|
317
|
+
monitor_states: { item: [ set.map { "STATE_DISABLED" } ] }
|
318
318
|
)
|
319
319
|
end
|
320
320
|
end
|
321
321
|
|
322
|
+
desc "setratio --ratio RATIO POOL MEMBERS", "Sets the dynamic ratio of the given members to RATIO"
|
323
|
+
method_option :ratio, type: :numeric, desc: "The node's new dynamic ratio", required: true
|
324
|
+
def setratio(pool, *members)
|
325
|
+
set = address_port_list_from_pool(pool, members)
|
326
|
+
response = client.LocalLB.Pool.set_member_ratio(
|
327
|
+
pool_names: { item: [ pool ] },
|
328
|
+
members: { item: [ set ] },
|
329
|
+
ratios: { item: [ set.map { options[:ratio] } ] }
|
330
|
+
)
|
331
|
+
|
332
|
+
end
|
333
|
+
|
322
334
|
private
|
335
|
+
|
336
|
+
def address_port_list_from_pool(pool, members)
|
337
|
+
pool_members(pool).select do |m|
|
338
|
+
members.include?(m[:address]) || members.include?(m[:address].gsub(%r{^/Common/}, ''))
|
339
|
+
end
|
340
|
+
end
|
341
|
+
|
323
342
|
def pool_members(pool)
|
324
343
|
response = client.LocalLB.Pool.get_member_v2(pool_names: { item: [ pool ] } )
|
325
344
|
|
data/lib/f5/icontrol/version.rb
CHANGED
data/spec/cli/pool_spec.rb
CHANGED
@@ -8,26 +8,80 @@ describe F5::Cli::Pool do
|
|
8
8
|
|
9
9
|
let(:client) { double }
|
10
10
|
|
11
|
+
context "setratio" do
|
12
|
+
let(:pool) { double("Pool") }
|
13
|
+
let(:out) { 'yup' }
|
14
|
+
|
15
|
+
before do
|
16
|
+
allow(pool).to receive(:get_member_v2).and_return(members)
|
17
|
+
allow(client).to receive_message_chain("LocalLB", "Pool") { pool }
|
18
|
+
subject.options = { ratio: 42 }
|
19
|
+
end
|
20
|
+
|
21
|
+
context "one member" do
|
22
|
+
let(:expected) {
|
23
|
+
{
|
24
|
+
pool_names: { item: [ 'mypool' ] },
|
25
|
+
members: { item: [ [ { address: '/Common/node1', port: '80' } ] ] },
|
26
|
+
ratios: { item: [ [ 42 ] ] }
|
27
|
+
}
|
28
|
+
}
|
29
|
+
let(:members) {
|
30
|
+
{:item=>{:item=>{:address=>"/Common/node1", :port=>"80"}, :"@a:array_type"=>"iControl:Common.AddressPort[1]"}, :"@s:type"=>"A:Array", :"@a:array_type"=>"iControl:Common.AddressPort[][1]"}
|
31
|
+
}
|
32
|
+
|
33
|
+
it "calls the API to set the member" do
|
34
|
+
expect(pool).to receive(:set_member_ratio).with(expected).and_return(out)
|
35
|
+
|
36
|
+
subject.setratio('mypool', 'node1')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "two members" do
|
41
|
+
let(:expected) {
|
42
|
+
{
|
43
|
+
pool_names: { item: [ 'mypool' ] },
|
44
|
+
members: { item: [ [ { address: '/Common/node1', port: '80' }, { address: '/Common/node2', port: '80' } ] ] },
|
45
|
+
ratios: { item: [[ 42, 42 ]] }
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
let(:members) {
|
50
|
+
{:item=>{:item=>[{:address=>"/Common/node1", :port=>"80"}, {:address=>"/Common/node2", :port=>"80"}], :"@a:array_type"=>"iControl:Common.AddressPort[2]"}, :"@s:type"=>"A:Array", :"@a:array_type"=>"iControl:Common.AddressPort[][1]"}
|
51
|
+
}
|
52
|
+
|
53
|
+
it "calls the API to set the members" do
|
54
|
+
expect(pool).to receive(:set_member_ratio).with(expected).and_return(out)
|
55
|
+
|
56
|
+
subject.setratio('mypool', 'node1', 'node2')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
11
61
|
context "list" do
|
12
62
|
let(:output) { capture(:stdout) { subject.list } }
|
13
63
|
|
64
|
+
before do
|
65
|
+
allow(client).to receive_message_chain("LocalLB", "Pool", "get_list") { api_result }
|
66
|
+
end
|
67
|
+
|
14
68
|
context "no pools" do
|
69
|
+
let(:api_result) { { item: nil } }
|
15
70
|
it "indicates there are no pools" do
|
16
|
-
allow(client).to receive_message_chain("LocalLB", "Pool", "get_list") { { item: nil } }
|
17
71
|
expect(output).to include("No pools found")
|
18
72
|
end
|
19
73
|
end
|
20
74
|
|
21
75
|
context "one pool" do
|
76
|
+
let(:api_result) { { item: "/Common/foobar" } }
|
22
77
|
it "lists the pools" do
|
23
|
-
allow(client).to receive_message_chain("LocalLB", "Pool", "get_list") { { item: "/Common/foobar" } }
|
24
78
|
expect(output).to eq("/Common/foobar\n")
|
25
79
|
end
|
26
80
|
end
|
27
81
|
|
28
82
|
context "two pools" do
|
83
|
+
let(:api_result) { { item: [ "/Common/one", "/Common/two" ] } }
|
29
84
|
it "lists the pools" do
|
30
|
-
allow(client).to receive_message_chain("LocalLB", "Pool", "get_list") { { item: [ "/Common/one", "/Common/two" ] } }
|
31
85
|
expect(output).to eq("/Common/one\n/Common/two\n")
|
32
86
|
end
|
33
87
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: f5-icontrol
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sean Walberg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-08-
|
11
|
+
date: 2017-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: savon
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: awesome_print
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,7 +67,7 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '1.3'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: byebug
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - ">="
|
@@ -95,7 +109,7 @@ dependencies:
|
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: vcr
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - ">="
|
@@ -109,7 +123,7 @@ dependencies:
|
|
109
123
|
- !ruby/object:Gem::Version
|
110
124
|
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
126
|
+
name: webmock
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - ">="
|