Merge "Implement distributed leadership in tools and schema"

This commit is contained in:
Zuul
2020-11-02 14:12:39 +00:00
committed by Gerrit Code Review
6 changed files with 279 additions and 114 deletions

View File

@@ -71,8 +71,9 @@ class TCLiaisonsTable(tables.Table):
data_iter = projects.load_project_file(filename) data_iter = projects.load_project_file(filename)
liaisons = {} liaisons = {}
for project_name, project in data_iter.items(): for project_name, project in data_iter.items():
proj_liaisons = project.get('liaisons', {})
for liaison in project.get('liaisons', []): for liaison in proj_liaisons.get('tc_members', []):
try: try:
liaisons[liaison].extend([project_name]) liaisons[liaison].extend([project_name])
except KeyError: except KeyError:

View File

@@ -43,6 +43,10 @@ def _team_to_rst(name, info):
yield '' yield ''
yield ':Home Page: ' + info.get('url', '') yield ':Home Page: ' + info.get('url', '')
ptl = info.get('ptl', {'name': '', 'irc': '', 'email': ''}) ptl = info.get('ptl', {'name': '', 'irc': '', 'email': ''})
leadership_type = info.get('leadership_type')
if leadership_type:
yield ':Leadership Type: ' + leadership_type
else:
yield ':PTL: %(name)s (``%(irc)s``) <%(email)s>' % ptl yield ':PTL: %(name)s (``%(irc)s``) <%(email)s>' % ptl
irc_channel = info.get('irc-channel') irc_channel = info.get('irc-channel')
if irc_channel: if irc_channel:
@@ -53,7 +57,50 @@ def _team_to_rst(name, info):
yield ':Service: ' + service yield ':Service: ' + service
liaisons = info.get('liaisons') liaisons = info.get('liaisons')
if liaisons: if liaisons:
yield ':TC Liaisons: ' + ", ".join(liaisons) contact_format = {'name': '', 'irc': '', 'email': ''}
tc_members = liaisons.get('tc_members')
if tc_members:
yield ':TC Members Liaisons: ' + ", ".join(tc_members)
release = liaisons.get('release', contact_format)
if release != contact_format:
yield ':Release Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % rl
for rl in release)
tact_sig = liaisons.get('tact-sig', contact_format)
if tact_sig != contact_format:
yield ':TACT SIG Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % tl
for tl in tact_sig)
security = liaisons.get('security', contact_format)
if security != contact_format:
yield ':Security Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % sl
for sl in security)
events = liaisons.get('events', contact_format)
if events != contact_format:
yield ':Events Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % el
for el in events)
project_update_onboarding = liaisons.get('project_update_onboarding', contact_format)
if project_update_onboarding != contact_format:
yield ':Project Update Onboarding Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % pl
for pl in project_update_onboarding)
meeting_facilitator = liaisons.get('meeting_facilitator', contact_format)
if meeting_facilitator != contact_format:
yield ':Meeting Facilitator Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % ml
for ml in meeting_facilitator)
bug_deputy = liaisons.get('bug_deputy', contact_format)
if bug_deputy != contact_format:
yield ':Bug Deputy Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % bl
for bl in bug_deputy)
rfe_coordinator = liaisons.get('rfe_coordinator', contact_format)
if rfe_coordinator != contact_format:
yield ':RFE Coordinator Liaisons: ' + ', '.join(
'%(name)s (``%(irc)s``) <%(email)s>' % rcl
for rcl in rfe_coordinator)
yield '' yield ''
mission = info.get('mission', '').rstrip() mission = info.get('mission', '').rstrip()
if mission: if mission:

View File

