cdncontrol 0.0.9 → 0.0.10

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Y2ZlOTNjMjAyYzc0ZDhlZmE3MTMzNDdkMjBmMzgyMmI2NzAyNGY0ZA==
4
+ YzZjMmE3NzM0NjU1NDc0YjgwMmJjMTQ0MzA3ZTMzOTQyMzM5YTc5Ng==
5
5
  data.tar.gz: !binary |-
6
- NDc2OWY3OTk1YjJlM2E1NzM4ODA1NGUzMjM4ZGY1NTgwZDE1ODNjNw==
6
+ NTk1YTA3ODk1ZTE0YmFkZDhlMjViYzE5ZTEzNTQ2ZDU0NDU2NmFmNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- Y2ZlYTRlOWJmNWMyOTFlMDY3YzhjYzhmYjAzMGExYTAyYmYwYWNjN2JiZDgz
10
- MTQzY2U1N2E2MmM3NDI2NzViM2UxNjVjYjdjNmM4NjVmMmYyYjNiMGY4ZWYy
11
- OTFjY2MzM2E4NWY3Y2I3NThjOWYyZDRiNmQyNzkwYTgyZjQwMTc=
9
+ MTc1MGI1YTQ1OWY5OTYyNjUzOWY0ZjE4YTQ1MDg4ZGRiODRhZGYwZjIxNTQ2
10
+ YTc0MmJlNzJlOGExMzEzZWY4N2Y4YzQ1ZTA1OWVjZTdmMjUwOGQwN2I4NGFk
11
+ MDEyYzA4MjIyOTAxMTA4YzFlMTljZDU0NGMyNzg3ZjBiMjJiMDA=
12
12
  data.tar.gz: !binary |-
13
- MjYwN2U0OTM3MDdkZDlkMGNmZGY5ZTAyY2UzMzY0ZTZiMzkxZDM2MmY3YjVi
14
- NzYxYTZmYzlhOWY2ZGQ2NWIyNDk2ZTdjNjQ5OGNlNTgyNmU2ZGYzOTU5Yzc1
15
- Y2EwMTY2MzNkODg4MTdiZmU5YTk4ZjI4MDFlMjQ3NjZiNTg5MjY=
13
+ ZmU3ODJiYmQ3M2Y3Y2JmNmU5NDYzZjUyMzZhZDI4YmUzY2Y5ZGZjNDQ5Y2Q5
14
+ Y2I5NzUzY2E4ZDkyNGQwMDJkN2NkMWY2ZTQwNTZlZGI4YjU0M2NiYzk4ZWRh
15
+ MDM0OWQ4MWRjMWFkNGE2MmJmZWNmZWM0NjU4ZjQ2MTBhOTVmNTQ=
@@ -1,91 +1,121 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'choice'
4
- require 'json'
5
4
  require 'yaml'
6
- require 'pp'
7
5
  require 'cdncontrol/trafficmanager'
8
6
 
