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 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
  - - ">="