dyntool 0.0.2 → 0.0.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.
Files changed (2) hide show
  1. data/lib/dyntool.rb +125 -88
  2. metadata +3 -3
data/lib/dyntool.rb CHANGED
@@ -5,10 +5,12 @@ require 'uri'
5
5
  require 'json'
6
6
  require 'ipaddr'
7
7
  require 'highline/import'
8
+ require 'yaml'
8
9
  ### class for loading and retrieving configuration from dyn.yml
9
10
  class LoadConfig
10
- def SetConfFile=( confFile )
11
- @confFile = confFile
11
+ def SetConfFile
12
+ @pwd = Dir.pwd
13
+ @confFile = "#{@pwd}/dyn.yml"
12
14
  end
13
15
  def GetHandler
14
16
  @conf = YAML.load_file(@confFile)
@@ -34,8 +36,8 @@ class LoadConfig
34
36
  def GetCountries(region)
35
37
  @countries = @conf['regions'][region]
36
38
  end
37
- def GetDcsEnabled(region)
38
- @dcs = @conf['enable'][region]
39
+ def GetDcsEnabled(region,service)
40
+ @dcs = @conf[service][region]
39
41
  end
40
42
  def GetIpLabel(ip)
41
43
  @iplabel = @conf['ips'][ip]['label']
@@ -70,7 +72,7 @@ class Parameters
70
72
  def SetArgs=( argv )
71
73
  @ARGV = argv
72
74
  @sconf = LoadConfig.new()
73
- @sconf.SetConfFile = "dyn.yml"
75
+ @sconf.SetConfFile #= "dyn.yml"
74
76
  @sconf.GetHandler
75
77
  end
76
78
  # Opening Session to dyn using creds from the command line
@@ -96,18 +98,18 @@ class Parameters
96
98
  when "generate" then ValidateGenerate()
97
99
  when "get" then ValidateGet()
98
100
  when "revert" then ValidateRevert()
101
+ else DisplayUsage()
99
102
  end
100
103
  end
101
104
  # validating revert to current yml configuration
102
105
  def ValidateRevert()
103
106
  @services = @session.GetServices()
104
- ValidateServiceExist(@services,@ARGV[2])
105
- CompareGeo(@ARGV[2])
107
+ ValidateServiceExist(@services,@ARGV[1])
108
+ CompareGeo(@ARGV[1])
106
109
  AskUser()
107
- ValidateZone(@ARGV[1])
108
110
  @operate.SetOperation("RevertGeo")
109
111
  @operate.SetSession(@session)
110
- @operate.SetArgs(@ARGV[1],@ARGV[2])
112
+ @operate.SetArgs(@ARGV[1])
111
113
 
112
114
  end
113
115
  # Get approval from user to revert/shift after reviewing the changes
@@ -126,6 +128,12 @@ class Parameters
126
128
  @valid = arg
127
129
  end
128
130
  end
131
+ def GetZone(fqdn)
132
+ @fqdn_parts = fqdn.split('.')
133
+ @zone = "#{@fqdn_parts[-2]}" + "." + "#{@fqdn_parts[-1]}"
134
+ return(@zone)
135
+ end
136
+
129
137
  # Validating the get operation, and setting the relevant arguments in OperateDyn object
130
138
  def ValidateGet()
131
139
  case @ARGV[1]
@@ -134,59 +142,69 @@ class Parameters
134
142
  when "node" then @operate.SetOperation("GetNodeService")
135
143
  @operate.SetArgs(@ARGV[2])
136
144
  @operate.SetSession(@session)
137
- when "cname" then ValidateZone(@ARGV[2])
138
- ValidateFqdn(@ARGV[2],@ARGV[3],"true")
145
+ when "cname" then @zone = GetZone(@ARGV[2])
146
+ ValidateZone(@zone)
147
+ ValidateFqdn(@zone,@ARGV[2],"true")
139
148
  @operate.SetOperation("GetCnameService")