@@ -3,15 +3,41 @@ $schema: "http://json-schema.org/schema#"
$id: "https://opendev.org/openstack/releases/src/branch/master/README.rst" $id: "https://opendev.org/openstack/releases/src/branch/master/README.rst"
contact_schema: &contact_schema
type: "array"
items:
type: "object"
required:
- name
- email
additionalProperties: false
properties:
name:
type: "string"
irc:
type: "string"
email:
type: "string"
format: "email"
minItems: 1
uniqueItems: true
additionalProperties: additionalProperties:
# Do not allow any properties not defined here. This lets us catch # Do not allow any properties not defined here. This lets us catch
# typos. # typos.
additionalProperties: false additionalProperties: false
required: oneOf:
- required:
- ptl - ptl
- deliverables - deliverables
- url - url
- mission - mission
- required:
- leadership_type
- liaisons
- deliverables
- url
- mission
properties: properties:
ptl: ptl:
type: "object" type: "object"
@@ -27,6 +53,10 @@ additionalProperties:
email: email:
type: "string" type: "string"
format: "email" format: "email"
leadership_type:
type: "string"
enum:
- distributed
appointed: appointed:
type: "array" type: "array"
items: items:
@@ -38,10 +68,25 @@ additionalProperties:
url: url:
type: "string" type: "string"
liaisons: liaisons:
type: "object"
properties:
tc_members:
type: "array" type: "array"
uniqueItems: true
items: items:
type: "string" type: "string"
uniqueItems: true
# TODO(gmann): Make release, tact-sig,
# and, security liaison as required for
# distributed leadership type.
release: *contact_schema
tact-sig: *contact_schema
security: *contact_schema
events: *contact_schema
project_update_onboarding: *contact_schema
meeting_facilitator: *contact_schema
bug_deputy: *contact_schema
rfp_coordinator: *contact_schema
additionalProperties: false
mission: mission:
type: "string" type: "string"
deliverables: deliverables:

View File

@@ -32,8 +32,24 @@ Release Management:
their own releases. their own releases.
url: https://wiki.openstack.org/wiki/Release_Management url: https://wiki.openstack.org/wiki/Release_Management
liaisons: liaisons:
tc_members:
- zaneb - zaneb
- ttx - ttx
release:
- name: Hervé Beraud
irc: hberaud
email: hberaud@redhat.com
tact-sig:
- name: Hervé Beraud
irc: hberaud
email: hberaud@redhat.com
- name: Daniel Bengtsson
irc: damani
email: dbengt@redhat.com
security:
- name: Daniel Bengtsson
irc: damani
email: dbengt@redhat.com
tags: tags:
- team:diverse-affiliation - team:diverse-affiliation
deliverables: deliverables:

View File

