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
commit 8e9ef659fb
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)
liaisons = {}
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:
liaisons[liaison].extend([project_name])
except KeyError:

View File

@ -43,7 +43,11 @@ def _team_to_rst(name, info):
yield ''
yield ':Home Page: ' + info.get('url', '')
ptl = info.get('ptl', {'name': '', 'irc': '', 'email': ''})
yield ':PTL: %(name)s (``%(irc)s``) <%(email)s>' % ptl
leadership_type = info.get('leadership_type')
if leadership_type:
yield ':Leadership Type: ' + leadership_type
else:
yield ':PTL: %(name)s (``%(irc)s``) <%(email)s>' % ptl
irc_channel = info.get('irc-channel')
if irc_channel:
yield ':IRC Channel: `#%s <%s%s>`__' % (
@ -53,7 +57,50 @@ def _team_to_rst(name, info):
yield ':Service: ' + service
liaisons = info.get('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 ''
mission = info.get('mission', '').rstrip()
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"
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:
# Do not allow any properties not defined here. This lets us catch
# typos.
additionalProperties: false
required:
- ptl
- deliverables
- url
- mission
oneOf:
- required:
- ptl
- deliverables
- url
- mission
- required:
- leadership_type
- liaisons
- deliverables
- url
- mission
properties:
ptl:
type: "object"
@ -27,6 +53,10 @@ additionalProperties:
email:
type: "string"
format: "email"
leadership_type:
type: "string"
enum:
- distributed
appointed:
type: "array"
items:
@ -38,10 +68,25 @@ additionalProperties:
url:
type: "string"
liaisons:
type: "array"
uniqueItems: true
items:
type: "string"
type: "object"
properties:
tc_members:
type: "array"
items:
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:
type: "string"
deliverables:

View File

@ -32,8 +32,24 @@ Release Management:
their own releases.
url: https://wiki.openstack.org/wiki/Release_Management
liaisons:
- zaneb
- ttx
tc_members:
- zaneb
- 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:
- team:diverse-affiliation
deliverables:

View File

@ -24,8 +24,9 @@ adjutant:
repos:
- openstack/python-adjutantclient
liaisons:
- knikolla
- mnaser
tc_members:
- knikolla
- mnaser
barbican:
ptl:
name: Douglas Mendizábal
@ -74,8 +75,9 @@ barbican:
tags:
- vulnerability:managed
liaisons:
- knikolla
- cloudnull
tc_members:
- knikolla
- cloudnull
blazar:
ptl:
name: Pierre Riteau
@ -110,8 +112,9 @@ blazar:
repos:
- openstack/python-blazarclient
liaisons:
- mugsie
- belmoreira
tc_members:
- mugsie
- belmoreira
cinder:
ptl:
name: Brian Rosmaita
@ -164,8 +167,9 @@ cinder:
- vulnerability:managed
- stable:follows-policy
liaisons:
- cloudnull
- mugsie
tc_members:
- cloudnull
- mugsie
cloudkitty:
ptl:
name: APPOINTMENT NEEDED
@ -199,8 +203,9 @@ cloudkitty:
repos:
- openstack/cloudkitty-tempest-plugin
liaisons:
- evrardjp
- knikolla
tc_members:
- evrardjp
- knikolla
cyborg:
ptl:
name: Yumeng Bao
@ -229,8 +234,9 @@ cyborg:
repos:
- openstack/cyborg-tempest-plugin
liaisons:
- njohnston
- cloudnull
tc_members:
- njohnston
- cloudnull
designate:
ptl:
name: Michael Johnson
@ -272,8 +278,9 @@ designate:
tags:
- stable:follows-policy
liaisons:
- evrardjp
- jungleboyj
tc_members:
- evrardjp
- jungleboyj
ec2-api:
ptl:
name: Andrey Pavlov
@ -292,8 +299,9 @@ ec2-api:
repos:
- openstack/ec2api-tempest-plugin
liaisons:
- jungleboyj
- mnaser
tc_members:
- jungleboyj
- mnaser
freezer:
ptl:
name: cai hui
@ -328,8 +336,9 @@ freezer:
repos:
- openstack/python-freezerclient
liaisons:
- ricolin
- jungleboyj
tc_members:
- ricolin
- jungleboyj
glance:
ptl:
name: Abhishek Kekane
@ -370,8 +379,9 @@ glance:
- vulnerability:managed
- stable:follows-policy
liaisons:
- mnaser
- njohnston
tc_members:
- mnaser
- njohnston
heat:
ptl:
name: Rico Lin
@ -429,7 +439,8 @@ heat:
tosca-parser:
repos:
- openstack/tosca-parser
liaisons: [ricolin, jungleboyj]
liaisons:
tc_members: [ricolin, jungleboyj]
horizon:
ptl:
name: Ivan Kolodyazhny
@ -549,8 +560,9 @@ horizon:
repos:
- openstack/xstatic-spin
liaisons:
- mnaser
- mugsie
tc_members:
- mnaser
- mugsie
ironic:
ptl:
name: Julia Kreger
@ -656,8 +668,9 @@ ironic:
email: jay@jvf.cc
expires-in: July 2019
liaisons:
- mnaser
- knikolla
tc_members:
- mnaser
- knikolla
karbor:
ptl:
name: APPOINTMENT NEEDED
@ -680,8 +693,9 @@ karbor:
repos:
- openstack/python-karborclient
liaisons:
- mugsie
- belmoreira
tc_members:
- mugsie
- belmoreira
keystone:
ptl:
name: Kristi Nikolla
@ -737,8 +751,9 @@ keystone:
repos:
- openstack/ldappool
liaisons:
- mnaser
- knikolla
tc_members:
- mnaser
- knikolla
kolla:
ptl:
name: Mark Goddard
@ -768,8 +783,9 @@ kolla:
- openstack/kayobe-config
- openstack/kayobe-config-dev
liaisons:
- evrardjp
- mugsie
tc_members:
- evrardjp
- mugsie
kuryr:
ptl:
name: Maysa de Macedo Souza
@ -797,8 +813,9 @@ kuryr:
repos:
- openstack/kuryr-tempest-plugin
liaisons:
- belmoreira
- njohnston
tc_members:
- belmoreira
- njohnston
magnum:
ptl:
name: Spyros Trigazis
@ -827,7 +844,8 @@ magnum:
python-magnumclient:
repos:
- openstack/python-magnumclient
liaisons: [ricolin, belmoreira]
liaisons:
tc_members: [ricolin, belmoreira]
manila:
ptl:
name: Goutham Pacha Ravi
@ -870,7 +888,8 @@ manila:
python-manilaclient:
repos:
- openstack/python-manilaclient
liaisons: [gmann, cloudnull]
liaisons:
tc_members: [gmann, cloudnull]
masakari:
ptl:
name: Radosław Piliszek
@ -902,8 +921,9 @@ masakari:
repos:
- openstack/masakari-dashboard
liaisons:
- evrardjp
- cloudnull
tc_members:
- evrardjp
- cloudnull
mistral:
ptl:
name: Renat Akhmerov
@ -940,7 +960,8 @@ mistral:
mistral-extra:
repos:
- openstack/mistral-extra
liaisons: [ricolin, jungleboyj]
liaisons:
tc_members: [ricolin, jungleboyj]
monasca:
ptl:
name: Martin Chacon Piza
@ -1012,8 +1033,9 @@ monasca:
repos:
- openstack/monasca-kibana-plugin
liaisons:
- ricolin
- belmoreira
tc_members:
- ricolin
- belmoreira
murano:
ptl:
name: Rong Zhu
@ -1065,8 +1087,9 @@ murano:
repos:
- openstack/murano-tempest-plugin
liaisons:
- cloudnull
- njohnston
tc_members:
- cloudnull
- njohnston
neutron:
ptl:
name: Sławek Kapłoński
@ -1164,7 +1187,8 @@ neutron:
os-ken:
repos:
- openstack/os-ken
liaisons: [njohnston, mnaser]
liaisons:
tc_members: [njohnston, mnaser]
nova:
ptl:
name: Balazs Gibizer
@ -1204,7 +1228,8 @@ nova:
os-vif:
repos:
- openstack/os-vif
liaisons: [gmann, cloudnull]
liaisons:
tc_members: [gmann, cloudnull]
octavia:
ptl:
name: APPOINTMENT NEEDED
@ -1259,8 +1284,9 @@ octavia:
tags:
- stable:follows-policy
liaisons:
- cloudnull
- mugsie
tc_members:
- cloudnull
- mugsie
OpenStack Charms:
ptl:
name: APPOINTMENT NEEDED
@ -1786,8 +1812,9 @@ OpenStack Charms:
repos:
- openstack/charm-watcher-dashboard
liaisons:
- evrardjp
- gmann
tc_members:
- evrardjp
- gmann
openstack-chef:
ptl:
name: Lance Albertson
@ -1881,8 +1908,9 @@ openstack-chef:
repos:
- openstack/openstack-chef-specs
liaisons:
- njohnston
- ricolin
tc_members:
- njohnston
- ricolin
OpenStack-Helm:
ptl:
name: Gage Hugo
@ -1926,8 +1954,9 @@ OpenStack-Helm:
repos:
- openstack/loci
liaisons:
- evrardjp
- njohnston
tc_members:
- evrardjp
- njohnston
OpenStackAnsible:
ptl:
name: Dmitriy Rabotyagov
@ -2020,8 +2049,9 @@ OpenStackAnsible:
repos:
- openstack/openstack-ansible-specs
liaisons:
- evrardjp
- knikolla
tc_members:
- evrardjp
- knikolla
OpenStackSDK:
ptl:
name: Artem Goncharov
@ -2075,7 +2105,8 @@ OpenStackSDK:
- openstack/shade
tags:
- assert:follows-standard-deprecation
liaisons: [diablo_rojo, cloudnull]
liaisons:
tc_members: [diablo_rojo, cloudnull]
oslo:
ptl:
name: APPOINTMENT NEEDED
@ -2292,7 +2323,8 @@ oslo:
repos:
- openstack/whereto
liaisons: [ricolin, belmoreira]
liaisons:
tc_members: [ricolin, belmoreira]
placement:
ptl:
name: APPOINTMENT NEEDED
@ -2324,8 +2356,9 @@ placement:
repos:
- openstack/os-resource-classes
liaisons:
- gmann
- njohnston
tc_members:
- gmann
- njohnston
Puppet OpenStack:
ptl:
name: Shengping Zhong
@ -2483,8 +2516,9 @@ Puppet OpenStack:
- openstack/puppet-zaqar
liaisons:
- evrardjp
- ricolin
tc_members:
- evrardjp
- ricolin
qinling:
ptl:
name: APPOINTMENT NEEDED
@ -2508,8 +2542,9 @@ qinling:
- openstack/qinling-dashboard
liaisons:
- mugsie
- jungleboyj
tc_members:
- mugsie
- jungleboyj
Quality Assurance:
ptl:
name: Masayuki Igawa
@ -2612,7 +2647,8 @@ Quality Assurance:
release-management: none
repos:
- openstack/whitebox-tempest-plugin
liaisons: [gmann, jungleboyj]
liaisons:
tc_members: [gmann, jungleboyj]
rally:
ptl:
name: Andrey Kurilin
@ -2640,8 +2676,9 @@ rally:
- openstack/performance-docs
liaisons:
- knikolla
- diablo_rojo
tc_members:
- knikolla
- diablo_rojo
Release Management:
ptl:
name: Hervé Beraud
@ -2670,8 +2707,9 @@ Release Management:
repos:
- openstack/specs-cookiecutter
liaisons:
- diablo_rojo
- evrardjp
tc_members:
- diablo_rojo
- evrardjp
requirements:
ptl:
name: Matthew Thode
@ -2689,8 +2727,9 @@ requirements:
repos:
- openstack/requirements
liaisons:
- diablo_rojo
- belmoreira
tc_members:
- diablo_rojo
- belmoreira
sahara:
ptl:
name: Jeremy Freudberg
@ -2792,8 +2831,9 @@ sahara:
- openstack/sahara-specs
liaisons:
- gmann
- njohnston
tc_members:
- gmann
- njohnston
searchlight:
ptl:
name: APPOINTMENT NEEDED
@ -2825,8 +2865,9 @@ searchlight:
- openstack/searchlight-ui
liaisons:
- mugsie
- belmoreira
tc_members:
- mugsie
- belmoreira
senlin:
ptl:
name: APPOINTMENT NEEDED
@ -2852,7 +2893,8 @@ senlin:
repos:
- openstack/senlin-tempest-plugin
liaisons: [ricolin, mnaser]
liaisons:
tc_members: [ricolin, mnaser]
solum:
ptl:
name: Rong Zhu
@ -2884,8 +2926,9 @@ solum:
- openstack/solum-tempest-plugin
liaisons:
- jungleboyj
- belmoreira
tc_members:
- jungleboyj
- belmoreira
storlets:
ptl:
name: Takashi Kajinami
@ -2904,8 +2947,9 @@ storlets:
- openstack/storlets
liaisons:
- jungleboyj
- knikolla
tc_members:
- jungleboyj
- knikolla
swift:
ptl:
name: Tim Burke
@ -2949,8 +2993,9 @@ swift:
- openstack/swift-bench
liaisons:
- cloudnull
- diablo_rojo
tc_members:
- cloudnull
- diablo_rojo
tacker:
ptl:
name: Yasufumi Ogawa
@ -2980,7 +3025,8 @@ tacker:
repos:
- openstack/tacker-specs
liaisons: [gmann, knikolla]
liaisons:
tc_members: [gmann, knikolla]
Telemetry:
ptl:
name: Matthias Runge
@ -3031,8 +3077,9 @@ Telemetry:
- openstack/telemetry-tempest-plugin
liaisons:
- cloudnull
- gmann
tc_members:
- cloudnull
- gmann
tripleo:
ptl:
@ -3169,8 +3216,9 @@ tripleo:
- openstack/tripleo-ha-utils
liaisons:
- diablo_rojo
- jungleboyj
tc_members:
- diablo_rojo
- jungleboyj
trove:
ptl:
name: Lingxian Kong
@ -3212,8 +3260,9 @@ trove:
- openstack/trove-tempest-plugin
liaisons:
- gmann
- diablo_rojo
tc_members:
- gmann
- diablo_rojo
vitrage:
ptl:
name: Eyal Bar-Ilan
@ -3263,8 +3312,9 @@ vitrage:
- openstack/xstatic-moment-timezone
liaisons:
- belmoreira
- mugsie
tc_members:
- belmoreira
- mugsie
watcher:
ptl:
name: canwei li
@ -3297,8 +3347,9 @@ watcher:
- openstack/watcher-dashboard
liaisons:
- mugsie
- mnaser
tc_members:
- mugsie
- mnaser
winstackers:
ptl:
name: Lucian Petrut
@ -3329,8 +3380,9 @@ winstackers:
- openstack/compute-hyperv
liaisons:
- mnaser
- jungleboyj
tc_members:
- mnaser
- jungleboyj
zaqar:
ptl:
name: wang hao
@ -3368,7 +3420,8 @@ zaqar:
repos:
- openstack/zaqar-ui
liaisons: [njohnston, evrardjp]
liaisons:
tc_members: [njohnston, evrardjp]
zun:
ptl:
name: Feng Shengqin
@ -3394,5 +3447,6 @@ zun:
repos:
- openstack/zun-ui
liaisons:
- mugsie
- diablo_rojo
tc_members:
- mugsie
- diablo_rojo

View File

@ -61,7 +61,8 @@ def main():
if not args.replace_all:
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})
choices = []
@ -71,9 +72,10 @@ def main():
# person to a team twice.
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:
team['liaisons'] = []
team['liaisons']['tc_members'] = []
continue
if args.replace_all:
liaisons = []
@ -84,7 +86,7 @@ def main():
choices.insert(0, next_choice)
next_choice = choices.pop()
liaisons.append(next_choice)
team['liaisons'] = liaisons
team['liaisons']['tc_members'] = liaisons
projects.write_project_file(project_data, args.projects_file)