aly 0.2.0 → 0.2.3

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
  SHA256:
3
- metadata.gz: a67b93ee1a1850b5f9af5afaffbd14d0d989f2394571f09c7a5d22382a128535
4
- data.tar.gz: 837c13099835afd7b34f2e7db2143fb96ad1c208083ba84ee2bda0fd15eb1ed7
3
+ metadata.gz: 1f26b851dc09f00694624a45426546e11bc72c63de0a991ceb1e6b1e8989a3f1
4
+ data.tar.gz: e4f1e81074036af2e6565f0f98a30ffd7a81dc82a1c42bb878f6357c5a93cf55
5
5
  SHA512:
6
- metadata.gz: 480f9262bdc049a8b6028fd3cbaca0b3ca7e6be60506464be6a51e65cb227add6e74447d43ded3bccb8870294c8874f0736522c2ed0ae9bae243c50e09d417c5
7
- data.tar.gz: 93bd2d071c76d4eb30552e7512e061e583906470debe1cd1b59d9a4ee70f1bc3a1397099b33bf19a9fc443fe297624771c405492ad6981fee56847f0d398875a
6
+ metadata.gz: c762fdf73886adb7229a88510e613ec7d58966dc42cb1fe98bf3d84b7082274551e2201f08439953c467743561e90a4229d777294963d765a68987f0c3916c2d
7
+ data.tar.gz: 97f110b453a54434943d380ad960536dc26934ceff82b6f8fac8782011c38f2e8aba9692ff56cd8d5714c2df78926f0a947e965d78169e55f8d9fcf1f35d9796
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- aly (0.2.0)
4
+ aly (0.2.3)
5
5
  terminal-table (~> 1.8.0)
6
6
  thor (~> 0.20.0)
7
7
 
data/lib/aly/app.rb CHANGED
@@ -22,11 +22,11 @@ module Aly
22
22
  end
23
23
 
24
24
  def ecs(*args, **options)
25
- raw_out = exec('ecs', 'DescribeInstances', '--pager')
26
- selected = raw_out['Instances']['Instance'].each do |item|
27
- item['PrivateIP'] = (item['NetworkInterfaces']['NetworkInterface'] || []).map { |ni| ni['PrimaryIpAddress'] }.join(', ')
25
+ raw_out = exec('ecs', 'DescribeInstances', '--pager', **options)
26
+ selected = (raw_out['Instances']['Instance'] || []).each do |item|
27
+ item['PrivateIP'] = (item['NetworkInterfaces']['NetworkInterface'] || []).map { |ni| ni['PrimaryIpAddress'] }.join(',')
28
28
  item['PublicIP'] = item['EipAddress']['IpAddress'] || ''
29
- item['PublicIP'] = item['PublicIpAddress']['IpAddress'].join(', ') if item['PublicIP'] == ''
29
+ item['PublicIP'] = item['PublicIpAddress']['IpAddress'].join(',') if item['PublicIP'] == ''
30
30
  end
31
31
 
32
32
  if query = args.first&.split(',')
@@ -54,7 +54,7 @@ module Aly
54
54
 
55
55
  def eip(*args, **options)
56
56
  puts 'EIPs:'
57
- raw_out = exec('vpc', 'DescribeEipAddresses', '--PageSize=100')
57
+ raw_out = exec('vpc', 'DescribeEipAddresses', '--PageSize=100', **options)
58
58
  selected = raw_out['EipAddresses']['EipAddress']
59
59
 
60
60
  if query = args.first&.split(',')
@@ -63,10 +63,11 @@ module Aly
63
63
  end
64
64
  end
65
65
 
66
+
66
67
  if options['detail']
67
68
  puts JSON.pretty_generate(selected)
68
69
  else
69
- net_intefraces = exec('ecs', 'DescribeNetworkInterfaces', '--pager')['NetworkInterfaceSets']['NetworkInterfaceSet'].each_with_object({}) do |item, result|
70
+ net_intefraces = exec('ecs', 'DescribeNetworkInterfaces', '--pager', **options)['NetworkInterfaceSets']['NetworkInterfaceSet'].each_with_object({}) do |item, result|
70
71
  result[item['NetworkInterfaceId']] = item
71
72
  end
72
73
  selected = selected.map do |row|
@@ -91,10 +92,14 @@ module Aly
91
92
  end
92
93
 
93
94
  def slb(*args, **options)
94
- raw_out = exec('slb', 'DescribeLoadBalancers', '--pager')
95
- selected = raw_out['LoadBalancers']['LoadBalancer']
95
+ raw_out = exec('slb', 'DescribeLoadBalancers', '--pager', **options)
96
+ selected = raw_out['LoadBalancers']['LoadBalancer'] || []
97
+
98
+ eips = exec('vpc', 'DescribeEipAddresses', "--PageSize=#{selected.size}", **options)['EipAddresses']['EipAddress'].each_with_object({}) do |item, result|
99
+ result[item['InstanceId']] = item['IpAddress']
100
+ end
96
101
 
