class Miam::DSL::Converter

Public Class Methods

convert(exported, options = {}) click to toggle source
# File lib/miam/dsl/converter.rb, line 2
def self.convert(exported, options = {})
  self.new(exported, options).convert
end
new(exported, options = {}) click to toggle source
# File lib/miam/dsl/converter.rb, line 6
def initialize(exported, options = {})
  @exported = exported
  @options = options
end

Public Instance Methods

convert() click to toggle source
# File lib/miam/dsl/converter.rb, line 11
def convert
  [
    output_users(@exported[:users]),
    output_groups(@exported[:groups]),
    output_roles(@exported[:roles]),
    output_instance_profiles(@exported[:instance_profiles]),
    output_managed_policies(@exported[:policies]),
  ].join("\n")
end

Private Instance Methods

output_assume_role_policy_document(assume_role_policy_document) click to toggle source
# File lib/miam/dsl/converter.rb, line 133
  def output_assume_role_policy_document(assume_role_policy_document)
    assume_role_policy_document = assume_role_policy_document.pretty_inspect
    assume_role_policy_document.gsub!("\n", "\n    ").strip!

    <<-EOS.strip
  assume_role_policy_document do
    #{assume_role_policy_document}
  end
    EOS
  end
output_attached_managed_policies(attached_managed_policies) click to toggle source
# File lib/miam/dsl/converter.rb, line 173
def output_attached_managed_policies(attached_managed_policies)
  if attached_managed_policies.empty?
    attached_managed_policies = ['# attached_managed_policy']
  else
    attached_managed_policies = attached_managed_policies.map {|i| i.inspect }
  end

  attached_managed_policies = "\n    " + attached_managed_policies.join(",\n    ") + "\n  "
  "attached_managed_policies(#{attached_managed_policies})"
end
output_group(group_name, attrs) click to toggle source
# File lib/miam/dsl/converter.rb, line 72
  def output_group(group_name, attrs)
    group_options = {:path => attrs[:path]}

    <<-EOS
group #{group_name.inspect}, #{Miam::Utils.unbrace(group_options.inspect)} do
  #{output_policies(attrs[:policies])}

  #{output_attached_managed_policies(attrs[:attached_managed_policies])}
end
    EOS
  end
output_groups(groups) click to toggle source
# File lib/miam/dsl/converter.rb, line 65
def output_groups(groups)
  groups.each.sort_by {|k, v| k }.map {|group_name, attrs|
    next unless target_matched?(group_name)
    output_group(group_name, attrs)
  }.select {|i| i }.join("\n")
end
output_instance_profile(instance_profile_name, attrs) click to toggle source
# File lib/miam/dsl/converter.rb, line 144
  def output_instance_profile(instance_profile_name, attrs)
    instance_profile_options = {:path => attrs[:path]}

    <<-EOS
instance_profile #{instance_profile_name.inspect}, #{Miam::Utils.unbrace(instance_profile_options.inspect)}
    EOS
  end
output_instance_profiles(instance_profiles) click to toggle source
# File lib/miam/dsl/converter.rb, line 120
def output_instance_profiles(instance_profiles)
  instance_profiles.each.sort_by {|k, v| k }.map {|instance_profile_name, attrs|
    next unless target_matched?(instance_profile_name)
    output_instance_profile(instance_profile_name, attrs)
  }.select {|i| i }.join("\n")
end
output_login_profile(login_profile) click to toggle source
# File lib/miam/dsl/converter.rb, line 57
def output_login_profile(login_profile)
  if login_profile
    "login_profile #{Miam::Utils.unbrace(login_profile.inspect)}"
  else
    '# login_profile :password_reset_required=>true'
  end
end
output_managed_policies(policies) click to toggle source
# File lib/miam/dsl/converter.rb, line 184
def output_managed_policies(policies)
  policies.each.sort_by {|k, v| k }.map {|policy_name, attrs|
    next unless target_matched?(policy_name)
    output_managed_policy(policy_name, attrs)
  }.select {|i| i }.join("\n")
end
output_managed_policy(policy_name, attrs) click to toggle source
# File lib/miam/dsl/converter.rb, line 191
  def output_managed_policy(policy_name, attrs)
    policy_options = {:path => attrs[:path]}
    policy_document = attrs[:document].pretty_inspect
    policy_document.gsub!("\n", "\n    ").strip!

    <<-EOS
