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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6eb8a54f54995d658cc9096ff1394345d3ce7457
4
- data.tar.gz: f46d475017ab3cbfd1bd3e0441e182e9f0fce79a
3
+ metadata.gz: b41af60e6a4f2679ddf9c5cadedf90677f0ad54f
4
+ data.tar.gz: 4d8912cb7bba726e570e3ee78a172fc08c5ff74f
5
5
  SHA512:
6
- metadata.gz: 6eb32f8c9832dc6cb76a1dc5445deb8ff55b8282a78d41665d7d6cd8ba23c791eaf3fa340e444a969b3acf9357b07489e24e314b6b4eb7737d4b1712429ac527
7
- data.tar.gz: e7a27999ccfec01a30e1b9495ac733775d5c071f04732f2474c89c1b37a648314875bbe6bba5c46175203b671fe7b06037d2b38f51c020032822a3da3156bbaa
6
+ metadata.gz: d2f31200ca7c977dafbbf6b3eddcc496b6896cdcb41b28dcfeda1ca124058a0113decc58cc420a46fc3011169dbb7eb8beed4e64d247dd1d161d0ee252aeb57e
7
+ data.tar.gz: e39a4d2fa1a3743ea8d181bb719a8bbf430050f56750ffd67315c2051ab4bbc03ca8839c072894aa53b4fa2aff845bfe79a0d4393b9311e9e55d44bb381a8dd4
@@ -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
 
@@ -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
@@ -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: { item: [ item: memberdata ] },
214
- failsafe_states: { item: [ 'STATE_DISABLED' ] },
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: { item: [ set.map { "STATE_ENABLED" } ] }
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: { item: [ set.map { "STATE_ENABLED" } ] }
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: { item: [ set.map { "STATE_DISABLED" } ] }
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: { item: [ set.map { "STATE_DISABLED" } ] }
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
 
@@ -1,5 +1,5 @@
1
1
  module F5
2
2
  module Icontrol
3
- VERSION = "0.2.3"
3
+ VERSION = "0.2.4"
4
4
  end
5
5
  end
@@ -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.3
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-29 00:00:00.000000000 Z
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: awesome_print
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: webmock
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: vcr
126
+ name: webmock
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - ">="