@@ -24,6 +24,7 @@ adjutant:
repos: repos:
- openstack/python-adjutantclient - openstack/python-adjutantclient
liaisons: liaisons:
tc_members:
- knikolla - knikolla
- mnaser - mnaser
barbican: barbican:
@@ -74,6 +75,7 @@ barbican:
tags: tags:
- vulnerability:managed - vulnerability:managed
liaisons: liaisons:
tc_members:
- knikolla - knikolla
- cloudnull - cloudnull
blazar: blazar:
@@ -110,6 +112,7 @@ blazar:
repos: repos:
- openstack/python-blazarclient - openstack/python-blazarclient
liaisons: liaisons:
tc_members:
- mugsie - mugsie
- belmoreira - belmoreira
cinder: cinder:
@@ -164,6 +167,7 @@ cinder:
- vulnerability:managed - vulnerability:managed
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
tc_members:
- cloudnull - cloudnull
- mugsie - mugsie
cloudkitty: cloudkitty:
@@ -199,6 +203,7 @@ cloudkitty:
repos: repos:
- openstack/cloudkitty-tempest-plugin - openstack/cloudkitty-tempest-plugin
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- knikolla - knikolla
cyborg: cyborg:
@@ -229,6 +234,7 @@ cyborg:
repos: repos:
- openstack/cyborg-tempest-plugin - openstack/cyborg-tempest-plugin
liaisons: liaisons:
tc_members:
- njohnston - njohnston
- cloudnull - cloudnull
designate: designate:
@@ -272,6 +278,7 @@ designate:
tags: tags:
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- jungleboyj - jungleboyj
ec2-api: ec2-api:
@@ -292,6 +299,7 @@ ec2-api:
repos: repos:
- openstack/ec2api-tempest-plugin - openstack/ec2api-tempest-plugin
liaisons: liaisons:
tc_members:
- jungleboyj - jungleboyj
- mnaser - mnaser
freezer: freezer:
@@ -328,6 +336,7 @@ freezer:
repos: repos:
- openstack/python-freezerclient - openstack/python-freezerclient
liaisons: liaisons:
tc_members:
- ricolin - ricolin
- jungleboyj - jungleboyj
glance: glance:
@@ -370,6 +379,7 @@ glance:
- vulnerability:managed - vulnerability:managed
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
tc_members:
- mnaser - mnaser
- njohnston - njohnston
heat: heat:
@@ -429,7 +439,8 @@ heat:
tosca-parser: tosca-parser:
repos: repos:
- openstack/tosca-parser - openstack/tosca-parser
liaisons: [ricolin, jungleboyj] liaisons:
tc_members: [ricolin, jungleboyj]
horizon: horizon:
ptl: ptl:
name: Ivan Kolodyazhny name: Ivan Kolodyazhny
@@ -549,6 +560,7 @@ horizon:
repos: repos:
- openstack/xstatic-spin - openstack/xstatic-spin
liaisons: liaisons:
tc_members:
- mnaser - mnaser
- mugsie - mugsie
ironic: ironic:
@@ -656,6 +668,7 @@ ironic:
email: jay@jvf.cc email: jay@jvf.cc
expires-in: July 2019 expires-in: July 2019
liaisons: liaisons:
tc_members:
- mnaser - mnaser
- knikolla - knikolla
karbor: karbor:
@@ -680,6 +693,7 @@ karbor:
repos: repos:
- openstack/python-karborclient - openstack/python-karborclient
liaisons: liaisons:
tc_members:
- mugsie - mugsie
- belmoreira - belmoreira
keystone: keystone:
@@ -737,6 +751,7 @@ keystone:
repos: repos:
- openstack/ldappool - openstack/ldappool
liaisons: liaisons:
tc_members:
- mnaser - mnaser
- knikolla - knikolla
kolla: kolla:
@@ -768,6 +783,7 @@ kolla:
- openstack/kayobe-config - openstack/kayobe-config
- openstack/kayobe-config-dev - openstack/kayobe-config-dev
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- mugsie - mugsie
kuryr: kuryr:
@@ -797,6 +813,7 @@ kuryr:
repos: repos:
- openstack/kuryr-tempest-plugin - openstack/kuryr-tempest-plugin
liaisons: liaisons:
tc_members:
- belmoreira - belmoreira
- njohnston - njohnston
magnum: magnum:
@@ -827,7 +844,8 @@ magnum:
python-magnumclient: python-magnumclient:
repos: repos:
- openstack/python-magnumclient - openstack/python-magnumclient
liaisons: [ricolin, belmoreira] liaisons:
tc_members: [ricolin, belmoreira]
manila: manila:
ptl: ptl:
name: Goutham Pacha Ravi name: Goutham Pacha Ravi
@@ -870,7 +888,8 @@ manila:
python-manilaclient: python-manilaclient:
repos: repos:
- openstack/python-manilaclient - openstack/python-manilaclient
liaisons: [gmann, cloudnull] liaisons:
tc_members: [gmann, cloudnull]
masakari: masakari:
ptl: ptl:
name: Radosław Piliszek name: Radosław Piliszek
@@ -902,6 +921,7 @@ masakari:
repos: repos:
- openstack/masakari-dashboard - openstack/masakari-dashboard
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- cloudnull - cloudnull
mistral: mistral:
@@ -940,7 +960,8 @@ mistral:
mistral-extra: mistral-extra:
repos: repos:
- openstack/mistral-extra - openstack/mistral-extra
liaisons: [ricolin, jungleboyj] liaisons:
tc_members: [ricolin, jungleboyj]
monasca: monasca:
ptl: ptl:
name: Martin Chacon Piza name: Martin Chacon Piza
@@ -1012,6 +1033,7 @@ monasca:
repos: repos:
- openstack/monasca-kibana-plugin - openstack/monasca-kibana-plugin
liaisons: liaisons:
tc_members:
- ricolin - ricolin
- belmoreira - belmoreira
murano: murano:
@@ -1065,6 +1087,7 @@ murano:
repos: repos:
- openstack/murano-tempest-plugin - openstack/murano-tempest-plugin
liaisons: liaisons:
tc_members:
- cloudnull - cloudnull
- njohnston - njohnston
neutron: neutron:
@@ -1164,7 +1187,8 @@ neutron:
os-ken: os-ken:
repos: repos:
- openstack/os-ken - openstack/os-ken
liaisons: [njohnston, mnaser] liaisons:
tc_members: [njohnston, mnaser]
nova: nova:
ptl: ptl:
name: Balazs Gibizer name: Balazs Gibizer
@@ -1204,7 +1228,8 @@ nova:
os-vif: os-vif:
repos: repos:
- openstack/os-vif - openstack/os-vif
liaisons: [gmann, cloudnull] liaisons:
tc_members: [gmann, cloudnull]
octavia: octavia:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@@ -1259,6 +1284,7 @@ octavia:
tags: tags:
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
tc_members:
- cloudnull - cloudnull
- mugsie - mugsie
OpenStack Charms: OpenStack Charms:
@@ -1786,6 +1812,7 @@ OpenStack Charms:
repos: repos:
- openstack/charm-watcher-dashboard - openstack/charm-watcher-dashboard
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- gmann - gmann
openstack-chef: openstack-chef:
@@ -1881,6 +1908,7 @@ openstack-chef:
repos: repos:
- openstack/openstack-chef-specs - openstack/openstack-chef-specs
liaisons: liaisons:
tc_members:
- njohnston - njohnston
- ricolin - ricolin
OpenStack-Helm: OpenStack-Helm:
@@ -1926,6 +1954,7 @@ OpenStack-Helm:
repos: repos:
- openstack/loci - openstack/loci
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- njohnston - njohnston
OpenStackAnsible: OpenStackAnsible:
@@ -2020,6 +2049,7 @@ OpenStackAnsible:
repos: repos:
- openstack/openstack-ansible-specs - openstack/openstack-ansible-specs
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- knikolla - knikolla
OpenStackSDK: OpenStackSDK:
@@ -2075,7 +2105,8 @@ OpenStackSDK:
- openstack/shade - openstack/shade
tags: tags:
- assert:follows-standard-deprecation - assert:follows-standard-deprecation
liaisons: [diablo_rojo, cloudnull] liaisons:
tc_members: [diablo_rojo, cloudnull]
oslo: oslo:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@@ -2292,7 +2323,8 @@ oslo:
repos: repos:
- openstack/whereto - openstack/whereto
liaisons: [ricolin, belmoreira] liaisons:
tc_members: [ricolin, belmoreira]
placement: placement:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@@ -2324,6 +2356,7 @@ placement:
repos: repos:
- openstack/os-resource-classes - openstack/os-resource-classes
liaisons: liaisons:
tc_members:
- gmann - gmann
- njohnston - njohnston
Puppet OpenStack: Puppet OpenStack:
@@ -2483,6 +2516,7 @@ Puppet OpenStack:
- openstack/puppet-zaqar - openstack/puppet-zaqar
liaisons: liaisons:
tc_members:
- evrardjp - evrardjp
- ricolin - ricolin
qinling: qinling:
@@ -2508,6 +2542,7 @@ qinling:
- openstack/qinling-dashboard - openstack/qinling-dashboard
liaisons: liaisons:
tc_members:
- mugsie - mugsie
- jungleboyj - jungleboyj
Quality Assurance: Quality Assurance:
@@ -2612,7 +2647,8 @@ Quality Assurance:
release-management: none release-management: none
repos: repos:
- openstack/whitebox-tempest-plugin - openstack/whitebox-tempest-plugin
liaisons: [gmann, jungleboyj] liaisons:
tc_members: [gmann, jungleboyj]
rally: rally:
ptl: ptl:
name: Andrey Kurilin name: Andrey Kurilin
@@ -2640,6 +2676,7 @@ rally:
- openstack/performance-docs - openstack/performance-docs
liaisons: liaisons:
tc_members:
- knikolla - knikolla
- diablo_rojo - diablo_rojo
Release Management: Release Management:
@@ -2670,6 +2707,7 @@ Release Management:
repos: repos:
- openstack/specs-cookiecutter - openstack/specs-cookiecutter
liaisons: liaisons:
tc_members:
- diablo_rojo - diablo_rojo
- evrardjp - evrardjp
requirements: requirements:
@@ -2689,6 +2727,7 @@ requirements:
repos: repos:
- openstack/requirements - openstack/requirements
liaisons: liaisons:
tc_members:
- diablo_rojo - diablo_rojo
- belmoreira - belmoreira
sahara: sahara:
@@ -2792,6 +2831,7 @@ sahara:
- openstack/sahara-specs - openstack/sahara-specs
liaisons: liaisons:
tc_members:
- gmann - gmann
- njohnston - njohnston
searchlight: searchlight:
@@ -2825,6 +2865,7 @@ searchlight:
- openstack/searchlight-ui - openstack/searchlight-ui
liaisons: liaisons:
tc_members:
- mugsie - mugsie
- belmoreira - belmoreira
senlin: senlin:
@@ -2852,7 +2893,8 @@ senlin:
repos: repos:
- openstack/senlin-tempest-plugin - openstack/senlin-tempest-plugin
liaisons: [ricolin, mnaser] liaisons:
tc_members: [ricolin, mnaser]
solum: solum:
ptl: ptl:
name: Rong Zhu name: Rong Zhu
@@ -2884,6 +2926,7 @@ solum:
- openstack/solum-tempest-plugin - openstack/solum-tempest-plugin
liaisons: liaisons:
tc_members:
- jungleboyj - jungleboyj
- belmoreira - belmoreira
storlets: storlets:
@@ -2904,6 +2947,7 @@ storlets:
- openstack/storlets - openstack/storlets
liaisons: liaisons:
tc_members:
- jungleboyj - jungleboyj
- knikolla - knikolla
swift: swift:
@@ -2949,6 +2993,7 @@ swift:
- openstack/swift-bench - openstack/swift-bench
liaisons: liaisons:
tc_members:
- cloudnull - cloudnull
- diablo_rojo - diablo_rojo
tacker: tacker:
@@ -2980,7 +3025,8 @@ tacker:
repos: repos:
- openstack/tacker-specs - openstack/tacker-specs
liaisons: [gmann, knikolla] liaisons:
tc_members: [gmann, knikolla]
Telemetry: Telemetry:
ptl: ptl:
name: Matthias Runge name: Matthias Runge
@@ -3031,6 +3077,7 @@ Telemetry:
- openstack/telemetry-tempest-plugin - openstack/telemetry-tempest-plugin
liaisons: liaisons:
tc_members:
- cloudnull - cloudnull
- gmann - gmann
@@ -3169,6 +3216,7 @@ tripleo:
- openstack/tripleo-ha-utils - openstack/tripleo-ha-utils
liaisons: liaisons:
tc_members:
- diablo_rojo - diablo_rojo
- jungleboyj - jungleboyj
trove: trove:
@@ -3212,6 +3260,7 @@ trove:
- openstack/trove-tempest-plugin - openstack/trove-tempest-plugin
liaisons: liaisons:
tc_members:
- gmann - gmann
- diablo_rojo - diablo_rojo
vitrage: vitrage:
@@ -3263,6 +3312,7 @@ vitrage:
- openstack/xstatic-moment-timezone - openstack/xstatic-moment-timezone
liaisons: liaisons:
tc_members:
- belmoreira - belmoreira
- mugsie - mugsie
watcher: watcher:
@@ -3297,6 +3347,7 @@ watcher:
- openstack/watcher-dashboard - openstack/watcher-dashboard
liaisons: liaisons:
tc_members:
- mugsie - mugsie
- mnaser - mnaser
winstackers: winstackers:
@@ -3329,6 +3380,7 @@ winstackers:
- openstack/compute-hyperv - openstack/compute-hyperv
liaisons: liaisons:
tc_members:
- mnaser - mnaser
- jungleboyj - jungleboyj
zaqar: zaqar:
@@ -3368,7 +3420,8 @@ zaqar:
repos: repos:
- openstack/zaqar-ui - openstack/zaqar-ui
liaisons: [njohnston, evrardjp] liaisons:
tc_members: [njohnston, evrardjp]
zun: zun:
ptl: ptl:
name: Feng Shengqin name: Feng Shengqin
@@ -3394,5 +3447,6 @@ zun:
repos: repos:
- openstack/zun-ui - openstack/zun-ui
liaisons: liaisons:
tc_members:
- mugsie - mugsie
- diablo_rojo - diablo_rojo

