jets 0.6.9 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 557604f70083b13e25eb88496bbc2709d715688386e6cea83fc6d84d9c830799
4
- data.tar.gz: 618b800e673d812303e28411d8cc16304777141a195c2ddd3029f416ed755591
3
+ metadata.gz: 9aa29acf2df1aa6895322b3ca3b552ec19588dfbf30572c1c48669c49476fa5b
4
+ data.tar.gz: f8447813c033772d32e7799f6163cebfb5db60d2e44b7538a500e90c4750db6f
5
5
  SHA512:
6
- metadata.gz: 25c15f2f3f7ecf2d5b40ade99d990d2548be2c03f4a4312616aecff04482ca6a193a100e0c4851572ee3692b91534811f431c51640aff718645e7447fa4950b9
7
- data.tar.gz: 9e16e4ad95fd469021853e328e982c22eed8dff9e85feb7f77c1a216c407e7239715399255afa0770f813858129b45707e1563673a2dfe25046c009ac8bf8463
6
+ metadata.gz: 55c640eb1ce2bce89e4e8d22756491c0bef3d29a692ffa67ece43f8a9be202e0f79853347b02fba4e29272c98bbdda08f048cdffd0bfd4ce8ba6aa2898850ba3
7
+ data.tar.gz: ccd75d822e8289486b14839499c6bf69e907fcd7b8a22a138f25189bb31ae5d78db3adcf2763c31cb0acb6ece0a7892ed5d27a3353af10ec7d36533fc52f2463
@@ -3,6 +3,10 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [0.7.0]
7
+ - add managed_iam_policy concept, pull request #19
8
+ - bump to 0.7.0, enough changes since 0.6.x
9
+
6
10
  ## [0.6.9]
7
11
  - add aws managed rule support, pull request #18
8
12
 
@@ -11,7 +11,7 @@ GIT
11
11
  PATH
12
12
  remote: .
13
13
  specs:
14
- jets (0.6.9)
14
+ jets (0.7.0)
15
15
  actionpack (>= 5.2.1)
16
16
  actionview (>= 5.2.1)
17
17
  activerecord (>= 5.2.1)
@@ -20,5 +20,6 @@ class Jets::Cfn
20
20
  # separate beasts:
21
21
  autoload :FunctionProperties, "jets/cfn/template_builders/function_properties" # sort of a builder
22
22
  autoload :IamPolicy, "jets/cfn/template_builders/iam_policy" # resource only
23
+ autoload :ManagedIamPolicy, "jets/cfn/template_builders/managed_iam_policy" # resource only
23
24
  end
24
25
  end
@@ -20,10 +20,10 @@ class Jets::Cfn::TemplateBuilders
20
20
  end
21
21
 
22
22
  def add_functions
23
- add_class_iam_policy if @app_klass.class_iam_policy
23
+ add_class_iam_policy
24
24
  @app_klass.tasks.each do |task|
25
25
  add_function(task)
26
- add_iam_policy(task) if task.iam_policy
26
+ add_function_iam_policy(task)
27
27
  end
28
28
  end
29
29
 
@@ -38,13 +38,17 @@ class Jets::Cfn::TemplateBuilders
38
38
  end
39
39
 
40
40
  def add_class_iam_policy
41
+ return unless @app_klass.build_class_iam?
42
+
41
43
  map = Jets::Cfn::TemplateMappers::IamPolicy::ClassPolicyMapper.new(@app_klass)
42
44
  logical_id = map.logical_id
43
45
  properties = map.properties
44
46
  add_resource(logical_id, "AWS::IAM::Role", properties)
45
47
  end
46
48
 
47
- def add_iam_policy(task)
49
+ def add_function_iam_policy(task)
50
+ return unless task.build_function_iam?
51
+
48
52
  map = Jets::Cfn::TemplateMappers::IamPolicy::FunctionPolicyMapper.new(task)
49
53
  logical_id = map.logical_id
50
54
  properties = map.properties
@@ -88,7 +88,7 @@ module Jets::Cfn::TemplateBuilders::FunctionProperties
88
88
  # klass is PostsController, HardJob, GameRule, Hello or HelloFunction
