jets 0.8.0 → 0.8.1
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +3 -1
- data/jets.gemspec +2 -0
- data/lib/jets/application.rb +1 -1
- data/lib/jets/cfn.rb +1 -2
- data/lib/jets/cfn/builders.rb +19 -0
- data/lib/jets/cfn/builders/api_deployment_builder.rb +32 -0
- data/lib/jets/cfn/{template_builders → builders}/api_gateway_builder.rb +10 -21
- data/lib/jets/cfn/builders/base_child_builder.rb +49 -0
- data/lib/jets/cfn/{template_builders → builders}/controller_builder.rb +7 -7
- data/lib/jets/cfn/{template_builders → builders}/function_builder.rb +1 -2
- data/lib/jets/cfn/builders/interface.rb +128 -0
- data/lib/jets/cfn/{template_builders → builders}/job_builder.rb +2 -2
- data/lib/jets/cfn/builders/parent_builder.rb +84 -0
- data/lib/jets/cfn/{template_builders → builders}/rule_builder.rb +4 -5
- data/lib/jets/commands/base.rb +1 -1
- data/lib/jets/commands/build.rb +11 -15
- data/lib/jets/commands/delete.rb +12 -0
- data/lib/jets/commands/templates/skeleton/Gemfile.tt +1 -0
- data/lib/jets/commands/templates/skeleton/config/application.rb.tt +1 -1
- data/lib/jets/commands/url.rb +10 -12
- data/lib/jets/controller/base.rb +2 -2
- data/lib/jets/core.rb +1 -1
- data/lib/jets/core_ext/kernel.rb +11 -1
- data/lib/jets/internal/app/controllers/jets/public_controller.rb +11 -8
- data/lib/jets/lambda/dsl.rb +1 -1
- data/lib/jets/lambda/task.rb +9 -1
- data/lib/jets/naming.rb +2 -2
- data/lib/jets/pascalize.rb +9 -1
- data/lib/jets/poly_fun/base_executor.rb +2 -2
- data/lib/jets/preheat.rb +2 -2
- data/lib/jets/rails_overrides/common_methods.rb +1 -1
- data/lib/jets/resource.rb +55 -5
- data/lib/jets/resource/api_gateway.rb +7 -0
- data/lib/jets/resource/{route → api_gateway}/cors.rb +11 -10
- data/lib/jets/resource/api_gateway/deployment.rb +75 -0
- data/lib/jets/resource/{route.rb → api_gateway/method.rb} +26 -22
- data/lib/jets/{cfn/template_mappers/gateway_resource_mapper.rb → resource/api_gateway/resource.rb} +41 -27
- data/lib/jets/resource/api_gateway/rest_api.rb +23 -0
- data/lib/jets/resource/base.rb +17 -0
- data/lib/jets/resource/child_stack.rb +5 -0
- data/lib/jets/resource/child_stack/api_deployment.rb +58 -0
- data/lib/jets/resource/child_stack/api_gateway.rb +29 -0
- data/lib/jets/resource/child_stack/app_class.rb +81 -0
- data/lib/jets/resource/function.rb +184 -0
- data/lib/jets/resource/iam.rb +8 -0
- data/lib/jets/resource/iam/application_role.rb +27 -0
- data/lib/jets/resource/iam/base_role_definition.rb +44 -0
- data/lib/jets/resource/iam/class_role.rb +25 -0
- data/lib/jets/resource/iam/function_role.rb +25 -0
- data/lib/jets/{cfn/template_builders/managed_iam_policy/base_policy.rb → resource/iam/managed_policy.rb} +6 -6
- data/lib/jets/resource/iam/policy_document.rb +43 -0
- data/lib/jets/resource/permission.rb +38 -21
- data/lib/jets/resource/replacer.rb +50 -17
- data/lib/jets/resource/s3.rb +17 -0
- data/lib/jets/route.rb +3 -1
- data/lib/jets/rule/dsl.rb +7 -1
- data/lib/jets/server/route_matcher.rb +2 -1
- data/lib/jets/version.rb +1 -1
- metadata +46 -52
- data/lib/jets/cfn/template_builders.rb +0 -25
- data/lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb +0 -38
- data/lib/jets/cfn/template_builders/base_child_builder.rb +0 -72
- data/lib/jets/cfn/template_builders/function_properties.rb +0 -6
- data/lib/jets/cfn/template_builders/function_properties/base_builder.rb +0 -128
- data/lib/jets/cfn/template_builders/function_properties/node_builder.rb +0 -12
- data/lib/jets/cfn/template_builders/function_properties/python_builder.rb +0 -12
- data/lib/jets/cfn/template_builders/function_properties/ruby_builder.rb +0 -13
- data/lib/jets/cfn/template_builders/iam_policy.rb +0 -6
- data/lib/jets/cfn/template_builders/iam_policy/application_policy.rb +0 -19
- data/lib/jets/cfn/template_builders/iam_policy/base_policy.rb +0 -57
- data/lib/jets/cfn/template_builders/iam_policy/class_policy.rb +0 -20
- data/lib/jets/cfn/template_builders/iam_policy/function_policy.rb +0 -21
- data/lib/jets/cfn/template_builders/interface.rb +0 -97
- data/lib/jets/cfn/template_builders/managed_iam_policy.rb +0 -6
- data/lib/jets/cfn/template_builders/managed_iam_policy/application_policy.rb +0 -11
- data/lib/jets/cfn/template_builders/managed_iam_policy/class_policy.rb +0 -10
- data/lib/jets/cfn/template_builders/managed_iam_policy/function_policy.rb +0 -10
- data/lib/jets/cfn/template_builders/parent_builder.rb +0 -95
- data/lib/jets/cfn/template_builders/templates/minimal-stack.yml +0 -9
- data/lib/jets/cfn/template_mappers.rb +0 -22
- data/lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb +0 -48
- data/lib/jets/cfn/template_mappers/api_gateway_mapper.rb +0 -4
- data/lib/jets/cfn/template_mappers/child_mapper.rb +0 -41
- data/lib/jets/cfn/template_mappers/controller_mapper.rb +0 -36
- data/lib/jets/cfn/template_mappers/function_mapper.rb +0 -4
- data/lib/jets/cfn/template_mappers/iam_policy.rb +0 -6
- data/lib/jets/cfn/template_mappers/iam_policy/application_policy_mapper.rb +0 -37
- data/lib/jets/cfn/template_mappers/iam_policy/base_policy_mapper.rb +0 -49
- data/lib/jets/cfn/template_mappers/iam_policy/class_policy_mapper.rb +0 -42
- data/lib/jets/cfn/template_mappers/iam_policy/function_policy_mapper.rb +0 -42
- data/lib/jets/cfn/template_mappers/job_mapper.rb +0 -4
- data/lib/jets/cfn/template_mappers/lambda_function_mapper.rb +0 -52
- data/lib/jets/cfn/template_mappers/rule_mapper.rb +0 -5
- data/lib/jets/resource/attributes.rb +0 -46
- data/lib/jets/resource/creator.rb +0 -17
- data/lib/jets/resource/replacer/base.rb +0 -98
- data/lib/jets/resource/replacer/config_rule.rb +0 -18
- data/lib/jets/resource/route/attributes.rb +0 -8
@@ -1,25 +1,58 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
autoload :ConfigRule, 'jets/resource/replacer/config_rule'
|
5
|
-
# TODO: handle autoloading for plugins
|
1
|
+
class Jets::Resource
|
2
|
+
class Replacer
|
3
|
+
extend Memoist
|
6
4
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
def initialize(replacements={})
|
6
|
+
@replacements = replacements
|
7
|
+
end
|
8
|
+
|
9
|
+
# Replace placeholder hash values with replacements. This does a deep replacement
|
10
|
+
# to the hash values. The replacement "key" is the string value within the value.
|
11
|
+
#
|
12
|
+
# Example:
|
13
|
+
#
|
14
|
+
# attributes = {whatever: "foo REPLACE_KEY bar" }
|
15
|
+
# replace_placeholders(attributes, REPLACE_KEY: "blah:arn")
|
16
|
+
# => {whatever: "foo blah:arn bar" }
|
17
|
+
#
|
18
|
+
# Also, we always replace the special {namespace} value in the hash values. Example:
|
19
|
+
#
|
20
|
+
# attributes = {whatever: "{namespace}LambdaFunction" }
|
21
|
+
# replace_placeholders(attributes, {})
|
22
|
+
# => {whatever: "foo PostsControllerIndexLambdaFunction bar" }
|
23
|
+
#
|
24
|
+
def replace_placeholders(attributes)
|
25
|
+
update_values(attributes)
|
26
|
+
end
|
27
|
+
|
28
|
+
def update_values(original)
|
29
|
+
case original
|
30
|
+
when Array
|
31
|
+
original.map { |v| update_values(v) }
|
32
|
+
when Hash
|
33
|
+
initializer = original.map do |k, v|
|
34
|
+
[k, update_values(v)]
|
35
|
+
end
|
36
|
+
Hash[initializer]
|
37
|
+
else
|
38
|
+
replace_value(original)
|
11
39
|
end
|
40
|
+
end
|
12
41
|
|
13
|
-
|
14
|
-
#
|
15
|
-
|
16
|
-
#
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
42
|
+
def replace_value(value)
|
43
|
+
# Dont perform replacement on Integers
|
44
|
+
return value if value.is_a?(Integer)
|
45
|
+
# return value unless value.is_a?(String) or value.is_a?(Symbol)
|
46
|
+
|
47
|
+
value = value.to_s # normalize to String
|
48
|
+
@replacements.each do |k,v|
|
49
|
+
# IE: Replaces {namespace} => SecurityJobCheck
|
50
|
+
value = value.gsub("{#{k}}", v)
|
21
51
|
end
|
52
|
+
value
|
53
|
+
end
|
22
54
|
|
55
|
+
class << self
|
23
56
|
# Examples:
|
24
57
|
# "AWS::Events::Rule" => "events.amazonaws.com",
|
25
58
|
# "AWS::Config::ConfigRule" => "config.amazonaws.com",
|
data/lib/jets/route.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
# to: "posts#index",
|
5
5
|
# )
|
6
6
|
class Jets::Route
|
7
|
+
CAPTURE_REGEX = "([a-zA\\-Z0-9_.]*)" # as string
|
8
|
+
|
7
9
|
def initialize(options)
|
8
10
|
@options = options
|
9
11
|
end
|
@@ -104,7 +106,7 @@ class Jets::Route
|
|
104
106
|
# changes path to a string used for a regexp
|
105
107
|
# posts/:id/edit => posts\/(.*)\/edit
|
106
108
|
regexp_string = path.split('/').map do |s|
|
107
|
-
s.include?(':') ?
|
109
|
+
s.include?(':') ? CAPTURE_REGEX : s
|
108
110
|
end.join('\/')
|
109
111
|
# make sure beginning and end of the string matches
|
110
112
|
regexp_string = "^#{regexp_string}$"
|
data/lib/jets/rule/dsl.rb
CHANGED
@@ -109,7 +109,13 @@ module Jets::Rule::Dsl
|
|
109
109
|
def register_managed_rule(name, definition)
|
110
110
|
# A task object is needed to build {namespace} for later replacing.
|
111
111
|
task = Jets::Lambda::Task.new(self.name, name, resources: @resources)
|
112
|
-
|
112
|
+
|
113
|
+
# TODO: figure out better way for specific replacements for different classes
|
114
|
+
name_without_rule = self.name.underscore.gsub(/_rule$/,'')
|
115
|
+
config_rule_name = "#{name_without_rule}_#{name}".dasherize
|
116
|
+
replacements = task.replacements.merge(config_rule_name: config_rule_name)
|
117
|
+
|
118
|
+
all_managed_rules[name] = { definition: definition, replacements: replacements }
|
113
119
|
clear_properties
|
114
120
|
end
|
115
121
|
|
@@ -78,8 +78,9 @@ class Jets::Server
|
|
78
78
|
def capture_detection(route_path, actual_path)
|
79
79
|
# changes path to a string used for a regexp
|
80
80
|
# posts/:id/edit => posts\/(.*)\/edit
|
81
|
+
|
81
82
|
regexp_string = route_path.split('/').map do |s|
|
82
|
-
s.include?(':') ?
|
83
|
+
s.include?(':') ? Jets::Route::CAPTURE_REGEX : s
|
83
84
|
end.join('\/')
|
84
85
|
# make sure beginning and end of the string matches
|
85
86
|
regexp_string = "^#{regexp_string}$"
|
data/lib/jets/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tung Nguyen
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-09-
|
11
|
+
date: 2018-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -290,6 +290,20 @@ dependencies:
|
|
290
290
|
- - ">="
|
291
291
|
- !ruby/object:Gem::Version
|
292
292
|
version: '0'
|
293
|
+
- !ruby/object:Gem::Dependency
|
294
|
+
name: mimemagic
|
295
|
+
requirement: !ruby/object:Gem::Requirement
|
296
|
+
requirements:
|
297
|
+
- - ">="
|
298
|
+
- !ruby/object:Gem::Version
|
299
|
+
version: '0'
|
300
|
+
type: :runtime
|
301
|
+
prerelease: false
|
302
|
+
version_requirements: !ruby/object:Gem::Requirement
|
303
|
+
requirements:
|
304
|
+
- - ">="
|
305
|
+
- !ruby/object:Gem::Version
|
306
|
+
version: '0'
|
293
307
|
- !ruby/object:Gem::Dependency
|
294
308
|
name: pg
|
295
309
|
requirement: !ruby/object:Gem::Requirement
|
@@ -426,49 +440,18 @@ files:
|
|
426
440
|
- lib/jets/builders/node-hello.js
|
427
441
|
- lib/jets/builders/node-shim.js
|
428
442
|
- lib/jets/cfn.rb
|
443
|
+
- lib/jets/cfn/builders.rb
|
444
|
+
- lib/jets/cfn/builders/api_deployment_builder.rb
|
445
|
+
- lib/jets/cfn/builders/api_gateway_builder.rb
|
446
|
+
- lib/jets/cfn/builders/base_child_builder.rb
|
447
|
+
- lib/jets/cfn/builders/controller_builder.rb
|
448
|
+
- lib/jets/cfn/builders/function_builder.rb
|
449
|
+
- lib/jets/cfn/builders/interface.rb
|
450
|
+
- lib/jets/cfn/builders/job_builder.rb
|
451
|
+
- lib/jets/cfn/builders/parent_builder.rb
|
452
|
+
- lib/jets/cfn/builders/rule_builder.rb
|
429
453
|
- lib/jets/cfn/ship.rb
|
430
454
|
- lib/jets/cfn/status.rb
|
431
|
-
- lib/jets/cfn/template_builders.rb
|
432
|
-
- lib/jets/cfn/template_builders/api_gateway_builder.rb
|
433
|
-
- lib/jets/cfn/template_builders/api_gateway_deployment_builder.rb
|
434
|
-
- lib/jets/cfn/template_builders/base_child_builder.rb
|
435
|
-
- lib/jets/cfn/template_builders/controller_builder.rb
|
436
|
-
- lib/jets/cfn/template_builders/function_builder.rb
|
437
|
-
- lib/jets/cfn/template_builders/function_properties.rb
|
438
|
-
- lib/jets/cfn/template_builders/function_properties/base_builder.rb
|
439
|
-
- lib/jets/cfn/template_builders/function_properties/node_builder.rb
|
440
|
-
- lib/jets/cfn/template_builders/function_properties/python_builder.rb
|
441
|
-
- lib/jets/cfn/template_builders/function_properties/ruby_builder.rb
|
442
|
-
- lib/jets/cfn/template_builders/iam_policy.rb
|
443
|
-
- lib/jets/cfn/template_builders/iam_policy/application_policy.rb
|
444
|
-
- lib/jets/cfn/template_builders/iam_policy/base_policy.rb
|
445
|
-
- lib/jets/cfn/template_builders/iam_policy/class_policy.rb
|
446
|
-
- lib/jets/cfn/template_builders/iam_policy/function_policy.rb
|
447
|
-
- lib/jets/cfn/template_builders/interface.rb
|
448
|
-
- lib/jets/cfn/template_builders/job_builder.rb
|
449
|
-
- lib/jets/cfn/template_builders/managed_iam_policy.rb
|
450
|
-
- lib/jets/cfn/template_builders/managed_iam_policy/application_policy.rb
|
451
|
-
- lib/jets/cfn/template_builders/managed_iam_policy/base_policy.rb
|
452
|
-
- lib/jets/cfn/template_builders/managed_iam_policy/class_policy.rb
|
453
|
-
- lib/jets/cfn/template_builders/managed_iam_policy/function_policy.rb
|
454
|
-
- lib/jets/cfn/template_builders/parent_builder.rb
|
455
|
-
- lib/jets/cfn/template_builders/rule_builder.rb
|
456
|
-
- lib/jets/cfn/template_builders/templates/minimal-stack.yml
|
457
|
-
- lib/jets/cfn/template_mappers.rb
|
458
|
-
- lib/jets/cfn/template_mappers/api_gateway_deployment_mapper.rb
|
459
|
-
- lib/jets/cfn/template_mappers/api_gateway_mapper.rb
|
460
|
-
- lib/jets/cfn/template_mappers/child_mapper.rb
|
461
|
-
- lib/jets/cfn/template_mappers/controller_mapper.rb
|
462
|
-
- lib/jets/cfn/template_mappers/function_mapper.rb
|
463
|
-
- lib/jets/cfn/template_mappers/gateway_resource_mapper.rb
|
464
|
-
- lib/jets/cfn/template_mappers/iam_policy.rb
|
465
|
-
- lib/jets/cfn/template_mappers/iam_policy/application_policy_mapper.rb
|
466
|
-
- lib/jets/cfn/template_mappers/iam_policy/base_policy_mapper.rb
|
467
|
-
- lib/jets/cfn/template_mappers/iam_policy/class_policy_mapper.rb
|
468
|
-
- lib/jets/cfn/template_mappers/iam_policy/function_policy_mapper.rb
|
469
|
-
- lib/jets/cfn/template_mappers/job_mapper.rb
|
470
|
-
- lib/jets/cfn/template_mappers/lambda_function_mapper.rb
|
471
|
-
- lib/jets/cfn/template_mappers/rule_mapper.rb
|
472
455
|
- lib/jets/cli.rb
|
473
456
|
- lib/jets/commands.rb
|
474
457
|
- lib/jets/commands/base.rb
|
@@ -626,15 +609,28 @@ files:
|
|
626
609
|
- lib/jets/rails_overrides/rendering_helper.rb
|
627
610
|
- lib/jets/rails_overrides/url_helper.rb
|
628
611
|
- lib/jets/resource.rb
|
629
|
-
- lib/jets/resource/
|
630
|
-
- lib/jets/resource/
|
612
|
+
- lib/jets/resource/api_gateway.rb
|
613
|
+
- lib/jets/resource/api_gateway/cors.rb
|
614
|
+
- lib/jets/resource/api_gateway/deployment.rb
|
615
|
+
- lib/jets/resource/api_gateway/method.rb
|
616
|
+
- lib/jets/resource/api_gateway/resource.rb
|
617
|
+
- lib/jets/resource/api_gateway/rest_api.rb
|
618
|
+
- lib/jets/resource/base.rb
|
619
|
+
- lib/jets/resource/child_stack.rb
|
620
|
+
- lib/jets/resource/child_stack/api_deployment.rb
|
621
|
+
- lib/jets/resource/child_stack/api_gateway.rb
|
622
|
+
- lib/jets/resource/child_stack/app_class.rb
|
623
|
+
- lib/jets/resource/function.rb
|
624
|
+
- lib/jets/resource/iam.rb
|
625
|
+
- lib/jets/resource/iam/application_role.rb
|
626
|
+
- lib/jets/resource/iam/base_role_definition.rb
|
627
|
+
- lib/jets/resource/iam/class_role.rb
|
628
|
+
- lib/jets/resource/iam/function_role.rb
|
629
|
+
- lib/jets/resource/iam/managed_policy.rb
|
630
|
+
- lib/jets/resource/iam/policy_document.rb
|
631
631
|
- lib/jets/resource/permission.rb
|
632
632
|
- lib/jets/resource/replacer.rb
|
633
|
-
- lib/jets/resource/
|
634
|
-
- lib/jets/resource/replacer/config_rule.rb
|
635
|
-
- lib/jets/resource/route.rb
|
636
|
-
- lib/jets/resource/route/attributes.rb
|
637
|
-
- lib/jets/resource/route/cors.rb
|
633
|
+
- lib/jets/resource/s3.rb
|
638
634
|
- lib/jets/route.rb
|
639
635
|
- lib/jets/router.rb
|
640
636
|
- lib/jets/ruby_server.rb
|
@@ -679,7 +675,6 @@ files:
|
|
679
675
|
- vendor/dynomite/lib/dynomite/migration/templates/create_table.rb
|
680
676
|
- vendor/dynomite/lib/dynomite/migration/templates/update_table.rb
|
681
677
|
- vendor/dynomite/lib/dynomite/version.rb
|
682
|
-
- vendor/dynomite/pkg/dynomite-1.0.7.gem
|
683
678
|
- vendor/dynomite/spec/fixtures/app_root/config/dynamodb.yml
|
684
679
|
- vendor/dynomite/spec/lib/dynomite/item_spec.rb
|
685
680
|
- vendor/dynomite/spec/lib/dynomite/migration/dsl/global_secondary_index_spec.rb
|
@@ -721,7 +716,6 @@ files:
|
|
721
716
|
- vendor/lambdagem/lib/lambdagem/upload.rb
|
722
717
|
- vendor/lambdagem/lib/lambdagem/util.rb
|
723
718
|
- vendor/lambdagem/lib/lambdagem/version.rb
|
724
|
-
- vendor/lambdagem/pkg/lambdagem-0.5.1.gem
|
725
719
|
- vendor/lambdagem/spec/lib/build_spec.rb
|
726
720
|
- vendor/lambdagem/spec/lib/cli_spec.rb
|
727
721
|
- vendor/lambdagem/spec/lib/upload_spec.rb
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/hash'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
class Jets::Cfn
|
5
|
-
# TODO: Refactor builder classes. They all work slightly differently.
|
6
|
-
class TemplateBuilders
|
7
|
-
autoload :Interface, "jets/cfn/template_builders/interface"
|
8
|
-
autoload :ParentBuilder, "jets/cfn/template_builders/parent_builder"
|
9
|
-
|
10
|
-
# These build the app/controllers, app/jobs, and app/functions
|
11
|
-
autoload :BaseChildBuilder, "jets/cfn/template_builders/base_child_builder"
|
12
|
-
autoload :ControllerBuilder, "jets/cfn/template_builders/controller_builder"
|
13
|
-
autoload :JobBuilder, "jets/cfn/template_builders/job_builder"
|
14
|
-
autoload :FunctionBuilder, "jets/cfn/template_builders/function_builder"
|
15
|
-
autoload :RuleBuilder, "jets/cfn/template_builders/rule_builder"
|
16
|
-
|
17
|
-
autoload :ApiGatewayBuilder, "jets/cfn/template_builders/api_gateway_builder"
|
18
|
-
autoload :ApiGatewayDeploymentBuilder, "jets/cfn/template_builders/api_gateway_deployment_builder"
|
19
|
-
|
20
|
-
# separate beasts:
|
21
|
-
autoload :FunctionProperties, "jets/cfn/template_builders/function_properties" # sort of a builder
|
22
|
-
autoload :IamPolicy, "jets/cfn/template_builders/iam_policy" # resource only
|
23
|
-
autoload :ManagedIamPolicy, "jets/cfn/template_builders/managed_iam_policy" # resource only
|
24
|
-
end
|
25
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
class Jets::Cfn::TemplateBuilders
|
2
|
-
class ApiGatewayDeploymentBuilder
|
3
|
-
include Interface
|
4
|
-
include Jets::AwsServices
|
5
|
-
|
6
|
-
def initialize(options={})
|
7
|
-
@options = options
|
8
|
-
@template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
|
9
|
-
end
|
10
|
-
|
11
|
-
# compose is an interface method
|
12
|
-
def compose
|
13
|
-
return if @options[:stack_type] == :minimal
|
14
|
-
|
15
|
-
puts "Building API Gateway Deployment template."
|
16
|
-
add_parameter("RestApi", Description: "RestApi")
|
17
|
-
|
18
|
-
map = Jets::Cfn::TemplateMappers::ApiGatewayDeploymentMapper.new(path=nil,s3_bucket=nil)
|
19
|
-
add_resource(map.logical_id, "AWS::ApiGateway::Deployment",
|
20
|
-
Description: "Version #{map.timestamp} deployed by jets",
|
21
|
-
RestApiId: "!Ref RestApi",
|
22
|
-
StageName: map.stage_name,
|
23
|
-
)
|
24
|
-
|
25
|
-
add_output("RestApiUrl", Value: "!Sub 'https://${RestApi}.execute-api.${AWS::Region}.amazonaws.com/#{map.stage_name}/'")
|
26
|
-
end
|
27
|
-
|
28
|
-
# template_path is an interface method
|
29
|
-
def template_path
|
30
|
-
Jets::Naming.api_gateway_deployment_template_path
|
31
|
-
end
|
32
|
-
|
33
|
-
# do not bother writing a template if routes are empty
|
34
|
-
def write
|
35
|
-
super unless Jets::Router.routes.empty?
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,72 +0,0 @@
|
|
1
|
-
class Jets::Cfn::TemplateBuilders
|
2
|
-
class BaseChildBuilder
|
3
|
-
include Interface
|
4
|
-
|
5
|
-
# The app_klass is can be a controller, job or anonymous function class.
|
6
|
-
# IE: PostsController, HardJob
|
7
|
-
def initialize(app_klass)
|
8
|
-
@app_klass = app_klass
|
9
|
-
@template = ActiveSupport::HashWithIndifferentAccess.new(Resources: {})
|
10
|
-
end
|
11
|
-
|
12
|
-
# template_path is an interface method for Interface module
|
13
|
-
def template_path
|
14
|
-
Jets::Naming.template_path(@app_klass)
|
15
|
-
end
|
16
|
-
|
17
|
-
def add_common_parameters
|
18
|
-
add_parameter("IamRole", Description: "Iam Role that Lambda function uses.")
|
19
|
-
add_parameter("S3Bucket", Description: "S3 Bucket for source code.")
|
20
|
-
end
|
21
|
-
|
22
|
-
def add_functions
|
23
|
-
add_class_iam_policy
|
24
|
-
@app_klass.tasks.each do |task|
|
25
|
-
add_function(task)
|
26
|
-
add_function_iam_policy(task)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def add_function(task)
|
31
|
-
# Examples:
|
32
|
-
# FunctionProperties::RubyBuilder
|
33
|
-
# FunctionProperties::PythonBuilder
|
34
|
-
builder_class = "Jets::Cfn::TemplateBuilders::FunctionProperties::#{task.lang.to_s.classify}Builder".constantize
|
35
|
-
builder = builder_class.new(task)
|
36
|
-
logical_id = builder.map.logical_id
|
37
|
-
add_resource(logical_id, "AWS::Lambda::Function", builder.properties)
|
38
|
-
end
|
39
|
-
|
40
|
-
def add_class_iam_policy
|
41
|
-
return unless @app_klass.build_class_iam?
|
42
|
-
|
43
|
-
map = Jets::Cfn::TemplateMappers::IamPolicy::ClassPolicyMapper.new(@app_klass)
|
44
|
-
logical_id = map.logical_id
|
45
|
-
properties = map.properties
|
46
|
-
add_resource(logical_id, "AWS::IAM::Role", properties)
|
47
|
-
end
|
48
|
-
|
49
|
-
def add_function_iam_policy(task)
|
50
|
-
return unless task.build_function_iam?
|
51
|
-
|
52
|
-
map = Jets::Cfn::TemplateMappers::IamPolicy::FunctionPolicyMapper.new(task)
|
53
|
-
logical_id = map.logical_id
|
54
|
-
properties = map.properties
|
55
|
-
add_resource(logical_id, "AWS::IAM::Role", properties)
|
56
|
-
end
|
57
|
-
|
58
|
-
def add_associated_resources
|
59
|
-
@app_klass.tasks.each do |task|
|
60
|
-
task.resources.each do |definition|
|
61
|
-
creator = Jets::Resource::Creator.new(definition, task)
|
62
|
-
add_associated_resource(creator.resource)
|
63
|
-
add_associated_resource(creator.resource.permission.attributes)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def add_associated_resource(resource)
|
69
|
-
add_resource(resource.logical_id, resource.type, resource.properties)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
@@ -1,6 +0,0 @@
|
|
1
|
-
module Jets::Cfn::TemplateBuilders::FunctionProperties
|
2
|
-
autoload :BaseBuilder, 'jets/cfn/template_builders/function_properties/base_builder'
|
3
|
-
autoload :RubyBuilder, 'jets/cfn/template_builders/function_properties/ruby_builder'
|
4
|
-
autoload :PythonBuilder, 'jets/cfn/template_builders/function_properties/python_builder'
|
5
|
-
autoload :NodeBuilder, 'jets/cfn/template_builders/function_properties/node_builder'
|
6
|
-
end
|
@@ -1,128 +0,0 @@
|
|
1
|
-
# Jets::Cfn::TemplateBuilders does not stick to the TemplateBuilders::Interface.
|
2
|
-
# It builds the properties of a function. Usage:
|
3
|
-
#
|
4
|
-
# builder = FunctionProperties::PythonBuilder.new(task)
|
5
|
-
# buider.properties
|
6
|
-
# buider.map.logical_id # to access Function's logical id
|
7
|
-
#
|
8
|
-
module Jets::Cfn::TemplateBuilders::FunctionProperties
|
9
|
-
class BaseBuilder
|
10
|
-
def initialize(task)
|
11
|
-
@task = task
|
12
|
-
end
|
13
|
-
|
14
|
-
def map
|
15
|
-
@map ||= Jets::Cfn::TemplateMappers::LambdaFunctionMapper.new(@task)
|
16
|
-
end
|
17
|
-
|
18
|
-
def properties
|
19
|
-
props = env_file_properties
|
20
|
-
.deep_merge(global_properties)
|
21
|
-
.deep_merge(class_properties)
|
22
|
-
.deep_merge(function_properties)
|
23
|
-
finalize_properties!(props)
|
24
|
-
end
|
25
|
-
|
26
|
-
# Add properties managed by Jets.
|
27
|
-
def finalize_properties!(props)
|
28
|
-
handler = full_handler(props)
|
29
|
-
runtime = get_runtime(props)
|
30
|
-
props.merge!(
|
31
|
-
"FunctionName" => map.function_name,
|
32
|
-
"Handler" => handler,
|
33
|
-
"Runtime" => runtime,
|
34
|
-
)
|
35
|
-
end
|
36
|
-
|
37
|
-
def get_runtime(props)
|
38
|
-
props["Runtime"] || default_runtime
|
39
|
-
end
|
40
|
-
|
41
|
-
# Ensure that the handler path is normalized.
|
42
|
-
def full_handler(props)
|
43
|
-
if props["Handler"]
|
44
|
-
map.handler_value(props["Handler"])
|
45
|
-
else
|
46
|
-
default_handler
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# Global properties example:
|
51
|
-
# jets defaults are in jets/default/application.rb.
|
52
|
-
# Your application's default config/application.rb then get used. Example:
|
53
|
-
#
|
54
|
-
# Jets.application.configure do
|
55
|
-
# config.function = ActiveSupport::OrderedOptions.new
|
56
|
-
# config.function.timeout = 10
|
57
|
-
# config.function.runtime = "nodejs8.10"
|
58
|
-
# config.function.memory_size = 1536
|
59
|
-
# end
|
60
|
-
def global_properties
|
61
|
-
baseline = {
|
62
|
-
Code: {
|
63
|
-
S3Bucket: {Ref: "S3Bucket"}, # from child stack
|
64
|
-
S3Key: map.code_s3_key
|
65
|
-
},
|
66
|
-
Role: { Ref: "IamRole" },
|
67
|
-
Environment: { Variables: map.environment },
|
68
|
-
}.deep_stringify_keys
|
69
|
-
|
70
|
-
app_config_props = Jets.application.config.function.to_h
|
71
|
-
app_config_props = Jets::Pascalize.pascalize(app_config_props.deep_stringify_keys)
|
72
|
-
|
73
|
-
baseline.deep_merge(app_config_props)
|
74
|
-
end
|
75
|
-
|
76
|
-
# Class properties example:
|
77
|
-
#
|
78
|
-
# class PostsController < ApplicationController
|
79
|
-
# class_timeout 22
|
80
|
-
# ...
|
81
|
-
# end
|
82
|
-
#
|
83
|
-
# Also handles iam policy override at the class level. Example:
|
84
|
-
#
|
85
|
-
# class_iam_policy("logs:*")
|
86
|
-
#
|
87
|
-
def class_properties
|
88
|
-
# klass is PostsController, HardJob, GameRule, Hello or HelloFunction
|
89
|
-
klass = Jets::Klass.from_task(@task)
|
90
|
-
class_properties = klass.class_properties
|
91
|
-
if klass.build_class_iam?
|
92
|
-
map = Jets::Cfn::TemplateMappers::IamPolicy::ClassPolicyMapper.new(klass)
|
93
|
-
class_properties[:Role] = "!GetAtt #{map.logical_id}.Arn"
|
94
|
-
end
|
95
|
-
Jets::Pascalize.pascalize(class_properties.deep_stringify_keys)
|
96
|
-
end
|
97
|
-
|
98
|
-
# Function properties example:
|
99
|
-
#
|
100
|
-
# class PostsController < ApplicationController
|
101
|
-
# timeout 18
|
102
|
-
# def index
|
103
|
-
# ...
|
104
|
-
# end
|
105
|
-
#
|
106
|
-
# Also handles iam policy override at the function level. Example:
|
107
|
-
#
|
108
|
-
# iam_policy("ec2:*")
|
109
|
-
# def new
|
110
|
-
# render json: params.merge(action: "new")
|
111
|
-
# end
|
112
|
-
#
|
113
|
-
def function_properties
|
114
|
-
properties = @task.properties
|
115
|
-
if @task.build_function_iam?
|
116
|
-
map = Jets::Cfn::TemplateMappers::IamPolicy::FunctionPolicyMapper.new(@task)
|
117
|
-
properties[:Role] = "!GetAtt #{map.logical_id}.Arn"
|
118
|
-
end
|
119
|
-
Jets::Pascalize.pascalize(properties.deep_stringify_keys)
|
120
|
-
end
|
121
|
-
|
122
|
-
def env_file_properties
|
123
|
-
env_vars = Jets::Dotenv.load!(true)
|
124
|
-
Jets::Pascalize.pascalize(environment: { variables: env_vars })
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|