97
- listeners = exec('slb', 'DescribeLoadBalancerListeners', '--pager', 'path=Listeners')['Listeners'].each_with_object({}) do |listener, result|
102
+ listeners = (exec('slb', 'DescribeLoadBalancerListeners', '--pager', 'path=Listeners', **options)['Listeners'] || []).each_with_object({}) do |listener, result|
98
103
  instance_id = listener['LoadBalancerId']
99
104
  result[instance_id] ||= []
100
105
  result[instance_id] << listener
@@ -112,11 +117,11 @@ module Aly
112
117
 
113
118
  if options['detail']
114
119
  selected.each do |row|
115
- described_load_balancer_attributes = exec('slb', 'DescribeLoadBalancerAttribute', "--LoadBalancerId=#{row['LoadBalancerId']}")
120
+ described_load_balancer_attributes = exec('slb', 'DescribeLoadBalancerAttribute', "--LoadBalancerId=#{row['LoadBalancerId']}", **options)
116
121
  row['BackendServers'] = described_load_balancer_attributes['BackendServers']['BackendServer']
117
122
 
118
123
  row['Listeners'].select { |e| e['VServerGroupId'] }.each do |listener|
119
- vserver_group = exec('slb', 'DescribeVServerGroupAttribute', "--VServerGroupId=#{listener['VServerGroupId']}")
124
+ vserver_group = exec('slb', 'DescribeVServerGroupAttribute', "--VServerGroupId=#{listener['VServerGroupId']}", **options)
120
125
  listener['VServerGroup'] = vserver_group
121
126
  end
122
127
  end
@@ -140,6 +145,7 @@ module Aly
140
145
  Id: row['LoadBalancerId'],
141
146
  Name: row['LoadBalancerName'],
142
147
  Address: row['Address'],
148
+ Eip: eips[row['LoadBalancerId']] || '',
143
149
  Listeners: listeners
144
150
  }
145
151
  end
@@ -148,34 +154,40 @@ module Aly
148
154
  end
149
155
 
150
156
  def slb_contains_host?(host)
151
- @slb.any? { |lb| lb['Address'] == host }
157
+ @slb.any? { |lb| lb['Address'] == host || lb['Eip'] == host }
152
158
  end
153
159
 
154
160
  def ecs_contains_host?(host)
155
161
  @ecs.any? { |item| item['AllIPs'].include?(host) }
156
162
  end
157
163
 
158
- def show_slb(host)
159
- @listeners ||= exec('slb', 'DescribeLoadBalancerListeners', '--pager', 'path=Listeners')['Listeners']
160
- lb = @slb.find { |e| e['Address'] == host }
164
+ def show_slb(host, **options)
165
+ @listeners ||= exec('slb', 'DescribeLoadBalancerListeners', '--pager', 'path=Listeners', **options)['Listeners'] || []
166
+ lb = @slb.find { |e| e['Address'] == host || e['Eip'] == host }
161
167
  listeners = @listeners.select { |e| e['LoadBalancerId'] == lb['LoadBalancerId'] }
162
- background_servers = exec('slb', 'DescribeLoadBalancerAttribute', "--LoadBalancerId=#{lb['LoadBalancerId']}")['BackendServers']['BackendServer']
168
+ background_servers = exec('slb', 'DescribeLoadBalancerAttribute', "--LoadBalancerId=#{lb['LoadBalancerId']}", **options)['BackendServers']['BackendServer']
163
169
 
164
170
  puts 'LoadBalancers:'
165
171
  puts([{
166
172
  Id: lb['LoadBalancerId'],
167
173
  Name: lb['LoadBalancerName'],
168
174
  Address: lb['Address'],
169
- Listeners: listeners.size,
170
- BackendServers: background_servers.map { |e| e['ServerId'] }.join(', ')
175
+ Eip: lb['Eip'],
176
+ Listeners: listeners.size
171
177
  }].table.to_s)
172
178
  puts
173
179
 
180
+ if background_servers && background_servers.size > 0
181
+ puts 'Default Backend Servers:'
182
+ puts background_servers.table.to_s
183
+ puts
184
+ end
185
+
174
186
  listeners_info = listeners.map do |listener|
