enfcli 3.4.0 → 3.5.0

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: da8ebf306726a1569a5a3153cfa050bb9b636061333373b4e4ea3f478f4bb90e
4
- data.tar.gz: '067847d53544ab678eed5bd2d97ae3d1c180d3f89ee5a08483d535e36b74a86f'
3
+ metadata.gz: 131b57ab3f2a4584c8474f155f551361ba8668cb502b7cbe305fb822dedc9544
4
+ data.tar.gz: 411cb6af276ea545f7a7d991cb5e2726dad76ec69e5500b74e4855fef196185b
5
5
  SHA512:
6
- metadata.gz: 74c102ae5a073496bdb01207202c1424f42ebdb8775124a80a60f3825bcfb2feb2996344c706ff26f2ca41e11896b2c6ff120996ddf527faa9f0af3b5d013da7
7
- data.tar.gz: 6faff192e846ef26cacd6e044a2db724ade8e4112c909d5bf1218b3517d0ad8d9a9450dfbfd49f8a6bf64b76b9c89b2c0e0a9fabfde12cf2dce631094a180a24
6
+ metadata.gz: bbfd0d2f80f9610ebcca20c3ce574fbad97a8639cb39db73cfc1fb0611c3f4612714a5050d88e3762686ca98d8305a15cf444381cfbf4bfdb7018b3ec2b8a971
7
+ data.tar.gz: 2df4253529a69a7d80d8100108dd997f35de16a9fb18446da3c4d646de797c641e524ce372a7ec6f17c0ad8e8704a552cddbb28c76aa9d03d17073c8d2b7c613
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enfcli (3.4.0)
4
+ enfcli (3.5.0)
5
5
  rest-client (~> 2.0)
6
6
  terminal-table
7
7
  thor (~> 0.20.0)
data/lib/enfapi.rb CHANGED
@@ -18,6 +18,7 @@ require 'singleton'
18
18
  require 'json'
19
19
  require 'date'
20
20
  require 'base64'
21
+ require 'cgi'
21
22
 
22
23
  #
23
24
  # NOTE: When api's are refactored into individual classes
@@ -30,25 +31,109 @@ module EnfApi
30
31
  def self.to_json(hash)
31
32
  JSON.generate(hash)
32
33
  end
33
-
34
+
35
+ def self.url_encode(str)
36
+ CGI.escape( str ).gsub("+", "%20")
37
+ end
38
+
34
39
  class ERROR < StandardError
35
40
  def initialize(msg = "ENF Api Error")
36
41
  super
37
42
  end
38
43
  end
39
44
 
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
+
40
125
  class Firewall
41
126
  include Singleton
42
-
127
+
43
128
  def list_firewall_rules(network)
44
129
  EnfApi::API.instance.get "/api/xfw/v1/#{network}/rule"
45
130
  end
46
-
47
- def add_firewall_rule(network, rule)
131
+
132
+ def add_firewall_rule(network, rule)
48
133
  rule_json = EnfApi::to_json(rule)
49
134
  EnfApi::API.instance.post "/api/xfw/v1/#{network}/rule", rule_json
50
135
  end
51
-
136
+
52
137
  def delete_firewall_rules(network, id = nil)
53
138
  # Same method to call to delete all firewall rules in a network. if id is nil
54
139
  EnfApi::API.instance.delete "/api/xfw/v1/#{network}/rule/#{id}"
@@ -59,7 +144,7 @@ module EnfApi
59
144
  include Singleton
60
145
 
61
146
  ## NO_TEST
62
- def provision_group(new_group)
147
+ def provision_group(new_group)
63
148
  json = EnfApi::to_json(new_group)
64
149
  EnfApi::API.instance.post "/api/xiam/v1/groups", json
65
150
  end
@@ -71,7 +156,7 @@ module EnfApi
71
156
  end
72
157
 
73
158
  ## NO_TEST
74
- def add_group_to_network(gid, ipv6_network)
159
+ def add_group_to_network(gid, ipv6_network)
75
160
  json = EnfApi::to_json(ipv6_network)
76
161
  EnfApi::API.instance.post "/api/xiam/v1/groups/#{gid}/networks", json
77
162
  end
@@ -87,17 +172,17 @@ module EnfApi
87
172
  end
88
173
 
