f5-icontrol 0.2.3 → 0.2.4
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 +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
|
- - ">="
|