kumogata-template 0.0.14 → 0.0.15

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
  SHA1:
3
- metadata.gz: 2a50c2750395bd793e1bb9210c05e925f6632d4a
4
- data.tar.gz: d6faff601811cb365049b0880e731de5f9bb6360
3
+ metadata.gz: 805a390615c2e10c71e52f4a908adce0c5fd5535
4
+ data.tar.gz: 5accf023a91f8ac078b4cbaa583ec2a99b97ed94
5
5
  SHA512:
6
- metadata.gz: ab98967ab2b353665b672bb35c3eea3edcf12d0670650603784eb80d4ff97cafcc65ae9a54351b42ba23e2f66e2feb7b7c669abbb0d8797f2788cbc9b27d7882
7
- data.tar.gz: a069fe45f07e2dc691f60881ced851ec96b3922acf67648dc66cbe27440f47b7017baf3319ceef17756185665c80b91e8663c87c8dede9d72577fc086617cff6
6
+ metadata.gz: 13777f040a5328307f9d94d2eea64379fdae3d04a9ff51062b9f7f3246fcde441d2639fd4f559476c1978c6d1c2d89bbc7ad0f9545fd2b7f5c703a8395c27154
7
+ data.tar.gz: cb64778a6adbffcf55ccc4a5ae729082763c7b4550a60a3c1d47648828dbe6efb412e29e3c60e81c8f27f0c0f5d28fa2b7bc03e8a99aa890cfdbf33d484b9562
data/.travis.yml CHANGED
@@ -2,7 +2,7 @@ sudo: false
2
2
  language: ruby
3
3
  cache: bundler
4
4
  rvm:
5
- - 2.3.1
5
+ - 2.3.3
6
6
  gemfile: n0ts/kumogata-template/Gemfile
7
7
  script:
8
8
  - bundle install --path vendor/bundle
data/Gemfile.lock CHANGED
@@ -1,77 +1,54 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kumogata-template (0.0.13)
5
- aws-sdk (~> 2.3)
6
- kumogata (= 0.5.10)
4
+ kumogata-template (0.0.14)
5
+ aws-sdk (~> 2)
6
+ kumogata2-plugin-ruby (= 0.1.3)
7
+ kumogata2-plugin-yaml (= 0.0.1)
7
8
 
8
9
  GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
- aws-sdk (2.6.44)
12
- aws-sdk-resources (= 2.6.44)
13
- aws-sdk-core (2.6.44)
12
+ aws-sdk (2.7.3)
13
+ aws-sdk-resources (= 2.7.3)
14
+ aws-sdk-core (2.7.3)
14
15
  aws-sigv4 (~> 1.0)
15
16
  jmespath (~> 1.0)
16
- aws-sdk-resources (2.6.44)
17
- aws-sdk-core (= 2.6.44)
18
- aws-sdk-v1 (1.66.0)
19
- json (~> 1.4)
20
- nokogiri (>= 1.4.4)
17
+ aws-sdk-resources (2.7.3)
18
+ aws-sdk-core (= 2.7.3)
21
19
  aws-sigv4 (1.0.0)
22
20
  coderay (1.1.1)
23
- coffee-script (2.4.1)
24
- coffee-script-source
25
- execjs
26
- coffee-script-source (1.12.2)
27
21
  diffy (3.1.0)
28
- dslh (0.2.7)
29
- execjs (2.7.0)
22
+ dslh (0.4.6)
30
23
  hashie (3.4.6)
31
24
  highline (1.7.8)
32
25
  jmespath (1.3.1)
33
- json (1.8.5)
34
- json5 (0.0.1)
35
- kumogata (0.5.10)
36
- aws-sdk-v1
26
+ kumogata2 (0.1.9)
27
+ aws-sdk (>= 2.3.0)
37
28
  coderay
38
- coffee-script
39
29
  diffy
40
- dslh (>= 0.2.7, < 0.3)
41
30
  hashie
42
31
  highline
43
- json
44
- json5
45
- net-ssh
46
- retryable (~> 2.0.0)
47
32
  term-ansicolor
48
- therubyracer
49
- uuidtools
50
- libv8 (3.16.14.17)
51
- mini_portile2 (2.1.0)
33
+ kumogata2-plugin-ruby (0.1.3)
34
+ dslh (>= 0.3.7)
35
+ kumogata2
36
+ kumogata2-plugin-yaml (0.0.1)
37
+ kumogata2
52
38
  minitest (5.10.1)
53
- net-ssh (4.0.1)
54
- nokogiri (1.7.0.1)
55
- mini_portile2 (~> 2.1.0)
56
- rake (11.3.0)
57
- ref (2.0.0)
58
- retryable (2.0.4)
39
+ rake (12.0.0)
59
40
  term-ansicolor (1.4.0)
60
41
  tins (~> 1.0)
61
- therubyracer (0.12.3)
62
- libv8 (~> 3.16.14.15)
63
- ref
64
42
  tins (1.13.0)
65
- uuidtools (2.1.5)
66
43
 
67
44
  PLATFORMS
68
45
  ruby
69
46
 
70
47
  DEPENDENCIES
71
- bundler (~> 1.11)
48
+ bundler (~> 1.13)
72
49
  kumogata-template!
73
- minitest (~> 5.8)
74
- rake (~> 11.1)
50
+ minitest (~> 5.10)
51
+ rake (~> 12.0)
75
52
 
76
53
  BUNDLED WITH
77
54
  1.13.7
data/README.md CHANGED
@@ -4,13 +4,10 @@
4
4
 