managed_policy #{policy_name.inspect}, #{Miam::Utils.unbrace(policy_options.inspect)} do
  #{policy_document}
end
    EOS
  end
output_policies(policies) click to toggle source
# File lib/miam/dsl/converter.rb, line 152
def output_policies(policies)
  if policies.empty?
    "# no policy"
  else
    policies.map {|policy_name, policy_document|
      output_policy(policy_name, policy_document)
    }.join("\n\n  ").strip
  end
end
output_policy(policy_name, policy_document) click to toggle source
# File lib/miam/dsl/converter.rb, line 162
  def output_policy(policy_name, policy_document)
    policy_document = policy_document.pretty_inspect
    policy_document.gsub!("\n", "\n    ").strip!

    <<-EOS.strip
  policy #{policy_name.inspect} do
    #{policy_document}
  end
    EOS
  end
output_role(role_name, attrs) click to toggle source
# File lib/miam/dsl/converter.rb, line 91
  def output_role(role_name, attrs)
    role_options = {:path => attrs[:path]}

    <<-EOS
role #{role_name.inspect}, #{Miam::Utils.unbrace(role_options.inspect)} do
  #{output_role_instance_profiles(attrs[:instance_profiles])}

  #{output_role_max_session_duration(attrs[:max_session_duration])}

  #{output_assume_role_policy_document(attrs[:assume_role_policy_document])}

  #{output_policies(attrs[:policies])}

  #{output_attached_managed_policies(attrs[:attached_managed_policies])}
end
    EOS
  end
output_role_instance_profiles(instance_profiles) click to toggle source
# File lib/miam/dsl/converter.rb, line 109
def output_role_instance_profiles(instance_profiles)
  if instance_profiles.empty?
    instance_profiles = ['# no instance_profile']
  else
    instance_profiles = instance_profiles.map {|i| i.inspect }
  end

  instance_profiles = "\n    " + instance_profiles.join(",\n    ") + "\n  "
  "instance_profiles(#{instance_profiles})"
end
output_role_max_session_duration(max_session_duration) click to toggle source
# File lib/miam/dsl/converter.rb, line 127
  def output_role_max_session_duration(max_session_duration)
    <<-EOS.strip
      max_session_duration #{max_session_duration}
    EOS
  end
output_roles(roles) click to toggle source
# File lib/miam/dsl/converter.rb, line 84
def output_roles(roles)
  roles.each.sort_by {|k, v| k }.map {|role_name, attrs|
    next unless target_matched?(role_name)
    output_role(role_name, attrs)
  }.select {|i| i }.join("\n")
end
output_user(user_name, attrs) click to toggle source
# File lib/miam/dsl/converter.rb, line 30
  def output_user(user_name, attrs)
    user_options = {:path => attrs[:path]}

    <<-EOS
user #{user_name.inspect}, #{Miam::Utils.unbrace(user_options.inspect)} do
  #{output_login_profile(attrs[:login_profile])}

  #{output_user_groups(attrs[:groups])}

  #{output_policies(attrs[:policies])}

  #{output_attached_managed_policies(attrs[:attached_managed_policies])}
end
    EOS
  end
output_user_groups(groups) click to toggle source
# File lib/miam/dsl/converter.rb, line 46
def output_user_groups(groups)
  if groups.empty?
    groups = ['# no group']
  else
    groups = groups.map {|i| i.inspect }
  end

  groups = "\n    " + groups.join(",\n    ") + "\n  "
  "groups(#{groups})"
end
output_users(users) click to toggle source
# File lib/miam/dsl/converter.rb, line 23
def output_users(users)
  users.each.sort_by {|k, v| k }.map {|user_name, attrs|
    next unless target_matched?(user_name)
    output_user(user_name, attrs)
  }.select {|i| i }.join("\n")
end
target_matched?(name) click to toggle source
# File lib/miam/dsl/converter.rb, line 203
def target_matched?(name)
  result = true

  if @options[:exclude]
    result &&= @options[:exclude].all? {|r| name !~ r}
  end

  if @options[:target]
    result &&= @options[:target].any? {|r| name =~ r}
  end

  result
end