175
187
  {
176
188
  Port: listener['ListenerPort'],
177
189
  Protocol: listener['ListenerProtocol'],
178
- Status: listener['ListenerStatus'],
190
+ Status: listener['Status'],
179
191
  BackendServerPort: listener['BackendServerPort'],
180
192
  ForwardPort: listener.dig('HTTPListenerConfig', 'ForwardPort'),
181
193
  VServerGroup: listener['VServerGroupId']
@@ -188,11 +200,11 @@ module Aly
188
200
 
189
201
  listeners_info.each do |listener|
190
202
  if listener[:VServerGroup]
191
- vserver_group = exec('slb', 'DescribeVServerGroupAttribute', "--VServerGroupId=#{listener[:VServerGroup]}")["BackendServers"]["BackendServer"]
203
+ vserver_group = exec('slb', 'DescribeVServerGroupAttribute', "--VServerGroupId=#{listener[:VServerGroup]}", **options)["BackendServers"]["BackendServer"]
192
204
  puts "VServerGroup #{listener[:VServerGroup]}:"
193
205
  puts(vserver_group.map { |e|
194
206
  {
195
- EcInstanceId: e['ServerId'],
207
+ EcsInstanceId: e['ServerId'],
196
208
  Port: e['Port'],
197
209
  Weight: e['Weight'],
198
210
  Type: e['Type']
@@ -205,7 +217,7 @@ module Aly
205
217
  ecs_ids = background_servers.map { |e| e['ServerId'] }
206
218
  ecs_ids += listeners_info.flat_map { |e|
207
219
  if e[:VServerGroup]
208
- exec('slb', 'DescribeVServerGroupAttribute', "--VServerGroupId=#{e[:VServerGroup]}")["BackendServers"]["BackendServer"].map { |e| e['ServerId'] }
220
+ exec('slb', 'DescribeVServerGroupAttribute', "--VServerGroupId=#{e[:VServerGroup]}", **options)["BackendServers"]["BackendServer"].map { |e| e['ServerId'] }
209
221
  else
210
222
  []
211
223
  end
@@ -220,8 +232,8 @@ module Aly
220
232
  {
221
233
  Id: row['InstanceId'],
222
234
  Name: row['InstanceName'],
223
- PrivateIP: row['PrivateIP'].join(', '),
224
- PublicIP: row['PublicIP'].join(', '),
235
+ PrivateIP: row['PrivateIP'].join(','),
236
+ PublicIP: row['PublicIP'].join(','),
225
237
  CPU: row['Cpu'],
226
238
  RAM: "#{row['Memory'] / 1024.0} GB"
227
239
  }
@@ -234,8 +246,8 @@ module Aly
234
246
  {
235
247
  Id: row['InstanceId'],
236
248
  Name: row['InstanceName'],
237
- PrivateIP: row['PrivateIP'].join(', '),
238
- PublicIP: row['PublicIP'].join(', '),
249
+ PrivateIP: row['PrivateIP'].join(','),
250
+ PublicIP: row['PublicIP'].join(','),
239
251
  CPU: row['Cpu'],
240
252
  RAM: "#{row['Memory'] / 1024.0} GB"
241
253
  }
@@ -249,11 +261,17 @@ module Aly
249
261
  end
250
262
 
251
263
  def show(*args, **options)
252
- @slb ||= exec('slb', 'DescribeLoadBalancers', '--pager')['LoadBalancers']['LoadBalancer']
264
+ @slb ||= exec('slb', 'DescribeLoadBalancers', '--pager', **options)['LoadBalancers']['LoadBalancer'] || []
265
+
266
+ @eip ||= exec('vpc', 'DescribeEipAddresses', '--PageSize=100', **options)['EipAddresses']['EipAddress'] || []
267
+
268
+ eip_map = @eip.each_with_object({}) { |eip, h| h[eip['InstanceId']] = eip['IpAddress'] }
269
+ @slb.each do |slb|
270
+ slb['Eip'] = eip_map[slb['LoadBalancerId']]
271
+ end
253
272
 
254
- @eip ||= exec('vpc', 'DescribeEipAddresses', '--PageSize=100')['EipAddresses']['EipAddress']
255
273
  unless @ecs
256
- @ecs = exec('ecs', 'DescribeInstances', '--pager')['Instances']['Instance']
274
+ @ecs = exec('ecs', 'DescribeInstances', '--pager', **options)['Instances']['Instance'] || []
257
275
  @ecs.each do |item|
258
276
  item['PrivateIP'] = (item['NetworkInterfaces']['NetworkInterface'] || []).map { |ni| ni['PrimaryIpAddress'] }
259
277
  item['PublicIP'] = []
@@ -273,18 +291,20 @@ module Aly
273
291
  puts
274
292
 
275
293
  if slb_contains_host?(host)
276
- show_slb(host)
294
+ show_slb(host, **options)
277
295
  elsif ecs_contains_host?(host)
278
296
  show_ecs(host)
279
297
  elsif eip_contains_host?(host)
280
- eip(host)
298
+ eip(host, **options)
281
299
  else
282
300
  puts "Not found: #{host}"
283
301
  end
284
302
  end
285
303
 
286
- def exec(command, sub_command, *args)
287
- JSON.parse(`aliyun #{command} #{sub_command} #{args.join(' ')}`)
304
+ def exec(command, sub_command, *args, **options)
305
+ command = "aliyun #{command} #{sub_command} #{args.join(' ')}"
306
+ command += " -p #{options['profile']}" if options['profile']
307
+ JSON.parse(`#{command}`)
288
308
  end
289
309
  end
290
310
  end
data/lib/aly/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Aly
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Liu Xiang
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-10 00:00:00.000000000 Z
11
+ date: 2022-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor