practice_terraforming 0.1.9 → 0.1.10

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: 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