enfcli 3.4.0.pre.alpha → 3.4.0

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
  SHA256:
3
- metadata.gz: ed23993cf8999c35cb290c1c5a694cb4b4ccdd2c4b9d55094c1ba80994eadc0c
4
- data.tar.gz: 1ee8c5491dcab964f307832b18cff6def37feb6e04b528a3e0829b7572ad69a6
3
+ metadata.gz: da8ebf306726a1569a5a3153cfa050bb9b636061333373b4e4ea3f478f4bb90e
4
+ data.tar.gz: '067847d53544ab678eed5bd2d97ae3d1c180d3f89ee5a08483d535e36b74a86f'
5
5
  SHA512:
6
- metadata.gz: 7c3dd1750b398ae9b37b7161bf8839df7f788a1c383e706b9087a0330b9fc3f8d0c606c93cf558470a8035e4f35a5c7e007aecb4b739baca146950900c438cf8
7
- data.tar.gz: 78a255e25b8048bc813cc9a026ce051857d483ff0779352f7b2b81c6e0e3d9427678630b26fe3b9c350a99b5e1d39670f39711fd05289ce68c5fe0fa8c0ebf04
6
+ metadata.gz: 74c102ae5a073496bdb01207202c1424f42ebdb8775124a80a60f3825bcfb2feb2996344c706ff26f2ca41e11896b2c6ff120996ddf527faa9f0af3b5d013da7
7
+ data.tar.gz: 6faff192e846ef26cacd6e044a2db724ade8e4112c909d5bf1218b3517d0ad8d9a9450dfbfd49f8a6bf64b76b9c89b2c0e0a9fabfde12cf2dce631094a180a24
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enfcli (3.4.0.pre.alpha)
4
+ enfcli (3.4.0)
5
5
  rest-client (~> 2.0)
6
6
  terminal-table
7
7
  thor (~> 0.20.0)
@@ -15,7 +15,7 @@ GEM
15
15
  crack (0.4.3)
16
16
  safe_yaml (~> 1.0.0)
17
17
  diff-lcs (1.3)
18
- domain_name (0.5.20180417)
18
+ domain_name (0.5.20190701)
19
19
  unf (>= 0.0.5, < 1.0.0)
20
20
  fuubar (2.3.2)
21
21
  rspec-core (~> 3.0)
data/lib/enfapi.rb CHANGED
@@ -18,7 +18,6 @@ require 'singleton'
18
18
  require 'json'
19
19
  require 'date'
20
20
  require 'base64'
21
- require 'cgi'
22
21
 
23
22
  #
24
23
  # NOTE: When api's are refactored into individual classes
@@ -31,109 +30,25 @@ module EnfApi
31
30
  def self.to_json(hash)
32
31
  JSON.generate(hash)
33
32
  end
34
-
35
- def self.url_encode(str)
36
- CGI.escape( str ).gsub("+", "%20")
37
- end
38
-
33
+
39
34
  class ERROR < StandardError
40
35
  def initialize(msg = "ENF Api Error")
41
36
  super
42
37
  end
43
38
  end
44
39
 
45
- class Dns
46
- include Singleton
47
-
48
- def initialize
49
- @version = "2019-05-27"
50
- @xdns_base_url = "/api/xdns/#{@version}"
51
- end
52
-
53
- def list_zones(domain)
54
- EnfApi::API.instance.get "#{@xdns_base_url}/zones?enf_domain=#{domain}"
55
- end
56
-
57
- def create_dns_zone(new_zone)
58
- json = EnfApi::to_json(new_zone)
59
- EnfApi::API.instance.post "#{@xdns_base_url}/zones", json
60
- end
61
-
62
- def update_dns_zone(zone_id, updated_zone)
63
- json = EnfApi::to_json(updated_zone)
64
- EnfApi::API.instance.put "#{@xdns_base_url}/zones/#{zone_id}", json
65
- end
66
-
67
- def delete_dns_zone(zone_id)
68
- EnfApi::API.instance.delete "#{@xdns_base_url}/zones/#{zone_id}"
69
- end
70
-
71
- def add_networks_to_zone(zone_id, add_networks)
72
- json = EnfApi::to_json(add_networks)
73
- EnfApi::API.instance.post "#{@xdns_base_url}/zones/#{zone_id}/networks", json
74
- end
75
-
76
- def replace_networks_in_zone(zone_id, replace_networks)
77
- json = EnfApi::to_json(replace_networks)
78
- EnfApi::API.instance.put "#{@xdns_base_url}/zones/#{zone_id}/networks", json
79
- end
80
-
81
- def list_networks_in_zone(zone_id)
82
- EnfApi::API.instance.get "#{@xdns_base_url}/zones/#{zone_id}/networks"
83
- end
84
-
85
- def delete_networks_from_zone(zone_id, delete_networks)
86
- EnfApi::API.instance.delete "#{@xdns_base_url}/zones/#{zone_id}/networks?delete=#{delete_networks}"
87
- end
88
-
89
- def list_zones_in_network(network)
90
- EnfApi::API.instance.get "#{@xdns_base_url}/networks/#{network}/zones"
91
- end
92
-
93
- def provision_server(network, new_server)
94
- json = EnfApi::to_json(new_server)
95
- EnfApi::API.instance.post "#{@xdns_base_url}/networks/#{network}/servers", json
96
- end
97
-
98
- def list_servers(network)
99
- EnfApi::API.instance.get "#{@xdns_base_url}/networks/#{network}/servers"
100
- end
101
-
102
- def delete_server(network, server_ipv6)
103
- EnfApi::API.instance.delete "#{@xdns_base_url}/networks/#{network}/servers/#{server_ipv6}"
104
- end
105
-
106
- def create_dns_record(zone_id, new_record)
107
- json = EnfApi::to_json(new_record)
108
- EnfApi::API.instance.post "#{@xdns_base_url}/zones/#{zone_id}/records", json
109
- end
110
-
111
- def list_dns_records(zone_id)
112
- EnfApi::API.instance.get "#{@xdns_base_url}/zones/#{zone_id}/records"
113
- end
114
-
115
- def query(network, type, name)
116
- EnfApi::API.instance.get "#{@xdns_base_url}/networks/#{network}/query/#{type}/#{name}"
117
- end
118
-
119
- def delete_dns_record(record_id)
120
- EnfApi::API.instance.delete "#{@xdns_base_url}/records/#{record_id}"
121
- end
122
-
123
- end
124
-
125
40
  class Firewall
