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