89
174
  ## NO_TEST
90
- def provision_endpoint(new_endpoint)
175
+ def provision_endpoint(new_endpoint)
91
176
  json = EnfApi::to_json(new_endpoint)
92
177
  EnfApi::API.instance.post "/api/xiam/v1/endpoints", json
93
178
  end
94
179
 
95
180
  ## NO_TEST
96
- def update_endpoint_key(ipv6, credentials)
181
+ def update_endpoint_key(ipv6, credentials)
97
182
  json = EnfApi::to_json(credentials)
98
183
  EnfApi::API.instance.post "/api/xiam/v1/endpoints/#{ipv6}/credentials", json
99
184
  end
100
-
185
+
101
186
  end
102
187
 
103
188
  ##############################################################################
@@ -186,13 +271,11 @@ module EnfApi
186
271
  EnfApi::API.instance.put "/api/captive/v1/profile/#{id}", json
187
272
  end
188
273
  end
189
-
190
-
191
-
274
+
192
275
  class NetworkManager
193
276
  include Singleton
194
277
  end
195
-
278
+
196
279
  class API
197
280
  include Singleton
198
281
 
@@ -217,7 +300,7 @@ module EnfApi
217
300
  case response.code
218
301
  when 200
219
302
  # get resp from json
220
- resp = from_json(response.body)
303
+ resp = from_json(response.body)
221
304
 
222
305
  # set request headers for subsequent api calls
223
306
  token = resp[:data][0][:token]
@@ -233,28 +316,28 @@ module EnfApi
233
316
 
234
317
  def get(request_uri)
235
318
  @api[request_uri].get(@headers) {|response, request, result|
236
- process_api_response response, request, result
319
+ process_api_response response, request, result
237
320
  }
238
321
  end
239
322
 
240
323
  def post(request_uri, request_body = '')
241
324
  @api[request_uri].post(request_body, @headers) {|response, request, result|
242
- process_api_response response, request, result
325
+ process_api_response response, request, result
243
326
  }
244
327
  end
245
328
 
246
329
  def put(request_uri, request_body = '')
247
330
  @api[request_uri].put(request_body, @headers) {|response, request, result|
248
- process_api_response response, request, result
331
+ process_api_response response, request, result
249
332
  }
250
- end
333
+ end
251
334
 
252
335
  def delete(request_uri)
253
336
  @api[request_uri].delete(@headers) {|response, request, result|
254
- process_api_response response, request, result
337
+ process_api_response response, request, result
255
338
  }
256
- end
257
-
339
+ end
340
+
258
341
  ############################################################################################################################
259
342
  # NOT READY API. MOVE ABOVE THIS LINE AFTER RSPEC OR INTO OWN CLASS
260
343
  ############################################################################################################################
@@ -264,47 +347,47 @@ module EnfApi
264
347
  }
265
348
  end
266
349
 
267
- def list_enfnws
350
+ def list_enfnws
268
351
  @api["/api/xcr/v2/enfnws"].get( @headers) {|response, request, result|
269
352
  process_api_response response, request, result
270
353
  }
271
354
  end
272
-
273
- def list_domains
355
+
356
+ def list_domains
274
357
  @api["/api/xcr/v2/domains"].get( @headers) {|response, request, result|
275
358
  process_api_response response, request, result
276
359
  }
277
360
  end
278
-
279
- def get_domain(domain_id)
361
+
362
+ def get_domain(domain_id)
280
363
  @api["/api/xcr/v2/domains/#{domain_id}"].get( @headers) {|response, request, result|
281
364
  process_api_response response, request, result
282
365
  }
283
366
  end
284
367
 
285
368
  def create_domain(domain_hash)
286
- json = to_json( domain_hash )
369
+ json = to_json( domain_hash )
287
370
  @api["/api/xcr/v2/domains"].post( json, @headers) {|response, request, result|
288
371
  process_api_response response, request, result
289
372
  }
290
373
  end
291
374
 
292
375
  def update_domain_rate_limits(domain_network, limit, limits_hash)
293
- json = to_json( limits_hash )
376
+ json = to_json( limits_hash )
294
377
  @api["/api/xcr/v2/domains/#{domain_network}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
295
378
  process_api_response response, request, result
296
379
  }
297
380
  end