140
- @operate.SetArgs(@ARGV[2],@ARGV[3])
149
+ @operate.SetArgs(@zone,@ARGV[2])
141
150
  @operate.SetSession(@session)
142
151
  end
143
152
  end
144
153
  # Check type of record to add, the zone exist, then upon type, check arguments and set the required add operation
145
154
  def ValidateAdd
146
155
  ValidateType(@ARGV[1])
147
- ValidateZone(@ARGV[2])
148
156
  case @ARGV[1]
149
- when "a" then ValidateFqdn(@ARGV[2],@ARGV[3],"false")
150
- ValidateIP(@ARGV[4])
157
+ when "a" then @zone = GetZone(@ARGV[2])
158
+ ValidateZone(@zone)
159
+ ValidateFqdn(@zone,@ARGV[2],"false")
160
+ ValidateIP(@ARGV[3])
151
161
  @operate.SetOperation("AddARecord")
152
162
  @operate.SetSession(@session)
153
- @operate.SetArgs(@ARGV[2],@ARGV[3],@ARGV[4])
154
- when "cname" then ValidateFqdn(@ARGV[2],@ARGV[3],"true")
155
- ValidateFqdn(@ARGV[2],@ARGV[4],"false")
163
+ @operate.SetArgs(@zone,@ARGV[2],@ARGV[3])
164
+ when "cname" then @zone = GetZone(@ARGV[2])
165
+ ValidateZone(@zone)
166
+ ValidateFqdn(@zone,@ARGV[2],"false")
156
167
  @operate.SetOperation("AddCnameRecord")
157
168
  @operate.SetSession(@session)
158
- @operate.SetArgs(@ARGV[2],@ARGV[3],@ARGV[4])
159
- when "txt" then ValidateFqdn(@ARGV[2],@ARGV[3],"true")
169
+ @operate.SetArgs(@zone,@ARGV[2],@ARGV[3])
170
+ when "txt" then @zone = GetZone(@ARGV[2])
171
+ ValidateZone(@zone)
172
+ ValidateFqdn(@zone,@ARGV[2],"true")
160
173
  @operate.SetOperation("AddTxtRecord")
161
174
  @operate.SetSession(@session)
162
- @operate.SetArgs(@ARGV[2],@ARGV[3],@ARGV[4])
175
+ @operate.SetArgs(@zone,@ARGV[2],@ARGV[3])
176
+ when "zone" then @operate.SetOperation("AddZone")
177
+ @operate.SetSession(@session)
178
+ @operate.SetArgs(@ARGV[2])
163
179
  end
164
180
  end
165
181
  def ValidateChange
166
182
  ValidateType(@ARGV[1])
167
- ValidateZone(@ARGV[2])
183
+ @zone = GetZone(@ARGV[2])
184
+ ValidateZone(@zone)
168
185
  case @ARGV[1]
169
- when "cname" then ValidateFqdn(@ARGV[2],@ARGV[3],"true")
170
- ValidateFqdn(@ARGV[2],@ARGV[4],"true")
186
+ when "cname" then ValidateFqdn(@zone,@ARGV[2],"true")
187
+ ValidateFqdn(@zone,@ARGV[3],"true")
171
188
  @operate.SetOperation("ChangeCnameRecord")
172
189
  @operate.SetSession(@session)
173
- @operate.SetArgs(@ARGV[2],@ARGV[3],@ARGV[4])
190
+ @operate.SetArgs(@zone,@ARGV[2],@ARGV[3])
174
191
  end
175
192
  end
176
193
  # Validating the delete arguments: zone and fqdn exist, in case of service that the service exist
177
194
  def ValidateDel
178
195
  case @ARGV[1]
