class Platoon

Attributes

id[RW]
manager[RW]
member_exceptions[RW]
member_squads[RW]
name[RW]

Public Class Methods

new(parsed_data, squads, people, gsuite_domain) click to toggle source
# File lib/terraorg/model/platoon.rb, line 20
def initialize(parsed_data, squads, people, gsuite_domain)
  @id = parsed_data.fetch('id')
  @metadata = parsed_data.fetch('metadata', {})
  @name = parsed_data.fetch('name')
  @manager = people.get_or_create!(parsed_data.fetch('manager'))
  @member_exceptions = parsed_data.fetch('exceptions', []).map do |n|
    people.get_or_create!(n)
  end
  @member_squad_names = []
  @member_squads = parsed_data.fetch('squads').map do |s|
    @member_squad_names.push(s)
    squads.lookup!(s)
  end
  @gsuite_domain = gsuite_domain
end

Public Instance Methods

generate_tf(org_id) click to toggle source
# File lib/terraorg/model/platoon.rb, line 70
  def generate_tf(org_id)
    tf_id = unique_name(org_id)

    # tf formatted, comma separated references to the group ids for the
    # squads in this platoon
    squads_condition = get_acl_groups(org_id, platoon: false).map {
      |n, _| "\\\"${okta_group.#{n}.id}\\\""
    }.join(',')

    # tf containing the platoon declaration
    description = "#{@name} platoon members (terraorg)"
    rv = <<-EOF
# Platoon: #{@name}
# Squads: #{squad_names.join(', ')}

resource "okta_group" "#{tf_id}" {
  name = "#{tf_id}"
  description = "#{description}"
  users = #{Util.persons_tf(members)}
}

#{Util.gsuite_group_tf(tf_id, @gsuite_domain, members, description)}
EOF

    # tf containing squads and their members
    rv += @member_squads.map { |s| s.generate_tf(org_id) }.join("\n")
  end
get_acl_groups(org_id, platoon: true) click to toggle source
# File lib/terraorg/model/platoon.rb, line 52
def get_acl_groups(org_id, platoon: true)
  if platoon
    rv = { unique_name(org_id) => {'name' => "#{@name} platoon members worldwide", 'members' => members} }
  else
    rv = {}
  end

  @member_squads.map { |s| s.get_acl_groups(org_id) }.reduce(rv, :merge)
end
get_platoons_psv_row() click to toggle source
# File lib/terraorg/model/platoon.rb, line 62
def get_platoons_psv_row
  "|#{@name}|#{@manager.name}|#{members.size}|#{members.map(&:name).sort.join(', ')}|"
end
get_squads_psv_rows(org_id) click to toggle source
# File lib/terraorg/model/platoon.rb, line 66
def get_squads_psv_rows(org_id)
  @member_squads.map { |s| s.to_md(@name, org_id) }
end
members() click to toggle source
# File lib/terraorg/model/platoon.rb, line 44
def members
  Set.new([@manager] + @member_squads.map(&:members).flatten + @member_exceptions).to_a
end
squad_names() click to toggle source
# File lib/terraorg/model/platoon.rb, line 40
def squad_names
  @member_squad_names
end
to_h() click to toggle source

Output a canonical (sorted, formatted) version of this object.

  • Sort the squad ids lexically

  • Sort the exceptions lexically

# File lib/terraorg/model/platoon.rb, line 101
def to_h
  obj = { 'id' => @id, 'name' => @name, 'manager' => @manager.id, 'squads' => @member_squads.map(&:id).sort }
  unless @member_exceptions.empty?
    obj['exceptions'] = @member_exceptions.map(&:id).sort
  end
  unless @metadata.empty?
    obj['metadata'] = @metadata
  end

  obj
end
unique_name(org_id) click to toggle source
# File lib/terraorg/model/platoon.rb, line 48
def unique_name(org_id)
  "#{org_id}-platoon-#{@id}"
end
validate!() click to toggle source
# File lib/terraorg/model/platoon.rb, line 36
def validate!
  raise 'Platoon has no squads' if @member_squads.size == 0
end