89
89
  klass = Jets::Klass.from_task(@task)
90
90
  class_properties = klass.class_properties
91
- if klass.class_iam_policy
91
+ if klass.build_class_iam?
92
92
  map = Jets::Cfn::TemplateMappers::IamPolicy::ClassPolicyMapper.new(klass)
93
93
  class_properties[:Role] = "!GetAtt #{map.logical_id}.Arn"
94
94
  end
@@ -112,7 +112,7 @@ module Jets::Cfn::TemplateBuilders::FunctionProperties
112
112
  #
113
113
  def function_properties
114
114
  properties = @task.properties
115
- if @task.iam_policy
115
+ if @task.build_function_iam?
116
116
  map = Jets::Cfn::TemplateMappers::IamPolicy::FunctionPolicyMapper.new(@task)
117
117
  properties[:Role] = "!GetAtt #{map.logical_id}.Arn"
118
118
  end
@@ -6,7 +6,8 @@ module Jets::Cfn::TemplateBuilders::IamPolicy
6
6
  class ApplicationPolicy < BasePolicy
7
7
  def initialize
8
8
  setup
9
- @definitions = Jets.config.iam_policy || [] # config.iam_policy contains definitions
9
+ @definitions = Jets.config.iam_policy # config.iam_policy contains definitions
10
+ @definitions = [@definitions].flatten if @definitions
10
11
  end
11
12
 
12
13
  # Example: PostsControllerPolicy or SleepJobPolicy
@@ -0,0 +1,6 @@
1
+ module Jets::Cfn::TemplateBuilders::ManagedIamPolicy
2
+ autoload :ApplicationPolicy, "jets/cfn/template_builders/managed_iam_policy/application_policy"
3
+ autoload :BasePolicy, "jets/cfn/template_builders/managed_iam_policy/base_policy"
4
+ autoload :ClassPolicy, "jets/cfn/template_builders/managed_iam_policy/class_policy"
5
+ autoload :FunctionPolicy, "jets/cfn/template_builders/managed_iam_policy/function_policy"
6
+ end
@@ -0,0 +1,11 @@
1
+ # Implements:
2
+ # initialize
3
+ #
4
+ module Jets::Cfn::TemplateBuilders::ManagedIamPolicy
5
+ class ApplicationPolicy < BasePolicy
6
+ def initialize
7
+ @definitions = Jets.config.managed_iam_policy # config.managed_iam_policy contains definitions
8
+ @definitions = [@definitions].flatten if @definitions
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ # Classes that inherit this Base class should implement:
2
+ #
3
+ # initialize - each initializer has a different signature
4
+ #
5
+ module Jets::Cfn::TemplateBuilders::ManagedIamPolicy
6
+ class BasePolicy
7
+ extend Memoist
8
+ attr_reader :definitions
9
+
10
+ def arns
11
+ definitions.map { |definition| standardize(definition) }
12
+ end
13
+ memoize :arns # only process arns once
14
+
15
+ # AmazonEC2ReadOnlyAccess => arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess
16
+ def standardize(definition)
17
+ return definition if definition.include?('iam::aws:policy')
18
+
19
+ "arn:aws:iam::aws:policy/#{definition}"
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ # Implements:
2
+ # initialize
3
+ #
4
+ module Jets::Cfn::TemplateBuilders::ManagedIamPolicy
5
+ class ClassPolicy < BasePolicy
6
+ def initialize(app_class)
7
+ @definitions = app_class.class_managed_iam_policy || [] # contains definitions
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # Implements:
2
+ # initialize
3
+ #
4
+ module Jets::Cfn::TemplateBuilders::ManagedIamPolicy
5
+ class FunctionPolicy < BasePolicy
6
+ def initialize(task)
7
+ @definitions = task.managed_iam_policy || [] # managed_iam_policy contains definitions
8
+ end
9
+ end
10
+ end
@@ -2,6 +2,7 @@
2
2
  #
3
3
  # initialize
4
4
  # iam_policy
5
+ # managed_iam_policy
5
6
  # logical_id
6
7
  # role_name
7
8
  #
