practice_terraforming 0.1.9 → 0.1.10

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
  SHA1:
3
- metadata.gz: 7003725d724443f535fc0b2e0aff436037c68b87
4
- data.tar.gz: e6457aabd112f6e4ea9d0ec52814bd06b857a51f
3
+ metadata.gz: 470a3786475fc6a518e01d775d2dcf520ae46caf
4
+ data.tar.gz: cb1f175cd0bd8d8a20d696cde1ec588536f5ae62
5
5
  SHA512:
6
- metadata.gz: 777b6f9ffbaa6b4615dca20eff0bf8edb5ab2ea7298a7638bc8a3ab47e048737639af5aa5785b4ffee05e592b584d95a03db3d5838b58a1c47cdb4efa34f4560
7
- data.tar.gz: f6f8e1bd631b85ee87bb3bc4f899fb3baba27ec87f61c85f2ddac480c29051a32e5fd61a784cdb5f7e675a821c7674d51dba818b0e7bf55599f5d365a7be1af4
6
+ metadata.gz: d428d5b761d781f2bb50cb4c62e4c32c7afffa68e6697dad4eb96a34f62f2c9ec259372a9fd222adddba52cb7e4e141547547539d00fa2535489bb2fda5b39c5
7
+ data.tar.gz: 921b270a48dc04b78935c73d00d7cba769bea08a79660e34639f6656f25c21baee8061e711462805dfc521ee02b8fc1ffa00da2a3a71febf08dd8b796ffbb86e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- practice_terraforming (0.1.9)
4
+ practice_terraforming (0.1.10)
5
5
  aws-sdk-iam (~> 1)
6
6
  aws-sdk-s3 (~> 1)
7
7
  multi_json (~> 1.12.1)
@@ -13,6 +13,7 @@ require "practice_terraforming/cli"
13
13
  require "practice_terraforming/resource/iam_role"
14
14
  require "practice_terraforming/resource/iam_role_policy_attachment"
15
15
  require "practice_terraforming/resource/iam_user"
16
+ require "practice_terraforming/resource/iam_user_group_membership"
16
17
  require "practice_terraforming/resource/iam_user_policy_attachment"
17
18
  require "practice_terraforming/resource/iam_group_policy_attachment"
18
19
  require "practice_terraforming/resource/iam_policy_attachment"
@@ -47,6 +47,11 @@ module PracticeTerraforming
47
47
  execute(PracticeTerraforming::Resource::IAMGroupPolicyAttachment, options)
48
48
  end
49
49
 
50
+ desc "iamugm", "Iam User Group Membership"
51
+ def iamugm
52
+ execute(PracticeTerraforming::Resource::IAMUserGroupMembership, options)
53
+ end
54
+
50
55
  private
51
56
 
52
57
  def configure_aws(options)
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PracticeTerraforming
4
+ module Resource
5
+ class IAMUserGroupMembership
6
+ include PracticeTerraforming::Util
7
+
8
+ # TODO: Select appropriate Client class from here:
9
+ # http://docs.aws.amazon.com/sdkforruby/api/index.html
10
+ def self.tf(client: Aws::IAM::Client.new)
11
+ self.new(client).tf
12
+ end
13
+
14
+ # TODO: Select appropriate Client class from here:
15
+ # http://docs.aws.amazon.com/sdkforruby/api/index.html
16
+ def self.tfstate(client: Aws::IAM::Client.new)
17
+ self.new(client).tfstate
18
+ end
19
+
20
+ def initialize(client)
21
+ @client = client
22
+ end
23
+
24
+ def tf
25
+ apply_template(@client, "tf/iam_user_group_membership")
26
+ end
27
+
28
+ def tfstate
29
+ user_group_memberships.inject({}) do |resources, membership|
30
+ attributes = {
31
+ "id" => membership[:name],
32
+ "groups.#" => "1",
33
+ "groups.1" => membership[:group],
34
+ "user" => membership[:user]
35
+ }
36
+ resources["aws_iam_user_group_membership.#{module_name_of(membership)}"] = {
37
+ "type" => "aws_iam_user_group_membership",
38
+ "primary" => {
39
+ "id" => membership[:name],
40
+ "attributes" => attributes
41
+ }
42
+ }
43
+
44
+ resources
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def user_group_membership_name_from(user, group)
51
+ "#{user.user_name}-#{group.group_name}-membership"
52
+ end
53
+
54
+ def iam_groups
55
+ @client.list_groups.map(&:groups).flatten
56
+ end
57
+
58
+ def group_members_of(group)
59
+ @client.get_group(group_name: group.group_name).users
60
+ end
61
+
62
+ def user_group_memberships
63
+ iam_groups.map do |group|
64
+ group_members_of(group).map do |user|
65
+ {
66
+ group: group.group_name,
67
+ user: user.user_name,
68
+ name: user_group_membership_name_from(user, group)
69
+ }
70
+ end
71
+ end.flatten
72
+ end
73
+
74
+ def module_name_of(membership)
75
+ normalize_module_name(membership[:name])
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,9 @@
1
+ <% user_group_memberships.each do |membership| -%>
2
+ resource "aws_iam_user_group_membership" "<%= membership[:name] %>" {
3
+ user = "<%= membership[:user] %>"
4
+ groups = [
5
+ "<%= membership[:group] %>"
6
+ ]
7
+ }
8
+
9
+ <% end -%>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PracticeTerraforming
4
- VERSION = '0.1.9'
4
+ VERSION = '0.1.10'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: practice_terraforming
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - masatonaka
@@ -163,6 +163,7 @@ files:
163
163
  - lib/practice_terraforming/resource/iam_role.rb
164
164
  - lib/practice_terraforming/resource/iam_role_policy_attachment.rb
165
165
  - lib/practice_terraforming/resource/iam_user.rb
166
+ - lib/practice_terraforming/resource/iam_user_group_membership.rb
166
167
  - lib/practice_terraforming/resource/iam_user_policy_attachment.rb
167
168
  - lib/practice_terraforming/resource/s3.rb
168
169
  - lib/practice_terraforming/template/tf/iam_group_policy_attachment.erb
@@ -170,6 +171,7 @@ files:
170
171
  - lib/practice_terraforming/template/tf/iam_role.erb
171
172
  - lib/practice_terraforming/template/tf/iam_role_policy_attachment.erb
172
173
  - lib/practice_terraforming/template/tf/iam_user.erb
174
+ - lib/practice_terraforming/template/tf/iam_user_group_membership.erb
173
175
  - lib/practice_terraforming/template/tf/iam_user_policy_attachment.erb
174
176
  - lib/practice_terraforming/template/tf/s3.erb
175
177
  - lib/practice_terraforming/util.rb