jets 0.6.9 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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