Class: Platoon

Inherits:
Object
  • Object
show all
Defined in:
lib/terraorg/model/platoon.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parsed_data, squads, people, gsuite_domain) ⇒ Platoon

Returns a new instance of Platoon.



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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

Instance Attribute Details

#idObject

Returns the value of attribute id.



18
19
20
# File 'lib/terraorg/model/platoon.rb', line 18

def id
  @id
end

#managerObject

Returns the value of attribute manager.



18
19
20
# File 'lib/terraorg/model/platoon.rb', line 18

def manager
  @manager
end

#member_exceptionsObject

Returns the value of attribute member_exceptions.



18
19
20
# File 'lib/terraorg/model/platoon.rb', line 18

def member_exceptions
  @member_exceptions
end

#member_squadsObject

Returns the value of attribute member_squads.



18
19
20
# File 'lib/terraorg/model/platoon.rb', line 18

def member_squads
  @member_squads
end

#nameObject

Returns the value of attribute name.



18
19
20
# File 'lib/terraorg/model/platoon.rb', line 18

def name
  @name
end

Instance Method Details

#generate_tf(org_id) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# 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) ⇒ Object



52
53
54
55
56
57
58
59
60
# 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_rowObject



62
63
64
# 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) ⇒ Object



66
67
68
# 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

#membersObject



44
45
46
# File 'lib/terraorg/model/platoon.rb', line 44

def members
  Set.new([@manager] + @member_squads.map(&:members).flatten + @member_exceptions).to_a
end

#squad_namesObject



40
41
42
# File 'lib/terraorg/model/platoon.rb', line 40

def squad_names
  @member_squad_names
end

#to_hObject

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

  • Sort the squad ids lexically

  • Sort the exceptions lexically



101
102
103
104
105
106
107
108
109
110
111
# 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) ⇒ Object



48
49
50
# File 'lib/terraorg/model/platoon.rb', line 48

def unique_name(org_id)
  "#{org_id}-platoon-#{@id}"
end

#validate!Object



36
37
38
# File 'lib/terraorg/model/platoon.rb', line 36

def validate!
  raise 'Platoon has no squads' if @member_squads.size == 0
end