179
- when "node" then ValidateZone(@ARGV[2])
180
- ValidateFqdn(@ARGV[2],@ARGV[3],"true")
181
- @operate.SetOperation("DeleteNode")
182
- @operate.SetSession(@session)
183
- @operate.SetArgs(@ARGV[2],@ARGV[3])
184
- when "service" then ValidateZone(@ARGV[3])
196
+ when "node" then @zone = GetZone(@ARGV[2])
197
+ ValidateZone(@zone)
198
+ ValidateFqdn(@zone,@ARGV[2],"true")
199
+ @operate.SetOperation("DeleteNode")
200
+ @operate.SetSession(@session)
201
+ @operate.SetArgs(@zone,@ARGV[2])
202
+ when "service" then #ValidateZone(@ARGV[3])
185
203
  @services = @session.GetServices()
186
204
  ValidateServiceExist(@services,@ARGV[2])
187
205
  @operate.SetOperation("DeleteService")
188
206
  @operate.SetSession(@session)
189
- @operate.SetArgs(@ARGV[2],@ARGV[3])
207
+ @operate.SetArgs(@ARGV[2])
190
208
  end
191
209
  end
192
210
  def ValidateShift
@@ -194,18 +212,18 @@ class Parameters
194
212
  @sproviders = @sconf
195
213
  @services = @session.GetServices()
196
214
  ValidateServiceExist(@services,@ARGV[1])
197
- ValidateZone(@ARGV[2])
198
- @resource = ValidateShiftArgs(@ARGV[3],@ARGV[6],@ARGV[4])
215
+ #ValidateZone(@ARGV[2])
216
+ @resource = ValidateShiftArgs(@ARGV[2],@ARGV[5],@ARGV[3])
199
217
  case @resource
200
- when "dc" then @dcs = GetArgsDcs(@ARGV[5],@sdcs)
218
+ when "dc" then @dcs = GetArgsDcs(@ARGV[4],@sdcs)
201
219
  @dcs_list = @dcs.join("-")
202
220
  @operate.SetOperation("ShiftTraffic")
203
221
  @operate.SetSession(@session)
204
- @operate.SetArgs(@ARGV[1],@ARGV[4],@ARGV[5],@dcs_list,@ARGV[2])
205
- when "provider" then ValidateProvider(@ARGV[5],@ARGV[7])
222
+ @operate.SetArgs(@ARGV[1],@ARGV[3],@ARGV[4],@dcs_list)
223
+ when "provider" then ValidateProvider(@ARGV[4],@ARGV[6])
206
224
  @operate.SetOperation("ShiftTraffic")
207
225
  @operate.SetSession(@session)
208
- @operate.SetArgs(@ARGV[1],@ARGV[4],@ARGV[5],@ARGV[7],@ARGV[2])
226
+ @operate.SetArgs(@ARGV[1],@ARGV[3],@ARGV[4],@ARGV[6])
209
227
  end
210
228
  end
211
229
  # Get dcs list from arguments
@@ -215,7 +233,7 @@ class Parameters
215
233
  @sdcs = sdcs
216
234
  @ARGV.each do |arg|
217
235
  @c += 1
218
- if (@c > 7)
236
+ if (@c > 6)
219
237
  if (! @sdcs.include? "#{arg}")
220
238
  abort("The dcs is not in the configuration dcs list")
221
239
  else
@@ -247,12 +265,13 @@ class Parameters
247
265
  end
248
266
  end
249
267
  def ValidateGenerate
268
+ @zone = GetZone(@ARGV[2])
250
269
  ValidateServiceFormat(@ARGV[1])
251
- ValidateZone(@ARGV[2])
252
- ValidateFqdn(@ARGV[2],@ARGV[3],"false")
270
+ ValidateZone(@zone)
271
+ ValidateFqdn(@zone,@ARGV[2],"false")
253
272
  @operate.SetOperation("GenerateGeoNode")
254
273
  @operate.SetSession(@session)
255
- @operate.SetArgs(@ARGV[1],@ARGV[2],@ARGV[3])
274
+ @operate.SetArgs(@ARGV[1],@zone,@ARGV[2])
256
275
  end
257
276
  def ValidateServiceFormat(service)