View File

@@ -61,7 +61,8 @@ def main():
if not args.replace_all: if not args.replace_all:
for _, team in project_data.items(): for _, team in project_data.items():
for member in team.get('liaisons', []): proj_liaisons = team.get('liaisons', {})
for member in proj_liaisons.get('tc_members', []):
member_counts.update({member: 1}) member_counts.update({member: 1})
choices = [] choices = []
@@ -71,9 +72,10 @@ def main():
# person to a team twice. # person to a team twice.
for name, team in project_data.items(): for name, team in project_data.items():
liaisons = team.get('liaisons', []) proj_liaisons = team.get('liaisons', {})
liaisons = proj_liaisons.get('tc_members', [])
if args.remove_all: if args.remove_all:
team['liaisons'] = [] team['liaisons']['tc_members'] = []
continue continue
if args.replace_all: if args.replace_all:
liaisons = [] liaisons = []
@@ -84,7 +86,7 @@ def main():
choices.insert(0, next_choice) choices.insert(0, next_choice)
next_choice = choices.pop() next_choice = choices.pop()
liaisons.append(next_choice) liaisons.append(next_choice)
team['liaisons'] = liaisons team['liaisons']['tc_members'] = liaisons
projects.write_project_file(project_data, args.projects_file) projects.write_project_file(project_data, args.projects_file)