298
381
 
299
382
  def update_network_rate_limits(network, limit, limits_hash)
300
- json = to_json( limits_hash )
383
+ json = to_json( limits_hash )
301
384
  @api["/api/xcr/v2/nws/#{network}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
302
385
  process_api_response response, request, result
303
386
  }
304
387
  end
305
388
 
306
389
  def update_ep_rate_limits(ipv6, limit, limits_hash)
307
- json = to_json( limits_hash )
390
+ json = to_json( limits_hash )
308
391
  @api["/api/xcr/v2/cxns/#{ipv6}/ep_rate_limits/#{limit}"].put( json, @headers) {|response, request, result|
309
392
  process_api_response response, request, result
310
393
  }
@@ -313,7 +396,7 @@ module EnfApi
313
396
  def get_domain_rate_limits(domain_network, filter = nil)
314
397
  api_url = "/api/xcr/v2/domains/#{domain_network}/ep_rate_limits"
315
398
  api_url = "#{api_url}/#{filter}" if filter
316
-
399
+
317
400
  @api[api_url].get( @headers) {|response, request, result|
318
401
  process_api_response response, request, result
319
402
  }
@@ -322,7 +405,7 @@ module EnfApi
322
405
  def get_network_rate_limits(network, filter = nil)
323
406
  api_url = "/api/xcr/v2/nws/#{network}/ep_rate_limits"
324
407
  api_url = "#{api_url}/#{filter}" if filter
325
-
408
+
326
409
  @api[api_url].get( @headers) {|response, request, result|
327
410
  process_api_response response, request, result
328
411
  }
@@ -331,7 +414,7 @@ module EnfApi
331
414
  def get_ep_rate_limits(ipv6, filter = nil)
332
415
  api_url = "/api/xcr/v2/cxns/#{ipv6}/ep_rate_limits"
333
416
  api_url = "#{api_url}/#{filter}" if filter
334
-
417
+
335
418
  @api[api_url].get( @headers) {|response, request, result|
336
419
  process_api_response response, request, result
337
420
  }
@@ -347,35 +430,35 @@ module EnfApi
347
430
  @api["/api/xcr/v2/domains/#{domain_network}/status"].delete( @headers) {|response, request, result|
348
431
  process_api_response response, request, result
349
432
  }
350
- end
433
+ end
351
434
 
352
435
  def create_nw(nw_hash)
353
436
  json = to_json(nw_hash)
354
- domain_id = nw_hash[:domain_id]
437
+ domain_id = nw_hash[:domain_id]
355
438
  @api["/api/xcr/v2/domains/#{domain_id}/nws"].post(json, @headers) {|response, request, result|
356
439
  process_api_response response, request, result
357
440
  }
358
441
  end
359
-
360
- def list_nw_connections(domain_id, network_cidr, file = nil)
442
+
443
+ def list_nw_connections(domain_id, network_cidr, file = nil)
361
444
  @api["/api/xcr/v2/domains/#{domain_id}/nws/#{network_cidr}/cxns"].get(@headers) {|response, request, result|
362
445
  process_api_response response, request, result
363
446
  }
364
447
  end
365
448
 
366
- def list_endpoint_events(ipv6)
449
+ def list_endpoint_events(ipv6)
367
450
  @api["/api/xcr/v2/cxns/#{ipv6}/events"].get(@headers) {|response, request, result|
368
451
  process_api_response response, request, result
369
452
  }
370
453
  end
371
454
 
372
- def list_network_events(network_cidr)
455
+ def list_network_events(network_cidr)
373
456
  @api["/api/xcr/v2/nws/#{network_cidr}/events"].get(@headers) {|response, request, result|
374
457
  process_api_response response, request, result
375
458
  }
376
459
  end
377
460
 
378
- def get_endpoint(ipv6)
461
+ def get_endpoint(ipv6)
379
462
  @api["/api/xcr/v2/cxns/#{ipv6}"].get(@headers) {|response, request, result|
380
463
  process_api_response response, request, result
381
464
  }
@@ -384,19 +467,19 @@ module EnfApi
384
467
  def update_endpoint(ipv6, name)
385
468
  hash = { :ipv6 => ipv6, :name => name }
386
469
  json = to_json( hash )