258
277
  @service = service
@@ -301,7 +320,7 @@ class Parameters
301
320
  end
302
321
  # check that record type is in the allow list
303
322
  def ValidateType(type)
304
- @types = [ "a", "cname", "txt" ]
323
+ @types = [ "a", "cname", "txt", "zone" ]
305
324
  if ! @types.include? type
306
325
  puts "Not a valid record type"
307
326
  DisplayUsage()
@@ -309,39 +328,49 @@ class Parameters
309
328
  end
310
329
  # display script usage
311
330
  def DisplayUsage
312
- puts "Usage of dynamo.rb cmd"
313
- puts "**********************"
314
- puts "**********************"
315
- puts "(add)"
316
- puts "********************"
317
- puts "- a zone fqdn(a) ip , example: dynamo.rb add a example.com mynode.example.com 11.12.13.14"
318
- puts "- cname zone fqdn(a) fqdn(cname) , example: dynamo.rb add cname example.com mynode.example.com mycnamenode.example.com"
319
- puts "- txt zone fqdn(a) \"some text\" , example: dynamo.rb add txt example.com mynode.example.com \"this is some text\""
320
- puts "(del)"
321
- puts "********************"
322
- puts "- del zone node fqdn(node) - node can be a,cname,txt,geonode,etc , example: dynamo.rb del node example.com mynode.example.com"
323
- puts "- del service geoservice zone, example: dynamo.rb del service geo17 example.com"
324
- puts "(change)"
325
- puts "********************"
326
- puts "- change cname zone cname newfqdn, example: dynamo.rb change cname example.com mycnamenode.example.com test19.example.com"
327
- puts "(generate)"
328
- puts "geo service from yaml"
329
- puts "********************"
330
- puts "- generate geoservice zone geonode, example: dynamo.rb generate geo11 example.com test11.example.com"
331
- puts "(shift)"
332
- puts "********************"
333
- puts " - shift geoservice zone from dc/provider to dc/dcs/provider(in same dc)"
334
- puts "example1(shift traffic from chidc1 to nydc1): dynamo.rb shift geo11 example.com from dc chidc1 to nydc1"
335
- puts "example1(shift traffic from chidc1 to nydc1 and ladc1): dynamo.rb shift geo11 example.com from dc chidc1 to nydc1 ladc1"
336
- puts "example3(shift traffic from amc_chi to inap_chi): dynamo.rb shift geo15 example.com from provider amc_chi to inap_chi"
337
- puts "(revert)"
338
- puts "go back to state of yaml configuration"
339
- puts "*******************"
340
- puts "- revert zone geoservice, example: dynamo.rb revert example.com geo15"
341
- puts "(get)"
342
- puts " - get services (get all geo services), example: dynamo.rb get services"
343
- puts " - get node geonode, example: dynamo.rb get node test1.example.com"
344
- puts " - get cname zone cname, example: dynamo.rb get cname example.com mycnamenode.example.com"
331
+ STDOUT.puts <<-EOF
332
+ Usage:
333
+
334
+ * add: Adding a new record *
335
+
336
+ add a fqdn(a) ip example: dynamo.rb add a mynode.example.com 11.12.13.14
337
+ add cname zone fqdn(a) fqdn(cname) example: dynamo.rb add cname mycnamenode.example.com mynode.example.com
338
+ add txt zone fqdn(a) "some text" example: dynamo.rb add txt mynode.example.com "this is some text"
339
+
340
+
341
+ * del: Deleting a node or service *
342
+
343
+ del zone node fqdn(node) - node can be a,cname,txt,geonode,etc example: dynamo.rb del node mynode.example.com
344
+ del service geoservice zone example: dynamo.rb del service geo17
345
+
346
+
347
+ * change: Changing a record *
348
+
349
+ change cname zone cname newfqdn example: dynamo.rb change cname mycnamenode.example.com test19.example.com
350
+
351
+
352
+ * generate: Generating Geo service from yaml *
353
+
354
+ generate geoservice zone geonode example: dynamo.rb generate geo11 test11.example.com
355
+
356
+
357
+ * shift: Shifting traffic from dc or from provider on geo service *
358
+
359
+ shift geoservice zone from dc/provider to dc/dcs/provider(in same dc) example1: dynamo.rb shift geo11 from dc chidc1 to nydc1
360
+ example2: dynamo.rb shift geo11 from dc chidc1 to nydc1 ladc1
361
+ example3: dynamo.rb shift geo15 from provider amc_chi to inap_chi
362
+
363
+ * revert: Reverting a state of geo service to yaml state *
364
+
365
+ revert zone geoservice example: dynamo.rb revert geo15
366
+
367
+
368
+ * get: Getting infotmation of geo services, geonodes, cname pointing to geo *
369
+
370
+ get services (get all geo services) example: dynamo.rb get services
371
+ get node geonode example: dynamo.rb get node test1.example.com
372
+ get cname zone cname example: dynamo.rb get cname mycnamenode.example.com
373
+ EOF
345
374
  exit(2)