126
41
  include Singleton
127
-
42
+
128
43
  def list_firewall_rules(network)
129
44
  EnfApi::API.instance.get "/api/xfw/v1/#{network}/rule"
130
45
  end
131
-
132
- def add_firewall_rule(network, rule)
46
+
47
+ def add_firewall_rule(network, rule)
133
48
  rule_json = EnfApi::to_json(rule)
134
49
  EnfApi::API.instance.post "/api/xfw/v1/#{network}/rule", rule_json
135
50
  end
136
-
51
+
137
52
  def delete_firewall_rules(network, id = nil)
138
53
  # Same method to call to delete all firewall rules in a network. if id is nil
139
54
  EnfApi::API.instance.delete "/api/xfw/v1/#{network}/rule/#{id}"
@@ -144,7 +59,7 @@ module EnfApi
144
59
  include Singleton
145
60
 
146
61
  ## NO_TEST
147
- def provision_group(new_group)
62
+ def provision_group(new_group)
148
63
  json = EnfApi::to_json(new_group)
149
64
  EnfApi::API.instance.post "/api/xiam/v1/groups", json
150
65
  end
@@ -156,7 +71,7 @@ module EnfApi
156
71
  end
157
72
 
158
73
  ## NO_TEST
159
- def add_group_to_network(gid, ipv6_network)
74
+ def add_group_to_network(gid, ipv6_network)
160
75
  json = EnfApi::to_json(ipv6_network)
161
76
  EnfApi::API.instance.post "/api/xiam/v1/groups/#{gid}/networks", json
162
77
  end
@@ -172,17 +87,17 @@ module EnfApi
172
87
  end
173
88
 
174
89
  ## NO_TEST
175
- def provision_endpoint(new_endpoint)
90
+ def provision_endpoint(new_endpoint)
176
91
  json = EnfApi::to_json(new_endpoint)
177
92
  EnfApi::API.instance.post "/api/xiam/v1/endpoints", json
178
93
  end
179
94
 
180
95
  ## NO_TEST
181
- def update_endpoint_key(ipv6, credentials)
96
+ def update_endpoint_key(ipv6, credentials)
182
97
  json = EnfApi::to_json(credentials)
183
98
  EnfApi::API.instance.post "/api/xiam/v1/endpoints/#{ipv6}/credentials", json
184
99
  end
185
-
100
+
186
101
  end
187
102
 
188
103
  ##############################################################################
@@ -271,11 +186,13 @@ module EnfApi
271
186
  EnfApi::API.instance.put "/api/captive/v1/profile/#{id}", json
272
187
  end
273
188
  end
274
-
189
+
190
+
191
+
275
192
  class NetworkManager
276
193
  include Singleton
277
194
  end
278
-
195
+
279
196
  class API
280
197
  include Singleton
281
198
 
@@ -300,7 +217,7 @@ module EnfApi
300
217
  case response.code
301
218
  when 200
302
219
  # get resp from json
303
- resp = from_json(response.body)
220
+ resp = from_json(response.body)
304
221
 
305
222
  # set request headers for subsequent api calls
306
223
  token = resp[:data][0][:token]
@@ -316,28 +233,28 @@ module EnfApi
316
233
 
317
234
  def get(request_uri)
