# Programmatic OpenShift Organizational Structure
A YAML file in a private github repository is used to track team structure.
The data is intended to provide reliable and efficient team contact by automation
and by users unfamiliar with the OpenShift structure.
Periodic processes, using this data as a source of truth, update:
- The team tracking spreadsheet.
- An organization diagram showing pillars & groups.
- Slack aliases for the team.
- Github org/repo/team membership and authorization
For human UX, a Slack bot will be made available:
```
@openshift-org-bot
> search oc
Teams relevant to your search:
OpenShift Workloads
- Matches repository: github.com/openshift/<bold>oc</bold>.
- Matches keyword: "<bold>oc</bold> client"
> describe OpenShift Workloads
Team: OpenShift Workloads
Description: <team description>
Jira project -> https://issues.redhat.com/projects/WRKLDS
Open a bug -> https://issues.redhat.com/secure/CreateIssueDetails!init.jspa?...component=oc
Slack Forum -> ...
Team Members:
- .. (Team Lead)
- ..
Staff Engineers:
- ..
Managers:
- ..
How to contact the team:
<team's contact protocol...>
```
Example schema entry.
```yaml=
schema: 1
# A flexible org structure which is sufficient
# to render a straightforward org diagram.
structures:
- type: org
id: openshift
name: OpenShift
staff_engineers:
- bparees
- dhellmann
structures:
- type: pillar
id: saf
name: "Services and Fleets"
description: ...
managers:
- nstielau
staff_engineers:
- sdodson
- mpatel
structures:
- type: group
id: ship
name: "SHIP"
description: ...
managers:
- bleanhar
staff_engineers:
- jupierce
structures:
- type: team
# Futher detail about each team can be found in the 'teams:' stanza.
id: testplatform
name: "Test Platform"
managers:
- ppawlows
team_leads:
- jguzik
teams:
- id: testplatform
type: engineering
description: The Test Platform team builds and operates a suite of OpenShift-native tooling and infrastructure for testing and continuous integration of OpenShift and layered products.
contact_protocol: |
<The team's description of how to contact them in specific situations.
Can include hyperlinks to source pages>.
# Allow users to search for teams based on
# what they need.
keywords:
- prow
- ci
- continuous integration
- testing
- merge requirements
- dptp
people:
include:
- # Team membership information will primarily be
# sourced from LDAP so that this file does not need
# frequent updates.
id: "ldap_group:rover_group_that_contains_all_team_members"
documents:
- name: "Architecture Call"
link: https://docs.google.com/document/d/1qscKvou44...
associations:
- type: px
id: "structure:<id from somewhere in the structure stanza>"
- type: qe
id: "team:..."
- type: agile
id: nwilker
- type: pm
...
- type: docs
...
slack:
channels:
- type: team # Private channel that is automatically setup to include team.people
name: team-dp-testplatform
people:
include:
- "structure:testplatform"
- jupierce
- "cohort:honorary_testplatform"
- type: forum
name: forum-testplatform
# Teams can have automatically managed Slack aliases
# populated from ldap, structures, or cohorts.
aliases:
- type: contact
name: team-testplatform
people:
include:
- id: "ldap_group:rover_group_that_contains_all_team_members"
exclude:
- id: example_individual_uid
- type: helpdesk # Optional handle (team maintained) for on call questions.
name: dptp-helpdesk
- type: triage # Optional handle (team maintained) for urgent assistance.
name: dptp-helpdesk
email:
# Mailing list with all team members
# and manager. Automatically reconciled by CRT
# on rover group changes.
team_list: ...
jira:
project: DPTP
software_components:
- name: "Core"
repos:
- name: github.com/openshift/release
- name: github.com/openshift/ci-tools
bugs:
jira_project: "OCPBUGS"
jira_component: "Test Infrastructure"
# Peribolos ultimately translates into a periobolos github configuration which
# will control membership and authorization for orgs/repos/teams.
# It matches the peribolos schema, https://docs.prow.k8s.io/docs/components/cli-tools/peribolos/ ,
# but allows symbolic references to teams, structures, and cohorts.
peribolos:
github:
orgs:
openshift-priv:
admins:
- "team:art"
openshift:
admins:
- "cohort:staff_engineers"
members:
- "structure:openshift"
- "cohort: roks_ibmers"
teams:
"OpenShift ART Team":
members:
- "team:art"
"OpenShift TestPlatform":
members:
- "team:testplatform"
# Cohorts are not as structured a teams, but can carry similar information.
# They can be composed of individual members, other cohorts, or teams.
# Teams can likewise reference cohorts as a source of people.
cohorts:
- id: container_runtime_smes
description: ...
keywords:
- podman
- crio
- ...
people:
include:
...
exclude:
...
- id: roks_ibmers
description: ...
keywords:
- ...
people:
include:
- id: "external:ibmer1"
- id: "external:ibmer2"
# Externals allows non-Red Hatters to be represented. This is primarily
# to allow them to be members of github orgs & teams.
externals:
- id: ibmer1
email: ...
github: ...
slack: ...
role: ...
valid_through: ...
```
Periodic processes validate (and alert CRT when invalid):
- Rover groups are populated with employees.
- Jira components exist.
Misc:
- There will be a CI pre-submit to validate changes to the data against a schema.
- Data in the files would support (or eventually drive) github repo privileges, root OWNERS file, etc.