346
375
  end
347
376
  # compare service geo data of current state vs yaml file
@@ -374,7 +403,7 @@ class Parameters
374
403
  region['rdata']['a_rdata'].each do |rdata|
375
404
  @current_ips << rdata['address']
376
405
  end
377
- @sconf.GetDcsEnabled(@name).each do |dc|
406
+ @sconf.GetDcsEnabled(@name,service).each do |dc|
378
407
  @providers = @sconf.GetDcProviders(dc)
379
408
  @providers.each do |provider|
380
409
  @sconf.GetIPs(provider).each do |ips|
@@ -458,13 +487,14 @@ class OperateDyn
458
487
  def RunOP
459
488
  case(@@op)
460
489
  when "AddARecord" then @@session.AddARecord(@@args[0],@@args[1],@@args[2])
490
+ when "AddZone" then @@session.CreateZone(@@args[0])
461
491
  when "DeleteNode" then @@session.DeleteNode(@@args[0],@@args[1])
462
- when "DeleteService" then @@session.DeleteService(@@args[0],@@args[1])
492
+ when "DeleteService" then @@session.DeleteService(@@args[0])
463
493
  when "AddCnameRecord" then @@session.AddCnameRecord(@@args[0],@@args[1],@@args[2],"post")
464
494
  when "AddTxtRecord" then @@session.AddTxtRecord(@@args[0],@@args[1],@@args[2])
465
495
  when "ChangeCnameRecord" then @@session.AddCnameRecord(@@args[0],@@args[1],@@args[2],"put")
466
496
  when "GenerateGeoNode" then @record_data = BuildService(@@args[0],"","","")
467
- @@session.GenerateGeoService(@@args[0],@@args[1],@record_data,"create")
497
+ @@session.GenerateGeoService(@@args[0],@record_data,"create")
468
498
  @@session.GenerateGeoNode(@@args[0],@@args[1],@@args[2])
469
499
  when "GetServices" then @services = @@session.GetServices()
470
500
  puts "Here is the list of Geo services:"
@@ -475,9 +505,9 @@ class OperateDyn
475
505
  @geonode = @@session.GetCnameService(@@args[1],@@args[0])
476
506
  GetGeoNodeService(@services,@geonode)
477
507
  when "ShiftTraffic" then @record_data = BuildService(@@args[0],@@args[1],@@args[2],@@args[3])
478
- @@session.GenerateGeoService(@@args[0],@@args[4],@record_data,"update")
508
+ @@session.GenerateGeoService(@@args[0],@record_data,"update")
479
509
  when "RevertGeo" then @record_data = BuildService(@@args[0],"","","")
480
- @@session.GenerateGeoService(@@args[1],@@args[0],@record_data,"update")
510
+ @@session.GenerateGeoService(@@args[0],@record_data,"update")
481
511
  end
482
512
  end
483
513
  def GetOP
