miam 0.2.2.beta → 0.2.2.beta2
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/.travis.yml +1 -0
- data/README.md +70 -1
- data/lib/miam.rb +2 -0
- data/lib/miam/dsl/context.rb +16 -3
- data/lib/miam/dsl/context/group.rb +4 -1
- data/lib/miam/dsl/context/role.rb +4 -1
- data/lib/miam/dsl/context/user.rb +4 -1
- data/lib/miam/template_helper.rb +20 -0
- data/lib/miam/version.rb +1 -1
- data/miam.gemspec +1 -0
- data/spec/miam/create_spec.rb +157 -54
- metadata +43 -28
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 02694ddfe3ad49f32f2105b74f6367f52cdf0eaa
         | 
| 4 | 
            +
              data.tar.gz: 950a3109de9a191931aaadf6313b9628da4f943c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 332e80bae95488ee96f9b269d120cb80d896ba7eec058419e5498f784c45cc40a5018f9a14c5c59d2995a2c326ac100d8c607690d23798e7a3114ca9ac62ddcf
         | 
| 7 | 
            +
              data.tar.gz: c7f97f201ab25b1765e8dc8fa445110354c41546f8ad6c9a376a85b3e3fffc0e72b067967151eed40fab6fc9896266a3012cd1b8a0ff4af5beddcbdfb3d4aa02
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -6,7 +6,7 @@ It defines the state of IAM using DSL, and updates IAM according to DSL. | |
| 6 6 |  | 
| 7 7 | 
             
            [](http://badge.fury.io/rb/miam)
         | 
| 8 8 | 
             
            [](https://travis-ci.org/winebarrel/miam)
         | 
| 9 | 
            -
            [](https://coveralls.io/github/winebarrel/miam?branch=master)
         | 
| 10 10 |  | 
| 11 11 | 
             
            **Notice**
         | 
| 12 12 |  | 
| @@ -15,6 +15,9 @@ It defines the state of IAM using DSL, and updates IAM according to DSL. | |
| 15 15 | 
             
            * `>= 0.2.1`
         | 
| 16 16 | 
             
              * Support Managed Policy attach/detach
         | 
| 17 17 | 
             
              * Support JSON format
         | 
| 18 | 
            +
            * `>= 0.2.2`
         | 
| 19 | 
            +
              * Improve update (show diff)
         | 
| 20 | 
            +
              * Support Template
         | 
| 18 21 |  | 
| 19 22 | 
             
            ## Installation
         | 
| 20 23 |  | 
| @@ -216,5 +219,71 @@ Apply `iam.json` to IAM (dry-run) | |
| 216 219 | 
             
            No change
         | 
| 217 220 | 
             
            ```
         | 
| 218 221 |  | 
| 222 | 
            +
            ## Use Template
         | 
| 223 | 
            +
             | 
| 224 | 
            +
            ```ruby
         | 
| 225 | 
            +
            template "common-policy" do
         | 
| 226 | 
            +
              policy "my-policy" do
         | 
| 227 | 
            +
                {"Version"=>context.version,
         | 
| 228 | 
            +
                 "Statement"=>
         | 
| 229 | 
            +
                  [{"Action"=>
         | 
| 230 | 
            +
                     ["s3:Get*",
         | 
| 231 | 
            +
                      "s3:List*"],
         | 
| 232 | 
            +
                    "Effect"=>"Allow",
         | 
| 233 | 
            +
                    "Resource"=>"*"}]}
         | 
| 234 | 
            +
              end
         | 
| 235 | 
            +
            end
         | 
| 236 | 
            +
             | 
| 237 | 
            +
            template "common-role-attrs" do
         | 
| 238 | 
            +
              assume_role_policy_document do
         | 
| 239 | 
            +
                {"Version"=>context.version,
         | 
| 240 | 
            +
                 "Statement"=>
         | 
| 241 | 
            +
                  [{"Sid"=>"",
         | 
| 242 | 
            +
                    "Effect"=>"Allow",
         | 
| 243 | 
            +
                    "Principal"=>{"Service"=>"ec2.amazonaws.com"},
         | 
| 244 | 
            +
                    "Action"=>"sts:AssumeRole"}]}
         | 
| 245 | 
            +
              end
         | 
| 246 | 
            +
            end
         | 
| 247 | 
            +
             | 
| 248 | 
            +
            user "bob", :path => "/developer/" do
         | 
| 249 | 
            +
              login_profile :password_reset_required=>true
         | 
| 250 | 
            +
             | 
| 251 | 
            +
              groups(
         | 
| 252 | 
            +
                "Admin"
         | 
| 253 | 
            +
              )
         | 
| 254 | 
            +
             | 
| 255 | 
            +
              include_template "common-policy", version: "2012-10-17"
         | 
| 256 | 
            +
            end
         | 
| 257 | 
            +
             | 
| 258 | 
            +
            user "mary", :path => "/staff/" do
         | 
| 259 | 
            +
              # login_profile :password_reset_required=>true
         | 
| 260 | 
            +
             | 
| 261 | 
            +
              groups(
         | 
| 262 | 
            +
                # no group
         | 
| 263 | 
            +
              )
         | 
| 264 | 
            +
             | 
| 265 | 
            +
              context.version = "2012-10-17"
         | 
| 266 | 
            +
              include_template "common-policy"
         | 
| 267 | 
            +
             | 
| 268 | 
            +
              attached_managed_policies(
         | 
| 269 | 
            +
                "arn:aws:iam::aws:policy/AdministratorAccess",
         | 
| 270 | 
            +
                "arn:aws:iam::123456789012:policy/my_policy"
         | 
| 271 | 
            +
              )
         | 
| 272 | 
            +
            end
         | 
| 273 | 
            +
             | 
| 274 | 
            +
            role "S3", :path => "/" do
         | 
| 275 | 
            +
              instance_profiles(
         | 
| 276 | 
            +
                "S3"
         | 
| 277 | 
            +
              )
         | 
| 278 | 
            +
             | 
| 279 | 
            +
              include_template "common-role-attrs"
         | 
| 280 | 
            +
             | 
| 281 | 
            +
              policy "S3-role-policy" do
         | 
| 282 | 
            +
                {"Version"=>"2012-10-17",
         | 
| 283 | 
            +
                 "Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
         | 
| 284 | 
            +
              end
         | 
| 285 | 
            +
            end
         | 
| 286 | 
            +
            ```
         | 
| 287 | 
            +
             | 
| 219 288 | 
             
            ## Similar tools
         | 
| 220 289 | 
             
            * [Codenize.tools](http://codenize.tools/)
         | 
    
        data/lib/miam.rb
    CHANGED
    
    | @@ -10,9 +10,11 @@ require 'ruby-progressbar' | |
| 10 10 | 
             
            require 'parallel'
         | 
| 11 11 | 
             
            require 'term/ansicolor'
         | 
| 12 12 | 
             
            require 'diffy'
         | 
| 13 | 
            +
            require 'hashie'
         | 
| 13 14 |  | 
| 14 15 | 
             
            module Miam; end
         | 
| 15 16 | 
             
            require 'miam/logger'
         | 
| 17 | 
            +
            require 'miam/template_helper'
         | 
| 16 18 | 
             
            require 'miam/client'
         | 
| 17 19 | 
             
            require 'miam/driver'
         | 
| 18 20 | 
             
            require 'miam/dsl'
         | 
    
        data/lib/miam/dsl/context.rb
    CHANGED
    
    | @@ -1,4 +1,6 @@ | |
| 1 1 | 
             
            class Miam::DSL::Context
         | 
| 2 | 
            +
              include Miam::TemplateHelper
         | 
| 3 | 
            +
             | 
| 2 4 | 
             
              def self.eval(dsl, path, options = {})
         | 
| 3 5 | 
             
                self.new(path, options) {
         | 
| 4 6 | 
             
                  eval(dsl, binding, path)
         | 
| @@ -11,9 +13,20 @@ class Miam::DSL::Context | |
| 11 13 | 
             
                @path = path
         | 
| 12 14 | 
             
                @options = options
         | 
| 13 15 | 
             
                @result = {:users => {}, :groups => {}, :roles => {}, :instance_profiles => {}}
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                @context = Hashie::Mash.new(
         | 
| 18 | 
            +
                  :path => path,
         | 
| 19 | 
            +
                  :options => options,
         | 
| 20 | 
            +
                  :templates => {}
         | 
| 21 | 
            +
                )
         | 
| 22 | 
            +
             | 
| 14 23 | 
             
                instance_eval(&block)
         | 
| 15 24 | 
             
              end
         | 
| 16 25 |  | 
| 26 | 
            +
              def template(name, &block)
         | 
| 27 | 
            +
                @context.templates[name.to_s] = block
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
             | 
| 17 30 | 
             
              private
         | 
| 18 31 |  | 
| 19 32 | 
             
              def require(file)
         | 
| @@ -35,7 +48,7 @@ class Miam::DSL::Context | |
| 35 48 | 
             
                  raise "User `#{name}` is already defined"
         | 
| 36 49 | 
             
                end
         | 
| 37 50 |  | 
| 38 | 
            -
                attrs = Miam::DSL::Context::User.new(name, &block).result
         | 
| 51 | 
            +
                attrs = Miam::DSL::Context::User.new(@context, name, &block).result
         | 
| 39 52 | 
             
                @result[:users][name] = user_options.merge(attrs)
         | 
| 40 53 | 
             
              end
         | 
| 41 54 |  | 
| @@ -46,7 +59,7 @@ class Miam::DSL::Context | |
| 46 59 | 
             
                  raise "Group `#{name}` is already defined"
         | 
| 47 60 | 
             
                end
         | 
| 48 61 |  | 
| 49 | 
            -
                attrs = Miam::DSL::Context::Group.new(name, &block).result
         | 
| 62 | 
            +
                attrs = Miam::DSL::Context::Group.new(@context, name, &block).result
         | 
| 50 63 | 
             
                @result[:groups][name] = group_options.merge(attrs)
         | 
| 51 64 | 
             
              end
         | 
| 52 65 |  | 
| @@ -57,7 +70,7 @@ class Miam::DSL::Context | |
| 57 70 | 
             
                  raise "Role `#{name}` is already defined"
         | 
| 58 71 | 
             
                end
         | 
| 59 72 |  | 
| 60 | 
            -
                attrs = Miam::DSL::Context::Role.new(name, &block).result
         | 
| 73 | 
            +
                attrs = Miam::DSL::Context::Role.new(@context, name, &block).result
         | 
| 61 74 | 
             
                @result[:roles][name] = role_options.merge(attrs)
         | 
| 62 75 | 
             
              end
         | 
| 63 76 |  | 
| @@ -1,6 +1,9 @@ | |
| 1 1 | 
             
            class Miam::DSL::Context::Group
         | 
| 2 | 
            -
               | 
| 2 | 
            +
              include Miam::TemplateHelper
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              def initialize(context, name, &block)
         | 
| 3 5 | 
             
                @group_name = name
         | 
| 6 | 
            +
                @context = context.merge(:group_name => name)
         | 
| 4 7 | 
             
                @result = {:policies => {}, :attached_managed_policies => []}
         | 
| 5 8 | 
             
                instance_eval(&block)
         | 
| 6 9 | 
             
              end
         | 
| @@ -1,6 +1,9 @@ | |
| 1 1 | 
             
            class Miam::DSL::Context::Role
         | 
| 2 | 
            -
               | 
| 2 | 
            +
              include Miam::TemplateHelper
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              def initialize(context, name, &block)
         | 
| 3 5 | 
             
                @role_name = name
         | 
| 6 | 
            +
                @context = context.merge(:role_name => name)
         | 
| 4 7 | 
             
                @result = {:instance_profiles => [], :policies => {}, :attached_managed_policies => []}
         | 
| 5 8 | 
             
                instance_eval(&block)
         | 
| 6 9 | 
             
              end
         | 
| @@ -1,6 +1,9 @@ | |
| 1 1 | 
             
            class Miam::DSL::Context::User
         | 
| 2 | 
            -
               | 
| 2 | 
            +
              include Miam::TemplateHelper
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              def initialize(context, name, &block)
         | 
| 3 5 | 
             
                @user_name = name
         | 
| 6 | 
            +
                @context = context.merge(:user_name => name)
         | 
| 4 7 | 
             
                @result = {:groups => [], :policies => {}, :attached_managed_policies => []}
         | 
| 5 8 | 
             
                instance_eval(&block)
         | 
| 6 9 | 
             
              end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            module Miam
         | 
| 2 | 
            +
              module TemplateHelper
         | 
| 3 | 
            +
                def include_template(template_name, context = {})
         | 
| 4 | 
            +
                  tmplt = @context.templates[template_name.to_s]
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                  unless tmplt
         | 
| 7 | 
            +
                    raise "Template `#{template_name}` is not defined"
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  context_orig = @context
         | 
| 11 | 
            +
                  @context = @context.merge(context)
         | 
| 12 | 
            +
                  instance_eval(&tmplt)
         | 
| 13 | 
            +
                  @context = context_orig
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def context
         | 
| 17 | 
            +
                  @context
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
    
        data/lib/miam/version.rb
    CHANGED
    
    
    
        data/miam.gemspec
    CHANGED
    
    | @@ -25,6 +25,7 @@ Gem::Specification.new do |spec| | |
| 25 25 | 
             
              spec.add_dependency 'parallel'
         | 
| 26 26 | 
             
              spec.add_dependency 'term-ansicolor'
         | 
| 27 27 | 
             
              spec.add_dependency 'diffy'
         | 
| 28 | 
            +
              spec.add_dependency 'hashie'
         | 
| 28 29 | 
             
              spec.add_development_dependency 'bundler'
         | 
| 29 30 | 
             
              spec.add_development_dependency 'rake'
         | 
| 30 31 | 
             
              spec.add_development_dependency 'rspec', '>= 3.0.0'
         | 
    
        data/spec/miam/create_spec.rb
    CHANGED
    
    | @@ -85,68 +85,171 @@ describe 'create' do | |
| 85 85 | 
             
                context 'when apply' do
         | 
| 86 86 | 
             
                  subject { client }
         | 
| 87 87 |  | 
| 88 | 
            +
                  let(:expected) do
         | 
| 89 | 
            +
                    {:users=>
         | 
| 90 | 
            +
                      {"bob"=>
         | 
| 91 | 
            +
                        {:path=>"/devloper/",
         | 
| 92 | 
            +
                         :groups=>["Admin", "SES"],
         | 
| 93 | 
            +
                         :attached_managed_policies=>[],
         | 
| 94 | 
            +
                         :policies=>
         | 
| 95 | 
            +
                          {"S3"=>
         | 
| 96 | 
            +
                            {"Statement"=>
         | 
| 97 | 
            +
                              [{"Action"=>["s3:Get*", "s3:List*"],
         | 
| 98 | 
            +
                                "Effect"=>"Allow",
         | 
| 99 | 
            +
                                "Resource"=>"*"}]}},
         | 
| 100 | 
            +
                         :login_profile=>{:password_reset_required=>true}},
         | 
| 101 | 
            +
                       "mary"=>
         | 
| 102 | 
            +
                        {:path=>"/staff/",
         | 
| 103 | 
            +
                         :groups=>[],
         | 
| 104 | 
            +
                         :attached_managed_policies=>[],
         | 
| 105 | 
            +
                         :policies=>
         | 
| 106 | 
            +
                          {"S3"=>
         | 
| 107 | 
            +
                            {"Statement"=>
         | 
| 108 | 
            +
                              [{"Action"=>["s3:Get*", "s3:List*"],
         | 
| 109 | 
            +
                                "Effect"=>"Allow",
         | 
| 110 | 
            +
                                "Resource"=>"*"}]}}}},
         | 
| 111 | 
            +
                     :groups=>
         | 
| 112 | 
            +
                      {"Admin"=>
         | 
| 113 | 
            +
                        {:path=>"/admin/",
         | 
| 114 | 
            +
                         :attached_managed_policies=>[],
         | 
| 115 | 
            +
                         :policies=>
         | 
| 116 | 
            +
                          {"Admin"=>
         | 
| 117 | 
            +
                            {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}}},
         | 
| 118 | 
            +
                       "SES"=>
         | 
| 119 | 
            +
                        {:path=>"/ses/",
         | 
| 120 | 
            +
                         :attached_managed_policies=>[],
         | 
| 121 | 
            +
                         :policies=>
         | 
| 122 | 
            +
                          {"ses-policy"=>
         | 
| 123 | 
            +
                            {"Statement"=>
         | 
| 124 | 
            +
                              [{"Effect"=>"Allow",
         | 
| 125 | 
            +
                                "Action"=>"ses:SendRawEmail",
         | 
| 126 | 
            +
                                "Resource"=>"*"}]}}}},
         | 
| 127 | 
            +
                     :roles=>
         | 
| 128 | 
            +
                      {"my-role"=>
         | 
| 129 | 
            +
                        {:path=>"/any/",
         | 
| 130 | 
            +
                         :assume_role_policy_document=>
         | 
| 131 | 
            +
                          {"Version"=>"2012-10-17",
         | 
| 132 | 
            +
                           "Statement"=>
         | 
| 133 | 
            +
                            [{"Sid"=>"",
         | 
| 134 | 
            +
                              "Effect"=>"Allow",
         | 
| 135 | 
            +
                              "Principal"=>{"Service"=>"ec2.amazonaws.com"},
         | 
| 136 | 
            +
                              "Action"=>"sts:AssumeRole"}]},
         | 
| 137 | 
            +
                         :instance_profiles=>["my-instance-profile"],
         | 
| 138 | 
            +
                         :attached_managed_policies=>[],
         | 
| 139 | 
            +
                         :policies=>
         | 
| 140 | 
            +
                          {"role-policy"=>
         | 
| 141 | 
            +
                            {"Statement"=>
         | 
| 142 | 
            +
                              [{"Action"=>["s3:Get*", "s3:List*"],
         | 
| 143 | 
            +
                                "Effect"=>"Allow",
         | 
| 144 | 
            +
                                "Resource"=>"*"}]}}}},
         | 
| 145 | 
            +
                     :instance_profiles=>{"my-instance-profile"=>{:path=>"/profile/"}}}
         | 
| 146 | 
            +
                  end
         | 
| 147 | 
            +
             | 
| 88 148 | 
             
                  it do
         | 
| 89 149 | 
             
                    updated = apply(subject) { dsl }
         | 
| 90 150 | 
             
                    expect(updated).to be_truthy
         | 
| 91 | 
            -
                    expect(export).to eq | 
| 92 | 
            -
             | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
                           | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
                                 | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
             | 
| 115 | 
            -
                         | 
| 116 | 
            -
                           | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
             | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 151 | 
            +
                    expect(export).to eq expected
         | 
| 152 | 
            +
                  end
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  context 'when using template' do
         | 
| 155 | 
            +
                    let(:dsl) do
         | 
| 156 | 
            +
                      <<-RUBY
         | 
| 157 | 
            +
                        template "bob" do
         | 
| 158 | 
            +
                          login_profile :password_reset_required=>true
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                          groups(
         | 
| 161 | 
            +
                            "Admin",
         | 
| 162 | 
            +
                            "SES"
         | 
| 163 | 
            +
                          )
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                          policy "S3" do
         | 
| 166 | 
            +
                            {"Statement"=>
         | 
| 167 | 
            +
                              [{"Action"=>
         | 
| 168 | 
            +
                                 ["s3:Get*",
         | 
| 169 | 
            +
                                  "s3:List*"],
         | 
| 170 | 
            +
                                "Effect"=>"Allow",
         | 
| 171 | 
            +
                                "Resource"=>"*"}]}
         | 
| 172 | 
            +
                          end
         | 
| 173 | 
            +
                        end
         | 
| 174 | 
            +
             | 
| 175 | 
            +
                        template "mary" do
         | 
| 176 | 
            +
                          policy "S3" do
         | 
| 177 | 
            +
                            {"Statement"=>
         | 
| 178 | 
            +
                              [{"Action"=>
         | 
| 179 | 
            +
                                 ["s3:Get*",
         | 
| 180 | 
            +
                                  "s3:List*"],
         | 
| 181 | 
            +
                                "Effect"=>"Allow",
         | 
| 182 | 
            +
                                "Resource"=>"*"}]}
         | 
| 183 | 
            +
                          end
         | 
| 184 | 
            +
                        end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                        user "bob", :path=>"/devloper/" do
         | 
| 187 | 
            +
                          include_template context.user_name
         | 
| 188 | 
            +
                        end
         | 
| 189 | 
            +
             | 
| 190 | 
            +
                        user "mary", :path=>"/staff/" do
         | 
| 191 | 
            +
                          include_template context.user_name
         | 
| 192 | 
            +
                        end
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                        template "Admin" do
         | 
| 195 | 
            +
                          policy context.policy_name do
         | 
| 196 | 
            +
                            {"Statement"=>[{"Effect"=>"Allow", "Action"=>"*", "Resource"=>"*"}]}
         | 
| 197 | 
            +
                          end
         | 
| 198 | 
            +
                        end
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                        template "SES" do
         | 
| 201 | 
            +
                          policy context.policy_name do
         | 
| 202 | 
            +
                            {"Statement"=>
         | 
| 203 | 
            +
                              [{"Effect"=>"Allow", "Action"=>"ses:SendRawEmail", "Resource"=>"*"}]}
         | 
| 204 | 
            +
                          end
         | 
| 205 | 
            +
                        end
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                        group "Admin", :path=>"/admin/" do
         | 
| 208 | 
            +
                          include_template context.group_name, policy_name: "Admin"
         | 
| 209 | 
            +
                        end
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                        group "SES", :path=>"/ses/" do
         | 
| 212 | 
            +
                          context.policy_name = "ses-policy"
         | 
| 213 | 
            +
                          include_template context.group_name
         | 
| 214 | 
            +
                        end
         | 
| 215 | 
            +
             | 
| 216 | 
            +
                        template "my-role" do
         | 
| 217 | 
            +
                          instance_profiles(
         | 
| 218 | 
            +
                            "my-instance-profile"
         | 
| 219 | 
            +
                          )
         | 
| 220 | 
            +
             | 
| 221 | 
            +
                          assume_role_policy_document do
         | 
| 134 222 | 
             
                            {"Version"=>"2012-10-17",
         | 
| 135 223 | 
             
                             "Statement"=>
         | 
| 136 224 | 
             
                              [{"Sid"=>"",
         | 
| 137 225 | 
             
                                "Effect"=>"Allow",
         | 
| 138 226 | 
             
                                "Principal"=>{"Service"=>"ec2.amazonaws.com"},
         | 
| 139 | 
            -
                                "Action"=>"sts:AssumeRole"}]} | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
                            {" | 
| 144 | 
            -
                              {" | 
| 145 | 
            -
             | 
| 146 | 
            -
                                  " | 
| 147 | 
            -
             | 
| 148 | 
            -
             | 
| 149 | 
            -
             | 
| 227 | 
            +
                                "Action"=>"sts:AssumeRole"}]}
         | 
| 228 | 
            +
                          end
         | 
| 229 | 
            +
             | 
| 230 | 
            +
                          policy "role-policy" do
         | 
| 231 | 
            +
                            {"Statement"=>
         | 
| 232 | 
            +
                              [{"Action"=>
         | 
| 233 | 
            +
                                 ["s3:Get*",
         | 
| 234 | 
            +
                                  "s3:List*"],
         | 
| 235 | 
            +
                                "Effect"=>"Allow",
         | 
| 236 | 
            +
                                "Resource"=>"*"}]}
         | 
| 237 | 
            +
                          end
         | 
| 238 | 
            +
                        end
         | 
| 239 | 
            +
             | 
| 240 | 
            +
                        role "my-role", :path=>"/any/" do
         | 
| 241 | 
            +
                          include_template context.role_name
         | 
| 242 | 
            +
                        end
         | 
| 243 | 
            +
             | 
| 244 | 
            +
                        instance_profile "my-instance-profile", :path=>"/profile/"
         | 
| 245 | 
            +
                      RUBY
         | 
| 246 | 
            +
                    end
         | 
| 247 | 
            +
             | 
| 248 | 
            +
                    it do
         | 
| 249 | 
            +
                      updated = apply(subject) { dsl }
         | 
| 250 | 
            +
                      expect(updated).to be_truthy
         | 
| 251 | 
            +
                      expect(export).to eq expected
         | 
| 252 | 
            +
                    end
         | 
| 150 253 | 
             
                  end
         | 
| 151 254 | 
             
                end
         | 
| 152 255 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,153 +1,167 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: miam
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2.2. | 
| 4 | 
            +
              version: 0.2.2.beta2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Genki Sugawara
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-09 | 
| 11 | 
            +
            date: 2015-10-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: aws-sdk-core
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 | 
            -
                - -  | 
| 17 | 
            +
                - - ">="
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 19 | 
             
                    version: 2.0.42
         | 
| 20 20 | 
             
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 | 
            -
                - -  | 
| 24 | 
            +
                - - ">="
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 26 | 
             
                    version: 2.0.42
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 28 | 
             
              name: ruby-progressbar
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - -  | 
| 31 | 
            +
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 33 | 
             
                    version: '0'
         | 
| 34 34 | 
             
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 | 
            -
                - -  | 
| 38 | 
            +
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 42 | 
             
              name: parallel
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 | 
            -
                - -  | 
| 45 | 
            +
                - - ">="
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 47 | 
             
                    version: '0'
         | 
| 48 48 | 
             
              type: :runtime
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 | 
            -
                - -  | 
| 52 | 
            +
                - - ">="
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 54 | 
             
                    version: '0'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 56 | 
             
              name: term-ansicolor
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 | 
            -
                - -  | 
| 59 | 
            +
                - - ">="
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 61 | 
             
                    version: '0'
         | 
| 62 62 | 
             
              type: :runtime
         | 
| 63 63 | 
             
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 | 
            -
                - -  | 
| 66 | 
            +
                - - ">="
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 68 | 
             
                    version: '0'
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: diffy
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                requirements:
         | 
| 73 | 
            -
                - -  | 
| 73 | 
            +
                - - ">="
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 75 | 
             
                    version: '0'
         | 
| 76 76 | 
             
              type: :runtime
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 | 
            -
                - -  | 
| 80 | 
            +
                - - ">="
         | 
| 81 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            +
                    version: '0'
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            +
              name: hashie
         | 
| 85 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 | 
            +
                requirements:
         | 
| 87 | 
            +
                - - ">="
         | 
| 88 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 89 | 
            +
                    version: '0'
         | 
| 90 | 
            +
              type: :runtime
         | 
| 91 | 
            +
              prerelease: false
         | 
| 92 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 | 
            +
                requirements:
         | 
| 94 | 
            +
                - - ">="
         | 
| 81 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 96 | 
             
                    version: '0'
         | 
| 83 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 98 | 
             
              name: bundler
         | 
| 85 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 100 | 
             
                requirements:
         | 
| 87 | 
            -
                - -  | 
| 101 | 
            +
                - - ">="
         | 
| 88 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 89 103 | 
             
                    version: '0'
         | 
| 90 104 | 
             
              type: :development
         | 
| 91 105 | 
             
              prerelease: false
         | 
| 92 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 93 107 | 
             
                requirements:
         | 
| 94 | 
            -
                - -  | 
| 108 | 
            +
                - - ">="
         | 
| 95 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 110 | 
             
                    version: '0'
         | 
| 97 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 112 | 
             
              name: rake
         | 
| 99 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 114 | 
             
                requirements:
         | 
| 101 | 
            -
                - -  | 
| 115 | 
            +
                - - ">="
         | 
| 102 116 | 
             
                  - !ruby/object:Gem::Version
         | 
| 103 117 | 
             
                    version: '0'
         | 
| 104 118 | 
             
              type: :development
         | 
| 105 119 | 
             
              prerelease: false
         | 
| 106 120 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 121 | 
             
                requirements:
         | 
| 108 | 
            -
                - -  | 
| 122 | 
            +
                - - ">="
         | 
| 109 123 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 124 | 
             
                    version: '0'
         | 
| 111 125 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 126 | 
             
              name: rspec
         | 
| 113 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 128 | 
             
                requirements:
         | 
| 115 | 
            -
                - -  | 
| 129 | 
            +
                - - ">="
         | 
| 116 130 | 
             
                  - !ruby/object:Gem::Version
         | 
| 117 131 | 
             
                    version: 3.0.0
         | 
| 118 132 | 
             
              type: :development
         | 
| 119 133 | 
             
              prerelease: false
         | 
| 120 134 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 135 | 
             
                requirements:
         | 
| 122 | 
            -
                - -  | 
| 136 | 
            +
                - - ">="
         | 
| 123 137 | 
             
                  - !ruby/object:Gem::Version
         | 
| 124 138 | 
             
                    version: 3.0.0
         | 
| 125 139 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 126 140 | 
             
              name: rspec-instafail
         | 
| 127 141 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 128 142 | 
             
                requirements:
         | 
| 129 | 
            -
                - -  | 
| 143 | 
            +
                - - ">="
         | 
| 130 144 | 
             
                  - !ruby/object:Gem::Version
         | 
| 131 145 | 
             
                    version: '0'
         | 
| 132 146 | 
             
              type: :development
         | 
| 133 147 | 
             
              prerelease: false
         | 
| 134 148 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 135 149 | 
             
                requirements:
         | 
| 136 | 
            -
                - -  | 
| 150 | 
            +
                - - ">="
         | 
| 137 151 | 
             
                  - !ruby/object:Gem::Version
         | 
| 138 152 | 
             
                    version: '0'
         | 
| 139 153 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 140 154 | 
             
              name: coveralls
         | 
| 141 155 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 142 156 | 
             
                requirements:
         | 
| 143 | 
            -
                - -  | 
| 157 | 
            +
                - - ">="
         | 
| 144 158 | 
             
                  - !ruby/object:Gem::Version
         | 
| 145 159 | 
             
                    version: '0'
         | 
| 146 160 | 
             
              type: :development
         | 
| 147 161 | 
             
              prerelease: false
         | 
| 148 162 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 149 163 | 
             
                requirements:
         | 
| 150 | 
            -
                - -  | 
| 164 | 
            +
                - - ">="
         | 
| 151 165 | 
             
                  - !ruby/object:Gem::Version
         | 
| 152 166 | 
             
                    version: '0'
         | 
| 153 167 | 
             
            description: Miam is a tool to manage IAM. It defines the state of IAM using DSL,
         | 
| @@ -159,9 +173,9 @@ executables: | |
| 159 173 | 
             
            extensions: []
         | 
| 160 174 | 
             
            extra_rdoc_files: []
         | 
| 161 175 | 
             
            files:
         | 
| 162 | 
            -
            - .gitignore
         | 
| 163 | 
            -
            - .rspec
         | 
| 164 | 
            -
            - .travis.yml
         | 
| 176 | 
            +
            - ".gitignore"
         | 
| 177 | 
            +
            - ".rspec"
         | 
| 178 | 
            +
            - ".travis.yml"
         | 
| 165 179 | 
             
            - Gemfile
         | 
| 166 180 | 
             
            - LICENSE.txt
         | 
| 167 181 | 
             
            - README.md
         | 
| @@ -180,6 +194,7 @@ files: | |
| 180 194 | 
             
            - lib/miam/ext/string_ext.rb
         | 
| 181 195 | 
             
            - lib/miam/logger.rb
         | 
| 182 196 | 
             
            - lib/miam/password_manager.rb
         | 
| 197 | 
            +
            - lib/miam/template_helper.rb
         | 
| 183 198 | 
             
            - lib/miam/utils.rb
         | 
| 184 199 | 
             
            - lib/miam/version.rb
         | 
| 185 200 | 
             
            - miam.gemspec
         | 
| @@ -199,17 +214,17 @@ require_paths: | |
| 199 214 | 
             
            - lib
         | 
| 200 215 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 201 216 | 
             
              requirements:
         | 
| 202 | 
            -
              - -  | 
| 217 | 
            +
              - - ">="
         | 
| 203 218 | 
             
                - !ruby/object:Gem::Version
         | 
| 204 219 | 
             
                  version: '0'
         | 
| 205 220 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 206 221 | 
             
              requirements:
         | 
| 207 | 
            -
              - -  | 
| 222 | 
            +
              - - ">"
         | 
| 208 223 | 
             
                - !ruby/object:Gem::Version
         | 
| 209 224 | 
             
                  version: 1.3.1
         | 
| 210 225 | 
             
            requirements: []
         | 
| 211 226 | 
             
            rubyforge_project: 
         | 
| 212 | 
            -
            rubygems_version: 2. | 
| 227 | 
            +
            rubygems_version: 2.4.5
         | 
| 213 228 | 
             
            signing_key: 
         | 
| 214 229 | 
             
            specification_version: 4
         | 
| 215 230 | 
             
            summary: Miam is a tool to manage IAM.
         |