5
5
  ## About
6
6
 
7
- - `kumogate-template` is a template sets for [kumogata](https://github.com/winebarrel/kumogata).
7
+ - `kumogate-template` is a template sets for [kumogata2](https://github.com/winebarrel/kumogata2).
8
8
 
9
9
  ## Installation
10
10
 
11
- Add
12
-
13
-
14
11
  Add this line to your application's Gemfile:
15
12
 
16
13
  ```ruby
@@ -196,9 +193,3 @@ EOS
196
193
  - AWS::S3::Bucket
197
194
  - AWS::SNS::Topic
198
195
  - AWS::SQS::Queue
199
-
200
-
201
- ## TODO
202
-
203
- - Support [Kumogata2](https://github.com/winebarrel/kumogata2)
204
- - Useful kumogate-template snippets
@@ -2,8 +2,8 @@
2
2
  $: << File.expand_path("#{File.dirname __FILE__}/../lib")
3
3
  require 'rubygems'
4
4
  require 'kumogata/template/ext/kumogata'
5
- require 'kumogata/template/ext/argument_parser'
5
+ require 'kumogata/template/ext/option_parser'
6
6
  require 'kumogata/template'
7
7
 
8
8
 
9
- load Gem.bin_path('kumogata', 'kumogata')
9
+ load Gem.bin_path('kumogata2', 'kumogata2')
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_dependency 'aws-sdk', '~> 2.3'
22
- spec.add_dependency 'kumogata', '0.5.10'
23
- spec.add_development_dependency 'bundler', '~> 1.11'
24
- spec.add_development_dependency 'rake', '~> 11.1'
25
- spec.add_development_dependency 'minitest', '~> 5.8'
21
+ spec.add_dependency 'aws-sdk', '~> 2'
22
+ spec.add_dependency 'kumogata2-plugin-ruby', '0.1.3'
23
+ spec.add_dependency 'kumogata2-plugin-yaml', '0.0.1'
24
+ spec.add_development_dependency 'bundler', '~> 1.13'
25
+ spec.add_development_dependency 'rake', '~> 12.0'
26
+ spec.add_development_dependency 'minitest', '~> 5.10'
26
27
  end
@@ -1,6 +1,7 @@
1
1
  require 'kumogata/template/alb'
2
2
  require 'kumogata/template/autoscaling'
3
3
  require 'kumogata/template/certificate'
4
+ require 'kumogata/template/cloudfront'
4
5
  require 'kumogata/template/cloudwatch'
5
6
  require 'kumogata/template/codedeploy'
6
7
  require 'kumogata/template/const'
@@ -0,0 +1,306 @@
1
+ #
2
+ # Helper - CloudFront
3
+ #
4
+ require 'kumogata/template/helper'
5
+
6
+ def _cloudfront_distribution_config(args)
7
+ aliases = args[:aliases] || []
8
+ cache =
9
+ if args.key? :cache
10
+ _cloudfront_cache_behavior(args[:cache])
11
+ else
12
+ ""
13
+ end
14
+ comment = args[:comment] || ""
15
+ custom_errors =
16
+ if args.key? :custom_errors
17
+ _cloudfront_custom_errors(args[:custom_errors])
18
+ else
19
+ []
20
+ end
21
+ default_cache =
22
+ if args.key? :default_cache
23
+ _cloudfront_cache_behavior(args[:default_cache], true)
24
+ else
25
+ ""
26
+ end
27
+ default_root = args[:default_root] || "index.html"
28
+ enabled = _bool("enabled", args, true)
29
+ http = _valid_values(args[:http], %w( http1.1 http2 ), "http2")
30
+ logging =
31
+ if args.key? :logging
32
+ _cloudfront_logging(args[:logging])
33
+ else
34
+ ""
35
+ end
36
+ origins = _cloudfront_origins(args[:origins])
37
+ price = args[:price] || ""
38
+ restrictions = args[:restrictions] || ""
39
+ viewer_cert =
40
+ if args.key? :viewer_cert
41
+ _cloudfront_viewer_cert(args[:viewer_cert])
42
+ else
43
+ ""
44
+ end
45
+ web_acl = args[:web_acl] || ""
46
+
47
+ _{
48
+ Aliases aliases unless aliases.empty?
49
+ CacheBehaviors cache unless comment.empty?
50
+ Comment comment unless comment.empty?
51
+ CustomErrorResponses custom_errors unless custom_errors.empty?
52
+ DefaultCacheBehavior default_cache unless default_cache.empty?
53
+ DefaultRootObject default_root unless default_root.empty?
54
+ Enabled enabled
55
+ HttpVersion http unless http.empty?
56
+ Logging logging unless logging.empty?
57
+ Origins origins
58
+ PriceClass price unless price.empty?
59
+ Restrictions restrictions unless restrictions.empty?
60
+ ViewerCertificate viewer_cert unless viewer_cert.empty?
61
+ WebACLId web_acl unless web_acl.empty?
62
+ }
63
+ end
64
+
65
+ def _cloudfront_cache_behavior(args, default = false)
66
+ allowed_methods =
67
+ if args.key? :allowed_methods
68
+ case args[:allowed_methods]
69
+ when "with options"
70
+ %w( GET HEAD OPTIONS )
71
+ when "all"
72
+ %w( DELETE GET HEAD OPTIONS PATCH POST PUT )
73
+ else
74
+ %w( HEAD GET )
75
+ end
76
+ else
77
+ ""
78
+ end
79
+ cached_methods =
80
+ if args.key? :cached_methods
81
+ case args[:cached_methods]
82
+ when "with options"
83
+ %w( GET HEAD OPTIONS )
84
+ else
85
+ %w( HEAD GET )
86
+ end
87
+ else
88
+ ""
89
+ end
90
+ compress =
91
+ if args.key? :compress
92
+ _bool("compress", args, false)
93
+ else
94
+ ""
95
+ end
96
+ default_ttl = args[:default_ttl] || nil
97
+ forwarded_values =
98
+ if args.key? :forwarded
99
+ _cloudfront_forwarded_values(args[:forwarded])
100
+ else
101
+ ""
102
+ end
103
+ max_ttl = args[:max_ttl] || ""
104
+ min_ttl = args[:min_ttl] || ""
105
+ path = args[:path]
106
+ smooth =
107
+ if args.key? :smooth
108
+ _bool(args[:smooth])
109
+ else
110
+ ""
111
+ end
112
+ target = args[:target]
113
+ trusted = args[:trusted] || ""
114
+ viewer = _valid_values(args[:viewer], %w( allow-all redirect-to-https https-only ), "redirect-to-https")
115
+
116
+ _{
117
+ AllowedMethods allowed_methods unless allowed_methods.empty?
118
+ CachedMethods cached_methods unless cached_methods.empty?
119
+ Compress compress unless compress.empty?
120
+ DefaultTTL default_ttl unless default_ttl.nil?
121
+ ForwardedValues forwarded_values
122
+ MaxTTL max_ttl unless max_ttl.empty?
123
+ MinTTL min_ttl unless min_ttl.empty?
124
+ PathPattern path if default == false
125
+ SmoothStreaming smooth unless smooth.empty?
126
+ TargetOriginId target
127
+ TrustedSigners trusted unless trusted.empty?
128
+ ViewerProtocolPolicy viewer
129
+ }
130
+ end
131
+
132
+ def _cloudfront_forwared_cookies(args)
133
+ forward = args[:forward] || ""
134
+ white_lists = args[:white_lists] || ""
135
+
136
+ _{
137
+ Forward forward
138
+ WhitelistedNames white_lists
139
+ }
140
+ end
141
+
142
+ def _cloudfront_forwarded_values(args)
143
+ cookies =
144
+ if args.key? :cookies
145
+ _cloudfront_forwared_cookies(args[:cookies])
146
+ else
147
+ ""
148
+ end
149
+ headers = args[:headers] || []
150
+ query_string = _bool("query_string", args, false)
151
+ query_string_keys = args[:query_string_keys] || []
152
+
153
+ _{
154
+ Cookies cookies unless cookies.empty?
155
+ Headers headers unless headers.empty?
156
+ QueryString query_string
157
+ QueryStringCacheKeys query_string_keys unless query_string_keys.empty?
158
+ }
159
+ end
160
+
161
+ def _cloudfront_custom_error(args)
162
+ error_min_ttl = args[:error_min_ttl] || ""
163
+ error_code = args[:error_code] || 404
164
+ response_code =
165
+ if args.key? :response_code
166
+ args[:response_code] || 404
167
+ else
168
+ error_code
169
+ end
170
+ response_page =
171
+ unless response_code.nil?
172
+ args[:response_page] || "/#{response_code}.html"
173
+ else
174
+ ""
175
+ end
176
+
177
+ _{
178
+ ErrorCachingMinTTL error_min_ttl unless error_min_ttl.empty?
179
+ ErrorCode error_code
180
+ ResponseCode response_code unless response_code.nil?
181
+ ResponsePagePath response_page unless response_page.empty?
182
+ }
183
+ end
184
+
185
+ def _cloudfront_custom_errors(args)
186
+ errors = args || []
187
+
188
+ array = []
189
+ errors.each do |error|
190
+ array << _cloudfront_custom_error(error)
191
+ end
192
+ array
193
+ end
194
+
195
+ def _cloudfront_logging(args)
196
+ bucket = _ref_attr_string("bucket", "DomainName", args, "bucket")
197
+ include_cookies =
198
+ if args.key? :include_cookies
199
+ _bool("include_cookies", args, false)
200
+ else
201
+ ""
202
+ end
203
+ prefix = args[:prefix] || ""
204
+
205
+ _{
206
+ Bucket bucket
207
+ IncludeCookies include_cookies unless include_cookies.empty?
208
+ Prefix prefix unless prefix.empty?
209
+ }
210
+ end
211
+
212
+ def _cloudfront_origin(args)
213
+ custom =
214
+ if args.key? :custom
215
+ _cloudfront_custom_origin(args[:custom])
216
+ else
217
+ nil
218
+ end
219
+ domain = _ref_attr_string("domain", "DomainName", args, "bucket")
220
+ id = args[:id]
221
+ headers =
222
+ if args.key? :headers
223
+ _cloudfront_origin_headers(args[:headers])
224
+ else
225
+ ""
226
+ end
227
+ path = args[:origin_path] || ""
228
+ s3 =
229
+ if args.key? :s3
230
+ _cloudfront_s3_origin(args[:s3])
231
+ else
232
+ nil
233
+ end
234
+
235
+ _{
236
+ CustomOriginConfig custom if s3.nil?
237
+ DomainName domain
238
+ Id id
239
+ OriginCustomHeaders headers unless headers.empty?
240
+ OriginPath path unless path.empty?
241
+ S3OriginConfig s3 if custom.nil?
242
+ }
243
+ end
244
+
245
+ def _cloudfront_origins(args)
246
+ origins = args || []
247
+
248
+ array = []
249
+ origins.each do |origin|
250
+ array << _cloudfront_origin(origin)
251
+ end
252
+ array
253
+ end
254
+
255
+ def _cloudfront_custom_origin(args)
256
+ http_port = args[:http_port] || ""
257
+ https_port = args[:https_port] || ""
258
+ origin_protocol = args[:origin_protocol] || ""
259
+ origin_ssl_protocols = args[:origin_ssl_protocols] || []
260
+
261
+ _{
262
+ HTTPPort http_port unless http_port.empty?
263
+ HTTPSPort https_port unless https_port.empty?
264
+ OriginProtocolPolicy origin_protocol unless origin_protocol.empty?
265
+ OriginSSLProtocols origin_ssl_protocols unless origin_ssl_protocols.empty?
266
+ }
267
+ end
268
+
269
+ def _cloudfront_s3_origin(args)
270
+ origin = args[:origin] || ""
271
+
272
+ _{
273
+ OriginAccessIdentity origin unless origin.empty?
274
+ }
275
+ end
276
+
277
+ def _cloudfront_origin_headers(args)
278
+ name = args[:name]
279
+ value = args[:value]
280
+
281
+ _{
282
+ HeaderName name
283
+ HeaderValue value
284
+ }
285
+ end
286
+
287
+ def _cloudfront_viewer_cert(args)
288
+ acm = _ref_string("acm", args)
289
+ default =
290
+ if args.key? :default
291
+ _bool("default", args, false)
292
+ else
293
+ ""
294
+ end
295
+ iam = args[:iam] || ""
296
+ min_protocol = args[:min_protocol] || ""
297
+ ssl = _valid_values(args[:ssl], %w( vip sni-only ), "sni-only")
298
+
299
+ _{
300
+ AcmCertificateArn acm unless acm.empty?
301
+ CloudFrontDefaultCertificate default_cert unless default.empty?
302
+ IamCertificateId iam unless iam.empty?
303
+ MinimumProtocolVersion min_protocol unless min_protocol.empty?
304
+ SslSupportMethod ssl unless acm.empty? and iam.empty?
305
+ }
306
+ end
@@ -1,7 +1,9 @@
1
- require 'kumogata'
2
- require 'kumogata/argument_parser'
1
+ require 'kumogata2'
2
+ require 'kumogata2/cli/option_parser'
3
+ require 'kumogata2/logger'
4
+ require 'kumogata2/plugin/ruby'
3
5
 
4
- class Kumogata::Client
6
+ class Kumogata2::Client
5
7
  def init(stack_name)
6
8
  begin
7
9
  base_template = ''
@@ -21,13 +23,29 @@ class Kumogata::Client
21
23
  template = base_template.gsub('#{NAME}', stack_name)
22
24
  f.write(template)
23
25
  }
24
- Kumogata.logger.info("Saved template to #{stack_name}.rb".green)
26
+ Kumogata2::Logger::Helper.log(:info, "Saved template to #{stack_name}.rb".green)
25
27
  rescue => e
26
- Kumogata.logger.info("Failed to template #{stack_name} - #{e}".red)
28
+ Kumogata2::Logger::Helper.log(:error, "Failed to template #{stack_name} - #{e}".red)
27
29
  end
28
30
  nil
29
31
  end
32
+ end
33
+
34
+ class Kumogata2::Plugin::Ruby
35
+ def parse(str)
36
+ str = <<EOS
37
+ template do
38
+ #{str}
39
+ end
40
+ EOS
41
+ context = Kumogata2::Plugin::Ruby::Context.new(@options)
42
+ context.instance_eval(str, @options.path_or_url)
43
+ @post = context.instance_variable_get(:@_post)
44
+ context.instance_variable_get(:@_template)
45
+ end
46
+ end
30
47
 
48
+ class Kumogata2::Plugin::Ruby::Context
31
49
  def define_template_func(scope, path_or_url)
32
50
  functions = ''
33
51
  Dir.glob(File.join(get_template_path, '*.rb')).all? do |file|
@@ -100,40 +118,6 @@ class Kumogata::Client
100
118
  template_path
101
119
  end
102
120
 
103
- def evaluate_template(template, path_or_url)
104
- key_converter = proc do |key|
105
- key = key.to_s
106
- unless @options.skip_replace_underscore?
107
- key.gsub!('_', ':')
108
- key.gsub!('__', '::')
109
- end
110
- key
111
- end
112
-
113
- value_converter = proc do |v|
114
- case v
115
- when Hash, Array
116
- v
117
- else
118
- v.to_s
119
- end
120
- end
121
-
122
- template = Dslh.eval(template.read, {
123
- :key_conv => key_converter,
124
- :value_conv => value_converter,
125
- :scope_hook => proc {|scope|
126
- define_template_func(scope, path_or_url)
127
- },
128
- :filename => path_or_url,
129
- })
130
-
131
- @outputs_filter.fetch!(template)
132
- @post_processing.fetch!(template)
133
-
134
- return template
135
- end
136
-
137
121
  def devaluate_template(template)
138
122
  exclude_key = proc do |k|
139
123
  k = k.to_s.gsub('::', '__')
@@ -152,7 +136,6 @@ class Kumogata::Client
152
136
  end
153
137
  end
154
138
  else
155
- k.gsub(':', '_')
156
139
  k.gsub('::', '__')
157
140
  end
158
141
  end
@@ -165,6 +148,22 @@ class Kumogata::Client
165
148
  end
166
149
  end
167
150
 
168
- Dslh.deval(template, :key_conv => key_conv, :value_conv => value_conv, :exclude_key => exclude_key)
151
+ dslh_opts = {
152
+ key_conv: key_conv,
153
+ value_conv: value_conv,
154
+ exclude_key: exclude_key,
155
+ initial_depth: 1,
156
+ }
157
+
158
+ if ENV['EXPORT_RUBY_USE_BRACES'] == '1'
159
+ dslh_opts[:use_braces_instead_of_do_end] = true
160
+ end
161
+
162
+ if ENV['EXPORT_RUBY_OLD_FORMAT'] == '1'
163
+ dslh_opts[:dump_old_hash_array_format] = true
164
+ end
165
+
166
+ dsl = Dslh.deval(template, dslh_opts)
167
+ dsl.strip
169
168
  end
170
169
  end
@@ -1,5 +1,5 @@
1
- class Kumogata::ArgumentParser
2
- Kumogata::ArgumentParser::COMMANDS.merge!(
1
+ class Kumogata2::CLI::OptionParser
2
+ Kumogata2::CLI::OptionParser::COMMANDS.merge!(
3
3
  init: {
4
4
  :description => 'Generate basic template',
5
5
  :arguments => [:stack_name],
@@ -7,21 +7,21 @@ def _s3_to_access(value)
7
7
  return "Private" if value.nil?
8
8
 
9
9
  case value
10
- when "auth"
10
+ when "auth read"
11
11
  "AuthenticatedRead"
12
- when "aws_exec"
12
+ when "aws exec read"
13
13
  "AwsExecRead"
14
- when "owner"
14
+ when "owner read"
15
15
  "BucketOwnerRead"
16
- when "owner_full"
16
+ when "owner full"
17
17
  "BucketOwnerFullControl"
18
- when "log_delivery_w"
18
+ when "log delivery write"
19
19
  "LogDeliveryWrite"
20
20
  when "private"
21
21
  "Private"
22
- when "public_r"
22
+ when "public read"
23
23
  "PublicRead"
24
- when "public_rw"
24
+ when "public read write"
25
25
  "PublicReadWrite"
26
26
  else
27
27
  value
@@ -1 +1 @@
1
- KUMOGATA_TEMPLATE_VERSION = '0.0.14'
1
+ KUMOGATA_TEMPLATE_VERSION = '0.0.15'
@@ -0,0 +1,16 @@
1
+ #
2
+ # CloudFront web distribution
3
+ # http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution.html
4
+ #
5
+ require 'kumogata/template/helper'
6
+ require 'kumogata/template/cloudfront'
7
+
8
+ name = _resource_name(args[:name], "distribution")
9
+ config = _cloudfront_distribution_config(args)
10
+
11
+ _(name) do
12
+ Type "AWS::CloudFront::Distribution"
13
+ Properties do
14
+ DistributionConfig config
15
+ end
16
+ end
@@ -24,7 +24,7 @@ threshold = args[:threshold] || 60
24
24
  unit = _valid_values(args[:unit], %w(Seconds Microseconds Milliseconds Bytes Kilobytes Megabytes Gigabytes Terabytes Bits Kilobits Megabits Gigabits Terabits Percent Count Bytes/Second Kilobytes/Second Megabytes/Second Gigabytes/Second Terabytes/Second Bits/Second Kilobits/Second Megabits/Second Gigabits/Second Terabits/Second Count/Second None), "")
25
25
 
26
26
  _(name) do
27
- Type AWS::CloudWatch::Alarm
27
+ Type "AWS::CloudWatch::Alarm"
28
28
  Properties do
29
29
  ActionsEnabled enabled
30
30
  AlarmActions actions
@@ -16,7 +16,7 @@ tags = _tags(args)
16
16
  type = _valid_values(args[:type], %w( io1 gp2 sc1 st1 ), "gp2")
17
17
 
18
18
  _(name) do
19
- Type AWS::EC2::Volume
19
+ Type "AWS::EC2::Volume"
20
20
  Properties do
21
21
  AutoEnableIO auto_enable
22
22
  AvailabilityZone az
@@ -6,8 +6,12 @@ require 'kumogata/template/helper'
6
6
  require 'kumogata/template/s3'
7
7
 
8
8
  name = _resource_name(args[:name], "bucket")
9
- access = _s3_to_access(args[:access])
10
- access = "PublicRead" if args.key? :website
9
+ access =
10
+ if args.key? :website
11
+ "PublicRead"
12
+ else
13
+ _s3_to_access(args[:access])
14
+ end
11
15
  bucket = _ref_name("bucket", args)
12
16
  cors = _s3_cors(args)
13
17
  lifecycle = _s3_lifecycle(args)
@@ -1,13 +1,24 @@
1
1
  require 'minitest/autorun'
2
- require 'kumogata'
3
- require 'kumogata/argument_parser'
2
+ require 'kumogata2'
3
+ require 'kumogata2/cli/option_parser'
4
+ require 'kumogata2/plugin/ruby'
4
5
  require 'json'
5
6
  require 'tempfile'
6
7
 
7
8
  # for only test
8
9
  ENV['TZ'] = 'Asia/Tokyo'
9
10
 
10
- class Kumogata::Client
11
+ class Kumogata2::Client
12
+ include Kumogata2::Logger::Helper
13
+
14
+ def initialize(options)
15
+ @options = options.kind_of?(Hashie::Mash) ? options : Hashie::Mash.new(options)
16
+ @plugin_by_ext = {}
17
+ ## Do not initialize AWS client
18
+ end
19
+ end
20
+
21
+ class Kumogata2::Plugin::Ruby::Context
11
22
  def define_template_func(scope, path_or_url)
12
23
  functions = ""
13
24
  Dir.glob("template/*.rb").all? do |file|
@@ -73,6 +84,11 @@ def tempfile(content, template_ext = nil)
73
84
  basename = "#{File.basename __FILE__}.#{$$}"
74
85
  basename = [basename, template_ext] if template_ext
75
86
 
87
+ content = <<EOS
88
+ template do
89
+ #{content}
90
+ end
91
+ EOS
76
92
  Tempfile.open(basename) do |f|
77
93
  f << content
78
94
  f.flush
@@ -84,14 +100,16 @@ end
84
100
  def run_client(template)
85
101
  $stdout = open('/dev/null', 'w') unless ENV['DEBUG']
86
102
 
87
- kumogata_options = Kumogata::ArgumentParser::DEFAULT_OPTIONS
88
- kumogata_options[:output_format] = 'json'
89
- kumogata_options[:result_log] = '/dev/null'
90
- kumogata_options[:command_result_log] = '/dev/null'
103
+ Kumogata2::Plugin.load_plugins
104
+
105
+ options = Kumogata2::CLI::OptionParser::DEFAULT_OPTIONS
106
+ options[:output_format] = 'json'
107
+ options[:result_log] = '/dev/null'
108
+ options[:command_result_log] = '/dev/null'
91
109
  template_ext = '.rb'
92
110
 
93
111
  template = tempfile(template, template_ext) do |f|
94
- Kumogata::Client.new(kumogata_options).send(:evaluate_template, f, f.path)
112
+ Kumogata2::Client.new(options).send(:open_template, f.path)
95
113
  end
96
114
  end
97
115
 
@@ -0,0 +1,265 @@
1
+ require 'abstract_unit'
2
+ require 'kumogata/template/cloudfront'
3
+
4
+ class CloudFrontTest < Minitest::Test
5
+ def test_cloudfront_distribution_config
6
+ template = <<-EOS
7
+ Test _cloudfront_distribution_config({ origins: [{ domain: "test", id: "test", s3: {} }] })
8
+ EOS
9
+ act_template = run_client_as_json(template)
10
+ exp_template = <<-EOS
11
+ {
12
+ "Test": {
13
+ "DefaultRootObject": "index.html",
14
+ "Enabled": "true",
15
+ "HttpVersion": "http2",
16
+ "Origins": [
17
+ {
18
+ "DomainName": "test",
19
+ "Id": "test",
20
+ "S3OriginConfig": {
21
+ }
22
+ }
23
+ ]
24
+ }
25
+ }
26
+ EOS
27
+ assert_equal exp_template.chomp, act_template
28
+ end
29
+
30
+ def test_cloudfront_cache_behavior
31
+ template = <<-EOS
32
+ Test _cloudfront_cache_behavior({ forwarded: {}, path: "test", target: "test", viewer: "test" })
33
+ EOS
34
+ act_template = run_client_as_json(template)
35
+ exp_template = <<-EOS
36
+ {
37
+ "Test": {
38
+ "ForwardedValues": {
39
+ "QueryString": "false"
40
+ },
41
+ "PathPattern": "test",
42
+ "TargetOriginId": "test",
43
+ "ViewerProtocolPolicy": "redirect-to-https"
44
+ }
45
+ }
46
+ EOS
47
+ assert_equal exp_template.chomp, act_template
48
+ end
49
+
50
+ def test_cloudfront_forwared_cookies
51
+ template = <<-EOS
52
+ Test _cloudfront_forwared_cookies({ forward: "test", white_lists: "test" })
53
+ EOS
54
+ act_template = run_client_as_json(template)
55
+ exp_template = <<-EOS
56
+ {
57
+ "Test": {
58
+ "Forward": "test",
59
+ "WhitelistedNames": "test"
60
+ }
61
+ }
62
+ EOS
63
+ assert_equal exp_template.chomp, act_template
64
+ end
65
+
66
+ def test_cloudfront_forwarded_values
67
+ template = <<-EOS
68
+ Test _cloudfront_forwarded_values({})
69
+ EOS
70
+ act_template = run_client_as_json(template)
71
+ exp_template = <<-EOS
72
+ {
73
+ "Test": {
74
+ "QueryString": "false"
75
+ }
76
+ }
77
+ EOS
78
+ assert_equal exp_template.chomp, act_template
79
+ end
80
+
81
+ def test_cloudfront_custom_error
82
+ template = <<-EOS
83
+ Test _cloudfront_custom_error({})
84
+ EOS
85
+ act_template = run_client_as_json(template)
86
+ exp_template = <<-EOS
87
+ {
88
+ "Test": {
89
+ "ErrorCode": "404",
90
+ "ResponseCode": "404",
91
+ "ResponsePagePath": "/404.html"
92
+ }
93
+ }
94
+ EOS
95
+ assert_equal exp_template.chomp, act_template
96
+ end
97
+
98
+ def test_cloudfront_custom_errors
99
+ template = <<-EOS
100
+ Test _cloudfront_custom_errors([ {} ])
101
+ EOS
102
+ act_template = run_client_as_json(template)
103
+ exp_template = <<-EOS
104
+ {
105
+ "Test": [
106
+ {
107
+ "ErrorCode": "404",
108
+ "ResponseCode": "404",
109
+ "ResponsePagePath": "/404.html"
110
+ }
111
+ ]
112
+ }
113
+ EOS
114
+ assert_equal exp_template.chomp, act_template
115
+ end
116
+
117
+ def test_cloudfront_logging
118
+ template = <<-EOS
119
+ Test _cloudfront_logging({ bucket: "test" })
120
+ EOS
121
+ act_template = run_client_as_json(template)
122
+ exp_template = <<-EOS
123
+ {
124
+ "Test": {
125
+ "Bucket": "test"
126
+ }
127
+ }
128
+ EOS
129
+ assert_equal exp_template.chomp, act_template
130
+ end
131
+
132
+ def test_cloudfront_origin
133
+ template = <<-EOS
134
+ Test _cloudfront_origin({ domain: "test", id: "test", s3: {} })
135
+ EOS
136
+ act_template = run_client_as_json(template)
137
+ exp_template = <<-EOS
138
+ {
139
+ "Test": {
140
+ "DomainName": "test",
141
+ "Id": "test",
142
+ "S3OriginConfig": {
143
+ }
144
+ }
145
+ }
146
+ EOS
147
+ assert_equal exp_template.chomp, act_template
148
+ end
149
+
150
+ def test_cloudfront_origins
151
+ template = <<-EOS
152
+ Test _cloudfront_origins([ { domain: "test1", id: "test1", s3: {} },
153
+ { domain: "test2", id: "test2", s3: {} } ])
154
+ EOS
155
+ act_template = run_client_as_json(template)
156
+ exp_template = <<-EOS
157
+ {
158
+ "Test": [
159
+ {
160
+ "DomainName": "test1",
161
+ "Id": "test1",
162
+ "S3OriginConfig": {
163
+ }
164
+ },
165
+ {
166
+ "DomainName": "test2",
167
+ "Id": "test2",
168
+ "S3OriginConfig": {
169
+ }
170
+ }
171
+ ]
172
+ }
173
+ EOS
174
+ assert_equal exp_template.chomp, act_template
175
+ end
176
+
177
+ def test_cloudfront_custom_origin
178
+ template = <<-EOS
179
+ Test _cloudfront_custom_origin({})
180
+ EOS
181
+ act_template = run_client_as_json(template)
182
+ exp_template = <<-EOS
183
+ {
184
+ "Test": {
185
+ }
186
+ }
187
+ EOS
188
+ assert_equal exp_template.chomp, act_template
189
+ end
190
+
191
+ def test_cloudfront_s3_origin
192
+ template = <<-EOS
193
+ Test _cloudfront_s3_origin({})
194
+ EOS
195
+ act_template = run_client_as_json(template)
196
+ exp_template = <<-EOS
197
+ {
198
+ "Test": {
199
+ }
200
+ }
201
+ EOS
202
+ assert_equal exp_template.chomp, act_template
203
+ end
204
+
205
+ def test_cloudfront_custom_origin
206
+ template = <<-EOS
207
+ Test _cloudfront_custom_origin({})
208
+ EOS
209
+ act_template = run_client_as_json(template)
210
+ exp_template = <<-EOS
211
+ {
212
+ "Test": {
213
+ }
214
+ }
215
+ EOS
216
+ assert_equal exp_template.chomp, act_template
217
+ end
218
+
219
+ def test_cloudfront_s3_origin
220
+ template = <<-EOS
221
+ Test _cloudfront_s3_origin({})
222
+ EOS
223
+ act_template = run_client_as_json(template)
224
+ exp_template = <<-EOS
225
+ {
226
+ "Test": {
227
+ }
228
+ }
229
+ EOS
230
+ assert_equal exp_template.chomp, act_template
231
+ end
232
+
233
+
234
+ def test_cloudfront_origin_headers
235
+ template = <<-EOS
236
+ Test _cloudfront_origin_headers({ name: "test", value: "test" })
237
+ EOS
238
+ act_template = run_client_as_json(template)
239
+ exp_template = <<-EOS
240
+ {
241
+ "Test": {
242
+ "HeaderName": "test",
243
+ "HeaderValue": "test"
244
+ }
245
+ }
246
+ EOS
247
+ assert_equal exp_template.chomp, act_template
248
+ end
249
+
250
+ def test_cloudfront_viewer_cert
251
+ template = <<-EOS
252
+ Test _cloudfront_viewer_cert({ acm: "test" })
253
+ EOS
254
+ act_template = run_client_as_json(template)
255
+ exp_template = <<-EOS
256
+ {
257
+ "Test": {
258
+ "AcmCertificateArn": "test",
259
+ "SslSupportMethod": "sni-only"
260
+ }
261
+ }
262
+ EOS
263
+ assert_equal exp_template.chomp, act_template
264
+ end
265
+ end
data/test/helper_test.rb CHANGED
@@ -36,8 +36,8 @@ class HelperTest < Minitest::Test
36
36
  assert_equal _valid_numbers(1, 0, 1, 2), 1
37
37
  assert_equal _valid_numbers(2, 1, 2, 4), 2
38
38
  assert_equal _valid_numbers(2, 0, 1, 2), 2
39
- assert_equal _valid_numbers(3, 0, 1), nil
40
- assert_equal _valid_numbers(nil, 0, 1), nil
39
+ assert_nil _valid_numbers(3, 0, 1)
40
+ assert_nil _valid_numbers(nil, 0, 1)
41
41
  end
42
42
 
43
43
  def test_ref_string
data/test/s3_test.rb CHANGED
@@ -2,6 +2,7 @@ require 'abstract_unit'
2
2
  require 'kumogata/template/s3'
3
3
 
4
4
  class S3Test < Minitest::Test
5
+
5
6
  def test_s3_cors
6
7
  template = <<-EOS
7
8
  Test _s3_cors(cors: [ { headers: "test", methods: "test", origins: "test", exposed_headers: "test", id: "test", max_age: "test" } ])
@@ -0,0 +1,33 @@
1
+ require 'abstract_unit'
2
+
3
+ class CloudfrontDistributionTest < Minitest::Test
4
+ def test_normal
5
+ template = <<-EOS
6
+ _cloudfront_distribution "test", { origins: [{ domain: "test", id: "test", s3: {} }] }
7
+ EOS
8
+ act_template = run_client_as_json(template)
9
+ exp_template = <<-EOS
10
+ {
11
+ "TestDistribution": {
12
+ "Type": "AWS::CloudFront::Distribution",
13
+ "Properties": {
14
+ "DistributionConfig": {
15
+ "DefaultRootObject": "index.html",
16
+ "Enabled": "true",
17
+ "HttpVersion": "http2",
18
+ "Origins": [
19
+ {
20
+ "DomainName": "test",
21
+ "Id": "test",
22
+ "S3OriginConfig": {
23
+ }
24
+ }
25
+ ]
26
+ }
27
+ }
28
+ }
29
+ }
30
+ EOS
31
+ assert_equal exp_template.chomp, act_template
32
+ end
33
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kumogata-template
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naoya Nakazawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-13 00:00:00.000000000 Z
11
+ date: 2017-01-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -16,70 +16,84 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.3'
19
+ version: '2'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.3'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: kumogata
28
+ name: kumogata2-plugin-ruby
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.5.10
33
+ version: 0.1.3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.5.10
40
+ version: 0.1.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: kumogata2-plugin-yaml
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.1
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.11'
61
+ version: '1.13'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.11'
68
+ version: '1.13'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '11.1'
75
+ version: '12.0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '11.1'
82
+ version: '12.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: minitest
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '5.8'
89
+ version: '5.10'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '5.8'
96
+ version: '5.10'
83
97
  description: Template for Kumogata. Kumogata is a tool for AWS CloudFormation. It
84
98
  can define a template in Ruby DSL.
85
99
  email:
@@ -101,6 +115,7 @@ files:
101
115
  - lib/kumogata/template/alb.rb
102
116
  - lib/kumogata/template/autoscaling.rb
103
117
  - lib/kumogata/template/certificate.rb
118
+ - lib/kumogata/template/cloudfront.rb
104
119
  - lib/kumogata/template/cloudwatch.rb
105
120
  - lib/kumogata/template/codedeploy.rb
106
121
  - lib/kumogata/template/const.rb
@@ -112,8 +127,8 @@ files:
112
127
  - lib/kumogata/template/elb.rb
113
128
  - lib/kumogata/template/emr.rb
114
129
  - lib/kumogata/template/events.rb
115
- - lib/kumogata/template/ext/argument_parser.rb
116
130
  - lib/kumogata/template/ext/kumogata.rb
131
+ - lib/kumogata/template/ext/option_parser.rb
117
132
  - lib/kumogata/template/helper.rb
118
133
  - lib/kumogata/template/iam.rb
119
134
  - lib/kumogata/template/lambda.rb
@@ -131,6 +146,7 @@ files:
131
146
  - template/autoscaling-scaling-policy.rb
132
147
  - template/autoscaling-scheduled-action.rb
133
148
  - template/certificate.rb
149
+ - template/cloudfront-distribution.rb
134
150
  - template/cloudtrail.rb
135
151
  - template/cloudwatch-alarm.rb
136
152
  - template/codedeploy-application.rb
@@ -231,6 +247,7 @@ files:
231
247
  - test/abstract_unit.rb
232
248
  - test/alb_test.rb
233
249
  - test/autoscaling_test.rb
250
+ - test/cloudfront_test.rb
234
251
  - test/codedeploy_test.rb
235
252
  - test/data/lambda_function.py
236
253
  - test/datapipeline_test.rb
@@ -256,6 +273,7 @@ files:
256
273
  - test/template/autoscaling-scaling-policy_test.rb
257
274
  - test/template/autoscaling-scheduled-action_test.rb
258
275
  - test/template/certificate_test.rb
276
+ - test/template/cloudfront-distribution_test.rb
259
277
  - test/template/cloudtrail_test.rb
260
278
  - test/template/cloudwatch-alarm_test.rb
261
279
  - test/template/codedeploy-application_test.rb
@@ -381,6 +399,7 @@ test_files:
381
399
  - test/abstract_unit.rb
382
400
  - test/alb_test.rb
383
401
  - test/autoscaling_test.rb
402
+ - test/cloudfront_test.rb
384
403
  - test/codedeploy_test.rb
385
404
  - test/data/lambda_function.py
386
405
  - test/datapipeline_test.rb
@@ -406,6 +425,7 @@ test_files:
406
425
  - test/template/autoscaling-scaling-policy_test.rb
407
426
  - test/template/autoscaling-scheduled-action_test.rb
408
427
  - test/template/certificate_test.rb
428
+ - test/template/cloudfront-distribution_test.rb
409
429
  - test/template/cloudtrail_test.rb
410
430
  - test/template/cloudwatch-alarm_test.rb
411
431
  - test/template/codedeploy-application_test.rb