318
235
  @api[request_uri].get(@headers) {|response, request, result|
319
- process_api_response response, request, result
236
+ process_api_response response, request, result
320
237
  }
321
238
  end
322
239
 
323
240
  def post(request_uri, request_body = '')
324
241
  @api[request_uri].post(request_body, @headers) {|response, request, result|
325
- process_api_response response, request, result
242
+ process_api_response response, request, result
326
243
  }
327
244
  end
328
245
 
329
246
  def put(request_uri, request_body = '')
330
247
  @api[request_uri].put(request_body, @headers) {|response, request, result|
331
- process_api_response response, request, result
248
+ process_api_response response, request, result
332
249
  }
333
- end
250
+ end
334
251
 
335
252
  def delete(request_uri)
336
253
  @api[request_uri].delete(@headers) {|response, request, result|
337
- process_api_response response, request, result
254
+ process_api_response response, request, result
338
255
  }
339
- end
340
-
256
+ end
257
+
341
258
  ############################################################################################################################
342
259
  # NOT READY API. MOVE ABOVE THIS LINE AFTER RSPEC OR INTO OWN CLASS
343
260
  ############################################################################################################################
@@ -347,47 +264,47 @@ module EnfApi
347
264
  }
348
265
  end
349
266
 
350
- def list_enfnws
267
+ def list_enfnws
351
268
  @api["/api/xcr/v2/enfnws"].get( @headers) {|response, request, result|
352
269
  process_api_response response, request, result
353
270
  }
354
271
  end
355
-
356
- def list_domains
272
+
273
+ def list_domains
357
274
  @api["/api/xcr/v2/domains"].get( @headers) {|response, request, result|
358
275
  process_api_response response, request, result
359
276
  }
360
277
  end
361
-
362
- def get_domain(domain_id)
278
+
279
+ def get_domain(domain_id)
363
280
  @api["/api/xcr/v2/domains/#{domain_id}"].get( @headers) {|response, request, result|
364
281
  process_api_response response, request, result
365
282
  }
366
283
  end
367
284
 
368
285
  def create_domain(domain_hash)
369
- json = to_json( domain_hash )
286
+ json = to_json( domain_hash )
370
287
  @api["/api/xcr/v2/domains"].post( json, @headers) {|response, request, result|
371
288
  process_api_response response, request, result
372
289
  }
373
290
  end
374
291
 
375
292
  def update_domain_rate_limits(domain_network, limit, limits_hash)
376
- json = to_json( limits_hash )
293
+ json = to_json( limits_hash )
377
294
  @api["/api/xcr/v2/domains/#{domain_network}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
378
295
  process_api_response response, request, result
379
296
  }
380
297
  end
381
298
 
382
299
  def update_network_rate_limits(network, limit, limits_hash)
383
- json = to_json( limits_hash )
300
+ json = to_json( limits_hash )
384
301
  @api["/api/xcr/v2/nws/#{network}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
385
302
  process_api_response response, request, result
386
303
  }
387
304
  end
388
305
 
389
306
  def update_ep_rate_limits(ipv6, limit, limits_hash)
390
- json = to_json( limits_hash )
307
+ json = to_json( limits_hash )
391
308
  @api["/api/xcr/v2/cxns/#{ipv6}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
392
309
  process_api_response response, request, result
393
310
  }
@@ -396,7 +313,7 @@ module EnfApi
396
313
  def get_domain_rate_limits(domain_network, filter = nil)
397
314
  api_url = "/api/xcr/v2/domains/#{domain_network}/ep_rate_limits"
398
315
  api_url = "#{api_url}/#{filter}" if filter
399
-
316
+
400
317
  @api[api_url].get( @headers) {|response, request, result|
401
318
  process_api_response response, request, result
402
319
  }
@@ -405,7 +322,7 @@ module EnfApi
405
322
  def get_network_rate_limits(network, filter = nil)
406
323
  api_url = "/api/xcr/v2/nws/#{network}/ep_rate_limits"
407
324
  api_url = "#{api_url}/#{filter}" if filter
408
-
325
+
409
326
  @api[api_url].get( @headers) {|response, request, result|
410
327
  process_api_response response, request, result
411
328
  }
@@ -414,7 +331,7 @@ module EnfApi
414
331
  def get_ep_rate_limits(ipv6, filter = nil)
415
332
  api_url = "/api/xcr/v2/cxns/#{ipv6}/ep_rate_limits"
416
333
  api_url = "#{api_url}/#{filter}" if filter
417
-
334
+
418
335
  @api[api_url].get( @headers) {|response, request, result|
419
336
  process_api_response response, request, result
420
337
  }
@@ -430,35 +347,35 @@ module EnfApi
430
347
  @api["/api/xcr/v2/domains/#{domain_network}/status"].delete( @headers) {|response, request, result|
431
348
  process_api_response response, request, result
432
349
  }
433
- end
350
+ end
434
351
 
435
352
  def create_nw(nw_hash)