@@ -9,11 +10,19 @@ module Jets::Cfn::TemplateMappers::IamPolicy
9
10
  class ApplicationPolicyMapper < BasePolicyMapper
10
11
  def initialize; end # does nothing
11
12
 
13
+ # Assume we always have at least some baseline iam policy permissions.
12
14
  def iam_policy
13
15
  Jets::Cfn::TemplateBuilders::IamPolicy::ApplicationPolicy.new
14
16
  end
15
17
  memoize :iam_policy
16
18
 
19
+ def managed_iam_policy
20
+ return unless Jets.config.managed_iam_policy
21
+
22
+ Jets::Cfn::TemplateBuilders::ManagedIamPolicy::ApplicationPolicy.new
23
+ end
24
+ memoize :managed_iam_policy
25
+
17
26
  # Example: PostsControllerLambdaFunction
18
27
  # Note there are is no "Show" action in the name
19
28
  def logical_id
@@ -2,6 +2,7 @@
2
2
  #
3
3
  # initialize
4
4
  # iam_policy
5
+ # managed_iam_policy
5
6
  # logical_id
6
7
  # role_name
7
8
  #
@@ -20,10 +21,14 @@ module Jets::Cfn::TemplateMappers::IamPolicy
20
21
  ]},
21
22
  Path: "/"
22
23
  }
24
+
23
25
  properties[:Policies] = [
24
26
  PolicyName: iam_policy.policy_name,
25
27
  PolicyDocument: iam_policy.policy_document,
26
- ]
28
+ ] if iam_policy
29
+
30
+ properties[:ManagedPolicyArns] = managed_iam_policy.arns if managed_iam_policy
31
+
27
32
  properties[:RoleName] = role_name
28
33
  properties.deep_stringify_keys!
29
34
  properties
@@ -2,6 +2,7 @@
2
2
  #
3
3
  # initialize
4
4
  # iam_policy
5
+ # managed_iam_policy
5
6
  # logical_id
6
7
  # role_name
7
8
  #
@@ -13,10 +14,19 @@ module Jets::Cfn::TemplateMappers::IamPolicy
13
14
  end
14
15
 
15
16
  def iam_policy
17
+ return unless @app_class.class_iam_policy
18
+
16
19
  Jets::Cfn::TemplateBuilders::IamPolicy::ClassPolicy.new(@app_class)
17
20
  end
18
21
  memoize :iam_policy
19
22
 
23
+ def managed_iam_policy
24
+ return unless @app_class.class_managed_iam_policy
25
+
26
+ Jets::Cfn::TemplateBuilders::ManagedIamPolicy::ClassPolicy.new(@app_class)
27
+ end
28
+ memoize :managed_iam_policy
29
+
20
30
  # Example: PostsControllerLambdaFunction
21
31
  # Note there are is no "Show" action in the name
22
32
  # There should be no namespace in the logical_id.
@@ -2,6 +2,7 @@
2
2
  #
3
3
  # initialize
4
4
  # iam_policy
5
+ # managed_iam_policy
5
6
  # logical_id
6
7
  # role_name
7
8
  #
@@ -14,10 +15,19 @@ module Jets::Cfn::TemplateMappers::IamPolicy
14
15
  end
15
16
 
16
17
  def iam_policy
18
+ return unless @task.iam_policy
19
+
17
20
  Jets::Cfn::TemplateBuilders::IamPolicy::FunctionPolicy.new(@task)
18
21
  end
19
22
  memoize :iam_policy
20
23
 
24
+ def managed_iam_policy
25
+ return unless @task.managed_iam_policy
26
+
27
+ Jets::Cfn::TemplateBuilders::ManagedIamPolicy::FunctionPolicy.new(@task)
28
+ end
29
+ memoize :managed_iam_policy
30
+
21
31
  # Example: PostsControllerShowLambdaFunction
22
32
  # There should be no namespace in the logical_id.
23
33
  def logical_id
@@ -80,7 +80,16 @@ module Jets::Lambda::Dsl
80
80
  end
81
81
  alias_method :props, :properties
82
82
 