9
- CONFIG = YAML.load_file("/usr/local/etc/cdncontrol.conf")
10
-
11
- # TODO: this should be dynamic
12
- VALID_PROVIDERS = CONFIG["valid_providers"]
13
- VALID_MODES = CONFIG["valid_modes"] || [ "always", "obey", "remove", "no" ]
14
- OUTPUT_PATH = CONFIG["output_path"] || "/tmp"
15
- VALID_TARGETS = CONFIG["targets"].keys
16
- options = { show: false, add: false, verbose: false }
17
-
18
- Choice.options do
19
- header "Please specify the command in one of the following formats:"
20
- header ""
21
- header "cdncontrol -t TARGET --show"
22
- header "cdncontrol -t TARGET --write"
23
- header "cdncontrol -t TARGET -p PROVIDER -w WEIGHT"
24
- header "cdncontrol -t TARGET -p PROVIDER -m MODE"
25
- header ""
26
- header "Specific options:"
27
-
28
- option :target, :required => false do
29
- short '-t'
30
- long '--target'
31
- desc "The configuration to work on (one of #{VALID_TARGETS.join(",")})"
32
- validate /^(#{VALID_TARGETS.join("|")})$/
33
- end
34
-
35
- option :provider, :required => false do
36
- short '-p'
37
- long '--provider'
38
- desc "Provider to modify (one of #{VALID_PROVIDERS.join(",")})"
39
- validate /^(#{VALID_PROVIDERS.join("|")})$/
40
- end
7
+ def load_config(conf_file)
8
+ abort("Config file '#{conf_file}' not found!") unless File.exists? conf_file
9
+ return YAML.load_file(conf_file)
10
+ end
41
11
 
42
- option :weight, :required => false do
43
- short '-w'
44
- long '--weight'
45
- desc 'Weight of traffic to send to provider (value between 1 and 15)'
46
- validate /^([1-9]|1[0-5])$/
47
- end
12
+ def validate_option(label, option, valid_options)
13
+ valid_choices = valid_options.join(', ')
14
+ return if option.nil?
15
+ abort "Invalid #{label} '#{option}' - choices are :#{valid_choices}" unless valid_options.include? option
16
+ end
48
17
 
49
- option :mode, :required => false do
50
- short '-m'
51
- long '--mode'
52
- desc "Set the serve mode of the provider (one of #{VALID_MODES.join(",")})"
53
- validate /^(#{VALID_MODES.join("|")})$/
54
- end
18
+ def validate_options(config, options)
19
+ validate_option('provider', options[:provider], config.fetch('valid_providers', []))
20
+ validate_option('mode', options[:mode], config.fetch('valid_modes', ["always", "obey", "remove", "no"]))
21
+ validate_option('target', options[:target], config.fetch('targets', {}).keys)
55
22
 
56
- option :show, :required => false do
57
- short '-s'
58
- long '--show'
59
- desc 'Show current provider ratios'
23
+ unless (options[:show] ||
24
+ options[:write] ||
25
+ (options[:provider] && options[:weight]) ||
26
+ (options[:provider] && options[:mode]))
27
+ Choice.help
60
28
  end
29
+ return options
30
+ end
61
31
 
62
- option :verbose, :required => false do
63
- short '-v'
64
- long '--verbose'
65
- desc 'Show me in excrutiating detail what is happening'
32
+ def parse_options
33
+ Choice.options do
34
+ header "Please specify the command in one of the following formats:"
35
+ header ""
36
+ header "cdncontrol -t TARGET --show"
37
+ header "cdncontrol -t TARGET --write"
38
+ header "cdncontrol -t TARGET -p PROVIDER -w WEIGHT"
39
+ header "cdncontrol -t TARGET -p PROVIDER -m MODE"
40
+ header ""
41
+ header "Specific options:"
42
+
43
+ option :target, :required => true do
44
+ short '-t'
45
+ long '--target'
46
+ desc "The configuration to work on"
47
+ end
48
+
49
+ option :provider do
50
+ short '-p'
51
+ long '--provider'
52
+ desc "Provider to modify"
53
+ end
54
+
55
+ option :weight do
56
+ short '-w'
57
+ long '--weight'
58
+ desc 'Weight of traffic to send to provider (value between 1 and 15)'
59
+ validate /^([1-9]|1[0-5])$/
60
+ end
61
+
62
+ option :mode do
63
+ short '-m'
64
+ long '--mode'
65
+ desc "Set the serve mode of the provider"
66
+ end
67
+
68
+ option :show do
69
+ short '-s'
70
+ long '--show'
71
+ desc 'Show current provider ratios'
72
+ end
73
+
74
+ option :config do
75
+ short '-c'
76
+ long '--config'
77
+ desc 'Path to config file'
78
+ default '/usr/local/etc/cdncontrol.conf'
79
+ end
80
+
81
+ option :output_dir do
82
+ short '-o'
83
+ long '--output-dir'
84
+ desc 'Path to output directory'
85
+ default '/tmp'
86
+ end
87
+
88
+ option :verbose do
89
+ short '-v'
90
+ long '--verbose'
91
+ desc 'Show me in excrutiating detail what is happening'
92
+ end
93
+
94
+ option :write do
95
+ long '--write'
96
+ desc 'Dump all weights out to JSON files for the dashboard'
97
+ end
66
98
  end
67
99
 
68
-
69
- option :write, :required => false do
70
- long '--write'
71
- desc 'Dump all weights out to JSON files for the dashboard'
72
- end
100
+ options = {
101
+ :provider => Choice['provider'],
102
+ :target => Choice['target'],
103
+ :mode => Choice['mode'],
104
+ :weight => Choice['weight'],
105
+ :show => Choice['show'],
106
+ :verbose => Choice['verbose'],
107
+ :write => Choice['write'],
108
+ :config => Choice['config'],
109
+ :output_dir => Choice['output_dir'],
110
+ }
111
+ return options
73
112
  end
74
113
 
75
- options[:provider] = Choice.choices[:provider] unless !Choice.choices[:provider]
76
- options[:target] = Choice.choices[:target] unless !Choice.choices[:target]
77
- options[:mode] = Choice.choices[:mode] unless !Choice.choices[:mode]
78
- options[:weight] = Choice.choices[:weight] unless !Choice.choices[:weight]
79
- options[:show] = Choice.choices[:show] unless !Choice.choices[:show]
80
- options[:verbose] = Choice.choices[:verbose] unless !Choice.choices[:verbose]
81
- options[:write] = Choice.choices[:write] unless !Choice.choices[:write]
82
-
83
- unless (options.has_key?(:target) && options[:show]) ||
84
- (options.has_key?(:target) && options.has_key?(:write)) ||
85
- (options.has_key?(:target) && options.has_key?(:provider) && options.has_key?(:weight)) ||
86
- (options.has_key?(:target) && options.has_key?(:provider) && options.has_key?(:mode))
87
- Choice.help
88
- end
114
+
115
+ # parse options and validate them
116
+ options = parse_options
117
+ config = load_config(options[:config])
118
+ validate_options(config, options)
89
119
 
90
120
  # trap SIGINT and return a clean exit message rather than stack trace
91
121
  Signal.trap('INT') {
@@ -93,36 +123,31 @@ Signal.trap('INT') {
93
123
  exit
94
124
  }
95
125
 
96
- ## action starts here
126
+ # action starts here
97
127
 
98
- target = CONFIG['targets'][options[:target]]
128
+ target = config['targets'][options[:target]]
99
129
 
100
- tm = CDNControl::TrafficManager.new(CONFIG,target, options[:verbose])
130
+ tm = CDNControl::TrafficManager.new(config, target, options[:verbose])
101
131
 
102
- if options[:show]
103
- tm.show_balance
104
- end
132
+ tm.show_balance if options[:show]
105
133
 
106
- if options[:write]
107
- tm.dump_weights(options[:target],OUTPUT_PATH)
108
- end
134
+ tm.dump_weights(options[:target], options[:output_dir]) if options[:write]
109
135
 
110
- if options.has_key?(:provider) && options.has_key?(:weight)
136
+ if options[:provider] && options[:weight]
111
137
  tm.show_balance("CURRENT LIVE WEIGHTS")
112
138
  tm.set_weight(options[:provider], options[:weight])
113
139
  tm.show_balance("NODE WEIGHTS AFTER CHANGE")
114
- tm.dump_weights(options[:target],OUTPUT_PATH)
115
-
140
+ tm.dump_weights(options[:target], options[:output_dir])
116
141
  end
117
142
 
118
- if options.has_key?(:provider) && options.has_key?(:mode)
143
+ if options[:provider] && options[:mode]
119
144
  tm.show_balance("CURRENT SERVE MODES AND WEIGHTS")
120
145
  tm.set_serve_mode(options[:provider], options[:mode])
121
146
  tm.show_balance("NODE SERVE MODES AFTER CHANGE")
122
- tm.dump_weights(options[:target],OUTPUT_PATH)
147
+ tm.dump_weights(options[:target], options[:output_dir])
123
148
  end
124
149
 
125
150
  # display a nag if configured
126
- if options[:show] != true && CONFIG['targets'][options[:target]].has_key?('nag')
127
- puts "** NOTE: #{CONFIG['targets'][options[:target]]['nag']}"
151
+ if !options[:show] && target.has_key?('nag')
152
+ puts "** NOTE: #{target['nag']}"
128
153
  end
@@ -2,12 +2,13 @@ $:.push File.expand_path('../lib', __FILE__)
2
2
 
3
3
  Gem::Specification.new do |gem|
4
4
  gem.name = 'cdn_control'
5
- gem.version = '0.0.9'
5
+ gem.version = '0.0.10'
6
6
  gem.authors = ["Jon Cowie", "Marcus Barczak"]
7
7
  gem.email = 'jonlives@gmail.com'
8
8
  gem.homepage = 'https://github.com/etsy/cdncontrol'
9
9
  gem.summary = "Tool for managing multiple CDN balances on Dyn's GSLB"
10
10
  gem.description = "Tool for managing multiple CDN balances on Dyn's GSLB"
11
+ gem.license = 'MIT'
11
12
 
12
13
  gem.files = `git ls-files`.split($\)
13
14
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
@@ -120,7 +120,7 @@ module CDNControl
120
120
 
121
121
  # Make a thread-local connection to dyn, so that we open many
122
122
  # connections at once.
123
- dyn_conn = DynectRest.new('etsy', @config['username'], @config['password'], @zone)
123
+ dyn_conn = DynectRest.new(@config['organization'], @config['username'], @config['password'], @zone)
124
124
  pool = dyn_conn.get(path)
125
125
 
126
126
  pool.each do |address|
@@ -294,4 +294,4 @@ module CDNControl
294
294
  end
295
295
 
296
296
  end
297
- end
297
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cdncontrol
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Cowie
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-14 00:00:00.000000000 Z
12
+ date: 2013-11-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: dynect_rest
@@ -70,7 +70,8 @@ files:
70
70
  - cdncontrol.gemspec
71
71
  - lib/cdncontrol/trafficmanager.rb
72
72
  homepage: https://github.com/etsy/cdncontrol
73
- licenses: []
73
+ licenses:
74
+ - MIT
74
75
  metadata: {}
75
76
  post_install_message:
76
77
  rdoc_options: []