436
353
  json = to_json(nw_hash)
437
- domain_id = nw_hash[:domain_id]
354
+ domain_id = nw_hash[:domain_id]
438
355
  @api["/api/xcr/v2/domains/#{domain_id}/nws"].post(json, @headers) {|response, request, result|
439
356
  process_api_response response, request, result
440
357
  }
441
358
  end
442
-
443
- def list_nw_connections(domain_id, network_cidr, file = nil)
359
+
360
+ def list_nw_connections(domain_id, network_cidr, file = nil)
444
361
  @api["/api/xcr/v2/domains/#{domain_id}/nws/#{network_cidr}/cxns"].get(@headers) {|response, request, result|
445
362
  process_api_response response, request, result
446
363
  }
447
364
  end
448
365
 
449
- def list_endpoint_events(ipv6)
366
+ def list_endpoint_events(ipv6)
450
367
  @api["/api/xcr/v2/cxns/#{ipv6}/events"].get(@headers) {|response, request, result|
451
368
  process_api_response response, request, result
452
369
  }
453
370
  end
454
371
 
455
- def list_network_events(network_cidr)
372
+ def list_network_events(network_cidr)
456
373
  @api["/api/xcr/v2/nws/#{network_cidr}/events"].get(@headers) {|response, request, result|
457
374
  process_api_response response, request, result
458
375
  }
459
376
  end
460
377
 
461
- def get_endpoint(ipv6)
378
+ def get_endpoint(ipv6)
462
379
  @api["/api/xcr/v2/cxns/#{ipv6}"].get(@headers) {|response, request, result|
463
380
  process_api_response response, request, result
464
381
  }
@@ -467,19 +384,19 @@ module EnfApi
467
384
  def update_endpoint(ipv6, name)
468
385
  hash = { :ipv6 => ipv6, :name => name }
469
386
  json = to_json( hash )
470
-
387
+
471
388
  @api["/api/xcr/v2/cxns/#{ipv6}"].put( json, @headers) {|response, request, result|
472
- process_api_response response, request, result
389
+ process_api_response response, request, result
473
390
  }
474
391
  end
475
392
 
476
- def activate_enfnw(subnet)
393
+ def activate_enfnw(subnet)
477
394
  @api["/api/xcr/v2/enfnws/#{subnet}"].put( '', @headers) {|response, request, result|
478
- process_api_response response, request, result
395
+ process_api_response response, request, result
479
396
  }
480
397
  end
481
398
 
482
- def list_domain_users(domain_network)
399
+ def list_domain_users(domain_network)
483
400
  @api["/api/xcr/v2/domains/#{domain_network}/users"].get( @headers) {|response, request, result|
484
401
  puts response.code
485
402
  process_api_response response, request, result
@@ -496,10 +413,10 @@ module EnfApi
496
413
  json = to_json( hash )
497
414
  @api["/api/xcr/v2/domains/#{domain_network}/invites"].post( json, @headers) { |response, request, result|
498
415
  process_api_response response, request, result
499
- }
416
+ }
500
417
  end
501
418
 
502
- def cancel_invite(email)
419
+ def cancel_invite(email)
503
420
  @api["/api/xcr/v2/invites/#{email}"].delete( @headers) {|response, request, result|
504
421
  process_api_response response, request, result
505
422
  }
@@ -508,7 +425,7 @@ module EnfApi
508
425
  def resend_invite(email)
509
426
  @api["/api/xcr/v2/invites/#{email}"].put( "{}", @headers) {|response, request, result|
510
427
  process_api_response response, request, result
511
- }
428
+ }
512
429
  end
513
430
 
514
431
  ############################################################################################################################
@@ -523,7 +440,7 @@ module EnfApi
523
440
  when 201
524
441
  # return response body
525
442
  from_json(response.body)
526
-
443
+
527
444
  when 400
528
445
  # api returns and error
529
446
  raise EnfApi::ERROR, api_error_msg(from_json(response.body))
@@ -535,12 +452,12 @@ module EnfApi
535
452
  when 403
536
453
  # api returns and error
537
454
  raise EnfApi::ERROR, "AUTHORIZATION_ERROR: User is not authorized to perform this operation!"
538
-
455
+
539
456
  else
540
457
  raise EnfApi::ERROR, "Unexpected error! Please try again!"
541
458
  end
542
459
  end
543
-
460
+
544
461
  def from_json(string)
545
462
  begin
546
463
  JSON.parse(string, {:symbolize_names => true})
@@ -14,5 +14,5 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  module EnfCli
17
- VERSION = '3.4.0-alpha'
17
+ VERSION = '3.4.0'
18
18
  end
data/lib/enfcli.rb CHANGED
@@ -30,7 +30,6 @@ require 'enfcli/commands/xiam'
30
30
  require 'enfcli/commands/xfw'
31
31
  require 'enfcli/commands/user'
32
32
  require 'enfcli/commands/captive'