@@ -497,7 +527,7 @@ class OperateDyn
497
527
  def BuildService(service,flag,shiftfrom,shifto)
498
528
  puts "Generating the geo service data"
499
529
  @@conf = LoadConfig.new()
500
- @@conf.SetConfFile = "dyn.yml"
530
+ @@conf.SetConfFile #= "dyn.yml"
501
531
  @@conf.GetHandler
502
532
  @regions = @@conf.GetRegions
503
533
  @dcs = @@conf.GetDcs
@@ -512,7 +542,7 @@ class OperateDyn
512
542
  @labels = []
513
543
  @weights = []
514
544
  @countries = @@conf.GetCountries(region)
515
- @dcs = @@conf.GetDcsEnabled(region)
545
+ @dcs = @@conf.GetDcsEnabled(region,service)
516
546
  if (flag == "dc")
517
547
  if @dcs.include? "#{shiftfrom}"
518
548
  @dcs = @dcs - @shiftfrom
@@ -633,7 +663,7 @@ class Restcall
633
663
  PublishDyn(zone)
634
664
  end
635
665
  # Generating or modifying Geo service
636
- def GenerateGeoService(service,zone,record_data,flag)
666
+ def GenerateGeoService(service,record_data,flag)
637
667
  @record_data = record_data
638
668
  @url = URI.parse("https://api2.dynect.net/REST/Geo/#{service}/")
639
669
  if flag == "create"
@@ -643,7 +673,7 @@ class Restcall
643
673
  puts "Changing geo service"
644
674
  PutDyn()
645
675
  end
646
- PublishDyn(zone)
676
+ #PublishDyn(zone)
647
677
  end
648
678
  # Generating geo node and attaching to service
649
679
  def GenerateGeoNode(service,zone,geonode)
@@ -659,9 +689,11 @@ class Restcall
659
689
  @record_data = { :rdata => { :cname => "#{arecord}" }, :ttl => "0" }
660
690
  if (flag == "post")
661
691
  puts "Adding cname record"
692
+ puts "arecord #{arecord}, cname: #{cname}"
662
693
  PostDyn()
663
694
  elsif (flag == "put")
664
695
  puts "Changing cname record"
696
+ puts "arecord #{arecord}, cname: #{cname}"
665
697
  PutDyn()
666
698
  end
667
699
  PublishDyn(zone)
@@ -680,14 +712,13 @@ class Restcall
680
712
  PublishDyn(zone)
681
713
  end
682
714
  # deleting service
683
- def DeleteService(service,zone)
715
+ def DeleteService(service)
684
716
  @url = URI.parse("https://api2.dynect.net/REST/Geo/#{service}/")
685
717
  DeleteDyn()
686
- PublishDyn(zone)
718
+ #PublishDyn(zone)
687
719
  end
688
720
  # get method to dyn
689
721
  def GetDyn()
690
- puts "Getting data from dyn"
691
722
  @headers = { "Content-Type" => 'application/json', 'Auth-Token' => @auth_token }
692
723
  @resp, @data = @http.get(@url.path, @headers)
693
724
  @result = JSON.parse(@data)
@@ -761,6 +792,12 @@ class Restcall
761
792
  @geonode = @result['data']['rdata']['cname'].chomp('.')
762
793
  return(@geonode)
763
794
  end
795
+ def CreateZone(zone)
796
+ @url = URI.parse("https://api2.dynect.net/REST/Zone/#{zone}/")
797
+ @record_data = { :rname => "ops@outbrain.com", :ttl => "3600" }
798
+ PostDyn()
799
+ PublishDyn(zone)
800
+ end
764
801
  def PrintNodes(nodes)
765
802
  nodes.each do |node|
766
803
  puts node['fqdn']
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Ariel Moskovich
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2013-07-23 00:00:00 +03:00
17
+ date: 2013-09-07 00:00:00 +03:00
18
18
  default_executable:
19
19
  dependencies: []
20
20