83
- # definitions: one more many definitions
83
+ # definitions: one or more definitions
84
+ def iam_policy(*definitions)
85
+ if definitions.empty?
86
+ @iam_policy
87
+ else
88
+ @iam_policy = definitions.flatten
89
+ end
90
+ end
91
+
92
+ # definitions: one or more definitions
84
93
  def class_iam_policy(*definitions)
85
94
  if definitions.empty?
86
95
  @class_iam_policy
@@ -89,15 +98,28 @@ module Jets::Lambda::Dsl
89
98
  end
90
99
  end
91
100
 
92
- # definitions: one more many definitions
93
- def iam_policy(*definitions)
101
+ # definitions: one or more definitions
102
+ def managed_iam_policy(*definitions)
94
103
  if definitions.empty?
95
- @iam_policy
104
+ @managed_iam_policy
96
105
  else
97
- @iam_policy = definitions.flatten
106
+ @managed_iam_policy = definitions.flatten
98
107
  end
99
108
  end
100
109
 
110
+ # definitions: one or more definitions
111
+ def class_managed_iam_policy(*definitions)
112
+ if definitions.empty?
113
+ @class_managed_iam_policy
114
+ else
115
+ @class_managed_iam_policy = definitions.flatten
116
+ end
117
+ end
118
+
119
+ def build_class_iam?
120
+ !!(class_iam_policy || class_managed_iam_policy)
121
+ end
122
+
101
123
  # meth is a Symbol
102
124
  def method_added(meth)
103
125
  return if %w[initialize method_missing].include?(meth.to_s)
@@ -111,7 +133,10 @@ module Jets::Lambda::Dsl
111
133
  # We adjust the class name when we build the functions later in
112
134
  # FunctionContstructor#adjust_tasks.
113
135
  all_tasks[meth] = Jets::Lambda::Task.new(self.name, meth,
114
- properties: @properties, iam_policy: @iam_policy, lang: lang)
136
+ properties: @properties,
137
+ iam_policy: @iam_policy,
138
+ managed_iam_policy: @managed_iam_policy,
139
+ lang: lang)
115
140
 
116
141
  # Done storing options, clear out for the next added method.
117
142
  clear_properties
@@ -129,6 +154,7 @@ module Jets::Lambda::Dsl
129
154
  def clear_properties
130
155
  @properties = nil
131
156
  @iam_policy = nil
157
+ @managed_iam_policy = nil
132
158
  end
133
159
 
134
160
  # Returns the all tasks for this class with their method names as keys.
@@ -1,6 +1,6 @@
1
1
  class Jets::Lambda::Task
2
2
  attr_accessor :class_name, :type
3
- attr_reader :meth, :properties, :iam_policy, :lang
3
+ attr_reader :meth, :properties, :iam_policy, :managed_iam_policy, :lang
4
4
  def initialize(class_name, meth, options={})
5
5
  @class_name = class_name.to_s # use at EventsRuleMapper#full_task_name
6
6
  @meth = meth
@@ -8,9 +8,14 @@ class Jets::Lambda::Task
8
8
  @type = options[:type] || get_type # controller, job, or function
9
9
  @properties = options[:properties] || {}
10
10
  @iam_policy = options[:iam_policy]
11
+ @managed_iam_policy = options[:managed_iam_policy]
11
12
  @lang = options[:lang] || :ruby
12
13
  end
13
14
 
15
+ def build_function_iam?
16
+ !!(@iam_policy || @managed_iam_policy)
17
+ end
18
+
14
19
  def name
15
20
  @meth
16
21
  end
@@ -1,3 +1,3 @@
1
1
  module Jets
2
- VERSION = "0.6.9"
2
+ VERSION = "0.7.0"
3
3
  end
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.6.9
4
+ version: 0.7.0
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-08-28 00:00:00.000000000 Z
11
+ date: 2018-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -446,6 +446,11 @@ files:
446
446
  - lib/jets/cfn/template_builders/iam_policy/function_policy.rb
447
447
  - lib/jets/cfn/template_builders/interface.rb
448
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
449
454
  - lib/jets/cfn/template_builders/parent_builder.rb
450
455
  - lib/jets/cfn/template_builders/rule_builder.rb
451
456
  - lib/jets/cfn/template_builders/templates/minimal-stack.yml