33
- require 'enfcli/commands/xdns'
34
33
 
35
34
  module EnfCli
36
35
  FIREWALL_CMD = "firewall"
@@ -38,7 +37,6 @@ module EnfCli
38
37
  NETWORK_CMD = "network"
39
38
  USER_CMD = "user"
40
39
  CAPTIVE_CMD = "captive"
41
- DNS_CMD = "dns"
42
40
 
43
41
  class IPV6
44
42
  def initialize(ipv6)
@@ -392,8 +390,6 @@ module EnfCli
392
390
  desc "#{EnfCli::CAPTIVE_CMD} COMMANDS", "#{EnfCli::CAPTIVE_CMD} commands"
393
391
  subcommand EnfCli::CAPTIVE_CMD, EnfCli::Cmd::Captive
394
392
 
395
- desc "#{EnfCli::DNS_CMD} COMMANDS", "#{EnfCli::DNS_CMD} commands"
396
- subcommand EnfCli::DNS_CMD, EnfCli::Cmd::Xdns
397
393
  end
398
394
  end
399
395
 
data/lib/enfthor.rb CHANGED
@@ -23,11 +23,11 @@ module EnfCli
23
23
 
24
24
  # helper functions
25
25
  no_commands {
26
-
26
+
27
27
  def format_date(date)
28
28
  DateTime.strptime("#{date}",'%s') if date
29
29
  end
30
-
30
+
31
31
  def render_table(headings, rows, file = nil)
32
32
  table = Terminal::Table.new
33
33
  table.headings = headings
@@ -50,11 +50,11 @@ module EnfCli
50
50
  raise EnfCli::ERROR, "User Session not establised!" if !session
51
51
 
52
52
  yield
53
- end
53
+ end
54
54
  end
55
55
 
56
56
  def try_with_rescue
57
- begin
57
+ begin
58
58
  yield
59
59
  rescue EnfApi::ERROR => e
60
60
  say e, :red
@@ -62,13 +62,13 @@ module EnfCli
62
62
  rescue OpenSSL::SSL::SSLError => e
63
63
  say e, :red
64
64
  say "Host may not support https. Try http instead", :bold
65
-
65
+
66
66
  rescue => e
67
67
  say e, :red
68
68
  end
69
69
  end
70
70
 
71
-
71
+
72
72
  }
73
73
 
74
74
  # override help methods
@@ -79,9 +79,9 @@ module EnfCli
79
79
  text = $stdout.string
80
80
  $stdout = STDOUT
81
81
  text
82
- end
83
-
84
- def help(shell, subcommand = false)
82
+ end
83
+
84
+ def help(shell, subcommand = false)
85
85
  list = printable_commands(true, subcommand)
86
86
  Thor::Util.thor_classes_in(self).each do |klass|
87
87
  list += klass.printable_commands(false)
@@ -107,12 +107,12 @@ module EnfCli
107
107
 
108
108
  # Print the actual help message
109
109
  shell.say help_text
110
-
110
+
111
111
  # Add this line if you want to print custom text at the end of your help output.
112
112
  # (similar to how Rails does it)
113
113
  shell.say 'All commands can be run with -h (or --help) for more information.'
114
114
  end
115
115
  end
116
-
116
+
117
117
  end
118
118
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enfcli
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.4.0.pre.alpha
4
+ version: 3.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Venkatakumar Srinivasan
@@ -190,7 +190,6 @@ files:
190
190
  - lib/enfcli/commands/captive.rb
191
191
  - lib/enfcli/commands/user.rb
192
192
  - lib/enfcli/commands/xcr.rb
193
- - lib/enfcli/commands/xdns.rb
194
193
  - lib/enfcli/commands/xfw.rb
195
194
  - lib/enfcli/commands/xiam.rb
196
195
  - lib/enfcli/version.rb
@@ -209,9 +208,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
208
  version: '0'
210
209
  required_rubygems_version: !ruby/object:Gem::Requirement
211
210
  requirements:
212
- - - ">"
211
+ - - ">="
213
212
  - !ruby/object:Gem::Version
214
- version: 1.3.1
213
+ version: '0'
215
214
  requirements: []
216
215
  rubygems_version: 3.0.1
217
216
  signing_key:
