Class: Platoon
- Inherits:
-
Object
- Object
- Platoon
- Defined in:
- lib/terraorg/model/platoon.rb
Instance Attribute Summary collapse
-
#id ⇒ Object
Returns the value of attribute id.
-
#manager ⇒ Object
Returns the value of attribute manager.
-
#member_exceptions ⇒ Object
Returns the value of attribute member_exceptions.
-
#member_squads ⇒ Object
Returns the value of attribute member_squads.
-
#name ⇒ Object
Returns the value of attribute name.
Instance Method Summary collapse
- #generate_tf(org_id) ⇒ Object
- #get_acl_groups(org_id, platoon: true) ⇒ Object
- #get_platoons_psv_row ⇒ Object
- #get_squads_psv_rows(org_id) ⇒ Object
-
#initialize(parsed_data, squads, people, gsuite_domain) ⇒ Platoon
constructor
A new instance of Platoon.
- #members ⇒ Object
- #squad_names ⇒ Object
-
#to_h ⇒ Object
Output a canonical (sorted, formatted) version of this object.
- #unique_name(org_id) ⇒ Object
- #validate! ⇒ Object
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
#id ⇒ Object
Returns the value of attribute id.
18 19 20 |
# File 'lib/terraorg/model/platoon.rb', line 18 def id @id end |
#manager ⇒ Object
Returns the value of attribute manager.
18 19 20 |
# File 'lib/terraorg/model/platoon.rb', line 18 def manager @manager end |
#member_exceptions ⇒ Object
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_squads ⇒ Object
Returns the value of attribute member_squads.
18 19 20 |
# File 'lib/terraorg/model/platoon.rb', line 18 def member_squads @member_squads end |
#name ⇒ Object
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_row ⇒ Object
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 |
#members ⇒ Object
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_names ⇒ Object
40 41 42 |
# File 'lib/terraorg/model/platoon.rb', line 40 def squad_names @member_squad_names end |
#to_h ⇒ Object
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 |