387
-
470
+
388
471
  @api["/api/xcr/v2/cxns/#{ipv6}"].put( json, @headers) {|response, request, result|
389
- process_api_response response, request, result
472
+ process_api_response response, request, result
390
473
  }
391
474
  end
392
475
 
393
- def activate_enfnw(subnet)
476
+ def activate_enfnw(subnet)
394
477
  @api["/api/xcr/v2/enfnws/#{subnet}"].put( '', @headers) {|response, request, result|
395
- process_api_response response, request, result
478
+ process_api_response response, request, result
396
479
  }
397
480
  end
398
481
 
399
- def list_domain_users(domain_network)
482
+ def list_domain_users(domain_network)
400
483
  @api["/api/xcr/v2/domains/#{domain_network}/users"].get( @headers) {|response, request, result|
401
484
  puts response.code
402
485
  process_api_response response, request, result
@@ -413,10 +496,10 @@ module EnfApi
413
496
  json = to_json( hash )
414
497
  @api["/api/xcr/v2/domains/#{domain_network}/invites"].post( json, @headers) { |response, request, result|
415
498
  process_api_response response, request, result
416
- }
499
+ }
417
500
  end
418
501
 
419
- def cancel_invite(email)
502
+ def cancel_invite(email)
420
503
  @api["/api/xcr/v2/invites/#{email}"].delete( @headers) {|response, request, result|
421
504
  process_api_response response, request, result
422
505
  }
@@ -425,7 +508,7 @@ module EnfApi
425
508
  def resend_invite(email)
426
509
  @api["/api/xcr/v2/invites/#{email}"].put( "{}", @headers) {|response, request, result|
427
510
  process_api_response response, request, result
428
- }
511
+ }
429
512
  end
430
513
 
431
514
  ############################################################################################################################
@@ -440,7 +523,7 @@ module EnfApi
440
523
  when 201
441
524
  # return response body
442
525
  from_json(response.body)
443
-
526
+
444
527
  when 400
445
528
  # api returns and error
446
529
  raise EnfApi::ERROR, api_error_msg(from_json(response.body))
@@ -452,12 +535,12 @@ module EnfApi
452
535
  when 403
453
536
  # api returns and error
454
537
  raise EnfApi::ERROR, "AUTHORIZATION_ERROR: User is not authorized to perform this operation!"
455
-
538
+
456
539
  else
457
540
  raise EnfApi::ERROR, "Unexpected error! Please try again!"
458
541
  end
459
542
  end
460
-
543
+
461
544
  def from_json(string)
462
545
  begin
463
546
  JSON.parse(string, {:symbolize_names => true})
@@ -0,0 +1,446 @@
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
@@ -14,5 +14,5 @@
14
14
  # limitations under the License.
15
15
  #
16
16
  module EnfCli
17
- VERSION = '3.4.0'
17
+ VERSION = '3.5.0'
18
18
  end
data/lib/enfcli.rb CHANGED
@@ -30,6 +30,7 @@ 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'
33
34
 
34
35
  module EnfCli
35
36
  FIREWALL_CMD = "firewall"
@@ -37,6 +38,7 @@ module EnfCli
37
38
  NETWORK_CMD = "network"
38
39
  USER_CMD = "user"
39
40
  CAPTIVE_CMD = "captive"
41
+ DNS_CMD = "dns"
40
42
 
41
43
  class IPV6
42
44
  def initialize(ipv6)
@@ -390,6 +392,8 @@ module EnfCli
390
392
  desc "#{EnfCli::CAPTIVE_CMD} COMMANDS", "#{EnfCli::CAPTIVE_CMD} commands"
391
393
  subcommand EnfCli::CAPTIVE_CMD, EnfCli::Cmd::Captive
392
394
 
395
+ desc "#{EnfCli::DNS_CMD} COMMANDS", "#{EnfCli::DNS_CMD} commands"
396
+ subcommand EnfCli::DNS_CMD, EnfCli::Cmd::Xdns
393
397
  end
394
398
  end
395
399
 
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
4
+ version: 3.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Venkatakumar Srinivasan
@@ -190,6 +190,7 @@ 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
193
194
  - lib/enfcli/commands/xfw.rb
194
195
  - lib/enfcli/commands/xiam.rb
195
196
  - lib/enfcli/version.rb