@@ -1,446 +0,0 @@
1
- #
2
- # Copyright 2019 Xaptum,Inc
3
- #
4
- # Licensed under the Apache License, Version 2.0 (the "License");
5
- # you may not use this file except in compliance with the License.
6
- # You may obtain a copy of the License at
7
- #
8
- # http://www.apache.org/licenses/LICENSE-2.0
9
- #
10
- # Unless required by applicable law or agreed to in writing, software
11
- # distributed under the License is distributed on an "AS IS" BASIS,
12
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- # See the License for the specific language governing permissions and
14
- # limitations under the License.
15
- #
16
- require 'enfthor'
17
- require 'enfapi'
18
-
19
- module EnfCli
20
- module Cmd
21
-
22
- class Xdns < EnfThor
23
- DnsRecordType_AAAA = 'AAAA'
24
- DnsRecordType_TXT = 'TXT'
25
- DnsRecordType_SRV = 'SRV'
26
- DnsRecordType_CNAME = 'CNAME'
27
- DnsRecordTypes = [DnsRecordType_AAAA, DnsRecordType_CNAME, DnsRecordType_SRV, DnsRecordType_TXT]
28
-
29
- no_commands {
30
- def array_option_to_string(arr)
31
- arr.join(" ").gsub(/\A"+(.*?)"+\Z/m, '\1')
32
- end
33
-
34
- def get_record_value(type, value)
35
- case type
36
- when DnsRecordType_AAAA
37
- value = value[:ipv6]
38
-
39
- when DnsRecordType_CNAME
40
- value = value[:dname]
41
-
42
- when DnsRecordType_SRV
43
- value = "#{value[:priority]} #{value[:weight]} #{value[:port]} #{value[:target]}"
44
-
45
- when DnsRecordType_TXT
46
- value = value[:txt]
47
- end
48
-
49
- value
50
- end
51
-
52
- def display_zones_table(zones)
53
- headings = ['Id', 'Zone', 'Description', 'Enf Domain']
54
- rows = zones.map{ |hash|
55
- [ hash[:id], hash[:zone_domain_name], hash[:description], hash[:enf_domain] ]
56
- }
57
- render_table(headings, rows)
58
- end
59
-
60
- def display_networks_table(networks)
61
- headings = ['Id', 'Network' ]
62
- rows = networks.map{ |hash|
63
- [ hash[:rowid], hash[:enf_network] ]
64
- }
65
- render_table(headings, rows)
66
- end
67
-
68
- def display_records_table(records)
69
- headings = ['Id', 'Name', 'Type', 'Value', 'TTL']
70
- rows = records.map{ |hash|
71
- [ hash[:id], hash[:name], hash[:type], get_record_value(hash[:type], hash[:value]), hash[:ttl] ]
72
- }
73
- render_table(headings, rows)
74
- end
75
-
76
- def display_servers_table(servers)
77
- headings = ['Id', 'IPv6', 'Network', 'Description' ]
78
- rows = servers.map{ |hash|
79
- [ hash[:id], hash[:ipv6], hash[:enf_network], hash[:description] ]
80
- }
81
- render_table(headings, rows)
82
- end
83
- }
84
-
85
- desc "create-zone", "Create DNS Zone"
86
- method_option :'zone-domain-name', :type => :string, :required => true
87
- method_option :description, :type => :array, :banner => "DESCRIPTION"
88
- method_option :'enf-domain', :type => :string, :banner => "/48 Enf Domain"
89
- def create_zone
90
- try_with_rescue_in_session do
91
- ## session
92
- session = EnfCli::CTX.instance.session
93
-
94
- ## Gather parameters
95
- zone_domain_name = options['zone-domain-name']
96
- description = array_option_to_string(options.description) if options.description
97
- case session[:type]
98
- when 'XAPTUM_ADMIN'
99
- enf_domain = options['enf-domain']
100
- raise "No value provided for required options '--enf-domain'" unless enf_domain
101
-
102
- else
103
- enf_domain = session[:domain_network]
104
- end
105
-
106
- ## create request hash
107
- new_zone = {
108
- :zone_domain_name => zone_domain_name,
109
- :description => description,
110
- :enf_domain => enf_domain
111
- }
112
-
113
- ## call api
114
- data = EnfApi::Dns.instance.create_dns_zone new_zone
115
- zones = data[:data]
116
-
117
- ## display success
118
- say "Created DNS zone #{zone_domain_name}!", :green
119
-
120
- display_zones_table zones
121
- end
122
- end
123
-
124
- desc "list-zones", "List DNS Zones"
125
- method_option :'enf-domain', :type => :string, :banner => "/48 Enf Domain"
126
- def list_zones
127
- try_with_rescue_in_session do
128
- ## session
129
- session = EnfCli::CTX.instance.session
130
-
131
- case session[:type]
132
- when 'XAPTUM_ADMIN'
133
- enf_domain = options['enf-domain']
134
- raise "No value provided for required options '--enf-domain'" unless enf_domain
135
-
136
- else
137
- enf_domain = session[:domain_network]
138
- end
139
-
140
- ## call api
141
- data = EnfApi::Dns.instance.list_zones enf_domain
142
- zones = data[:data]
143
-
144
- ## display table
145
- display_zones_table zones
146
- end
147
- end
148
-
149
- desc "delete-zone", "Delete a DNS zone"
150
- method_option :'zone-id', :type => :string, :required => true
151
- def delete_zone
152
- try_with_rescue_in_session do
153
- zone_id = options[:'zone-id']
154
- ## call api
155
- EnfApi::Dns.instance.delete_dns_zone zone_id
156
-
157
- ## print success
158
- say "Deleted DNS Zone with id: #{zone_id}", :green
159
- end
160
- end
161
-
162
- desc "update-zone", "Update a DNS zone description"
163
- method_option :'zone-id', :type => :string, :required => true
164
- method_option :description, :type => :array, :banner => "DESCRIPTION", :required => true
165
- def update_zone
166
- try_with_rescue_in_session do
167
- ## get parameters
168
- description = array_option_to_string(options.description) if options.description
169
-
170
- ## update request
171
- update_zone_req = {
172
- :description => description
173
- }
174
-
175
- ## call api
176
- data = EnfApi::Dns.instance.update_dns_zone options[:'zone-id'], update_zone_req
177
- zones = data[:data]
178
-
179
- ## display updated result
180
- display_zones_table zones
181
- end
182
- end
183
-
184
- desc "add-networks-to-zone", "Add /64 networks to DNS zone"
185
- method_option :'zone-id', :type => :string, :required => true
186
- method_option :networks, :type => :array, :banner => "NETWORKS", :required => true
187
- def add_networks_to_zone
188
- try_with_rescue_in_session do
189
- ## gather parameters
190
- zone_id = options[:'zone-id']
191
- networks = array_option_to_string(options[:networks]).split(",").map{ |x| x.strip }
192
-
193
- ## add networks request
194
- add_networks_req = {
195
- :networks => networks
196
- }
197
-
198
- ## call api
199
- data = EnfApi::Dns.instance.add_networks_to_zone zone_id, add_networks_req
200
- networks = data[:data]
201
-
202
- ## display data
203
- say "Added the following networks to zone with id: #{zone_id}", :green
204
- display_networks_table networks
205
- end
206
- end
207
-
208
- desc "list-networks-in-zone", "List /64 networks in DNS zone"
209
- method_option :'zone-id', :type => :string, :required => true
210
- def list_networks_in_zone
211
- try_with_rescue_in_session do
212
- ## gather parameters
213
- zone_id = options[:'zone-id']
214
-
215
- ## call api
216
- data = EnfApi::Dns.instance.list_networks_in_zone zone_id
217
- networks = data[:data]
218
-
219
- ## display data
220
- display_networks_table networks
221
- end
222
- end
223
-
224
- desc "delete-networks-from-zone", "Delete /64 networks from DNS zone"
225
- method_option :'zone-id', :type => :string, :required => true
226
- method_option :networks, :type => :array, :banner => "NETWORKS", :required => true
227
- def delete_networks_from_zone
228
- try_with_rescue_in_session do
229
- ## gather parameters
230
- zone_id = options[:'zone-id']
231
- networks = array_option_to_string(options[:networks])
232
-
233
- ## call api
234
- EnfApi::Dns.instance.delete_networks_from_zone zone_id, networks
235
-
236
- ## print success
237
- say "Deleted networks from DNS zone!", :green
238
- end
239
- end
240
-
241
- desc "replace-networks-in-zone", "Replace /64 networks in DNS zone"
242
- method_option :'zone-id', :type => :string, :required => true
243
- method_option :networks, :type => :array, :banner => "NETWORKS", :required => true
244
- def replace_networks_in_zone
245
- try_with_rescue_in_session do
246
- ## gather parameters
247
- zone_id = options[:'zone-id']
248
- networks = array_option_to_string(options[:networks]).split(",").map{ |x| x.strip }
249
-
250
- ## replace networks request
251
- replace_networks_req = {
252
- :networks => networks
253
- }
254
-
255
- ## call api
256
- EnfApi::Dns.instance.replace_networks_in_zone zone_id, replace_networks_req
257
-
258
- ## print success
259
- say "Replaced networks in DNS zone!", :green
260
- end
261
- end
262
-
263
- desc "list-zones-in-network", "List DNS Zones in /64 Network"
264
- method_option :'network', :type => :string, :banner => "/64 Enf Network", :required => true
265
- def list_zones_in_network
266
- try_with_rescue_in_session do
267
- ## gather parameters
268
- network = options[:network]
269
-
270
- ## call api
271
- data = EnfApi::Dns.instance.list_zones_in_network network
272
- zones = data[:data]
273
-
274
- ## display data
275
- display_zones_table zones
276
- end
277
- end
278
-
279
- desc "create-record", "Create a DNS record"
280
- method_option :'zone-id', :type => :string, :required => true
281
- method_option :name, :type => :string, :required => true
282
- method_option :'type', :type => :string, :required => true, :enum => DnsRecordTypes
283
- method_option :ttl, :type => :numeric, :required => true
284
- method_option :value, :type => :array, :required => true, :banner => 'VALUE'
285
- def create_record
286
- try_with_rescue_in_session do
287
- ## gather parameters
288
- zone_id = options[:'zone-id']
289
- name = options[:name]
290
- type = options[:type]
291
- ttl = options[:ttl]
292
- value = array_option_to_string(options.value)
293
-
294
- ## get value
295
- case type
296
- when DnsRecordType_AAAA
297
- ipv6 = EnfCli::IPV6.new(value).to_s
298
- value = { :ipv6 => ipv6 }
299
-
300
- when DnsRecordType_CNAME
301
- value = { :dname => value }
302
-
303
- when DnsRecordType_SRV
304
- raise "Invalid value for #{DnsRecordType_SRV} record" unless options.value.length == 4
305
- value = { :priority => Integer(options.value[0]),
306
- :weight => Integer(options.value[1]),
307
- :port => Integer(options.value[2]),
308
- :target => options.value[3],
309
- }
310
-
311
- when DnsRecordType_TXT
312
- value = { :txt => value }
313
- end
314
-
315
-
316
-
317
- new_record = {
318
- :name => name,
319
- :type => type,
320
- :ttl => ttl,
321
- :value => value
322
- }
323
-
324
- ## call api
325
- data = EnfApi::Dns.instance.create_dns_record zone_id, new_record
326
- records = data[:data]
327
-
328
- ## display table
329
- say "Created new DNS record!", :green
330
- display_records_table records
331
- end
332
- end
333
-
334
- desc "list-records", "List DNS records in a DNS zone"
335
- method_option :'zone-id', :type => :string, :required => true
336
- def list_records
337
- try_with_rescue_in_session do
338
- ## gather parameters
339
- zone_id = options[:'zone-id']
340
-
341
- ## call api
342
- data = EnfApi::Dns.instance.list_dns_records zone_id
343
- records = data[:data]
344
-
345
- ## display table
346
- display_records_table records
347
- end
348
- end
349
-
350
- desc "query", "Query DNS for a record"
351
- method_option :'network', :type => :string, :required => true, :banner => "/64 Enf Network"
352
- method_option :name, :type => :string, :required => true
353
- method_option :'type', :type => :string, :required => true, :enum => DnsRecordTypes
354
- def query
355
- try_with_rescue_in_session do
356
- ## gather parameters
357
- network = options[:network]
358
- name = options[:name]
359
- type = options[:type]
360
-
361
- ## call api
362
- data = EnfApi::Dns.instance.query network, type, name
363
- records = data[:data]
364
-
365
- ## display table
366
- display_records_table records
367
- end
368
- end
369
-
370
- desc "delete-record", "Delete a DNS record"
371
- method_option :'id', :type => :string, :required => true
372
- def delete_record
373
- try_with_rescue_in_session do
374
- ## gather parameters
375
- id = options[:id]
376
-
377
- ## call api
378
- EnfApi::Dns.instance.delete_dns_record id
379
-
380
- ## print success
381
- say "Deleted DNS record!", :green
382
- end
383
- end
384
-
385
- desc "provision-server", "Provision a DNS server in /64 network"
386
- method_option :'network', :type => :string, :banner => "/64 Enf Network", :required => true
387
- method_option :'ipv6', :type => :string
388
- method_option :description, :type => :array, :banner => "DESCRIPTION"
389
- def provision_server
390
- try_with_rescue_in_session do
391
- ## gather parameters
392
- network = options[:network]
393
- description = array_option_to_string(options.description) if options.description
394
- ipv6 = options[:ipv6]
395
-
396
- new_server = {
397
- :ipv6 => ipv6,
398
- :description => description
399
- }
400
-
401
- ## call API
402
- data = EnfApi::Dns.instance.provision_server network, new_server
403
- servers = data[:data]
404
-
405
- ## display results
406
- display_servers_table servers
407
- end
408
- end
409
-
410
- desc "list-servers", "List DNS server in /64 network"
411
- method_option :'network', :type => :string, :banner => "/64 Enf Network", :required => true
412
- def list_servers
413
- try_with_rescue_in_session do
414
- ## gather parameters
415
- network = options[:network]
416
-
417
- ## call api
418
- data = EnfApi::Dns.instance.list_servers network
419
- servers = data[:data]
420
-
421
- ## display resutls
422
- display_servers_table servers
423
- end
424
- end
425
-
426
- desc "delete-server", "Delete DNS server in /64 network"
427
- method_option :'network', :type => :string, :banner => "/64 Enf Network", :required => true
428
- method_option :'ipv6', :type => :string, :banner => "Server Ipv6", :required => true
429
- def delete_server
430
- try_with_rescue_in_session do
431
- ## gather parameters
432
- network = options[:network]
433
- ipv6 = options[:ipv6]
434
-
435
- ## call api
436
- EnfApi::Dns.instance.delete_server network, ipv6
437
-
438
- ## print success
439
- say "Delete DNS server with ipv6 #{ipv6} in #{network}!", :green
440
- end
441
- end
442
-
443
- end # Xdns
444
-
445
- end # Cmd module
446
- end # EnfCli module