Implement distributed leadership in tools and schema

We have resolution merged for distributed leadership[1] and
there are few projects want to adopt this model in Wallaby cycle,
first one is oslo[2].

This commit add the support of new model in governance tooling,
doc and, schema. Basically making changes to fill the distributed
leadership liaisons and displaing those in projects rst.
Below are the changes done:

- Removed 'PTL' field to be mandatory instead making either 'PTL' or
  'leadership_type: distributed' field as mandatory.
- To avoid confustion with existing liasion field, changed TC
  liaison field name from 'liaisons' to sub field named 'tc_members'
- Extended the existing liaison field for distributed leadersip
  liaisons.

It will looks like below:
  liaisons:
    tc_members:
      - zaneb
      - ttx
    release:
      - name: Hervé Beraud
        irc: hberaud
        email: hberaud@redhat.com
      - name: Daniel Bengtsson
        irc: damani
        email: dbengt@redhat.com
    tact-sig:
      - name: Hervé Beraud
        irc: hberaud
        email: hberaud@redhat.com
    security:
      - name: Daniel Bengtsson
        irc: damani
        email: dbengt@redhat.com

and on site:

TC Members Liaisons
ricolin, belmoreira

Release Liaisons
Hervé Beraud (hberaud) <hraud@redhat.com>, Daniel Bengtsson (damani) <dbengt@redhat.com>

[1] https://governance.openstack.org/tc/resolutions/20200803-distributed-project-leadership.html
[2] https://review.opendev.org/#/c/757906

Change-Id: If96915a16a8746aed6f0cb844c53ad61a300c234
This commit is contained in:
Ghanshyam Mann 2020-10-13 18:20:38 -05:00
parent b4b27b39eb
commit c387ba5f18
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,7 +43,11 @@ 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': ''})
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') irc_channel = info.get('irc-channel')
if irc_channel: if irc_channel:
yield ':IRC Channel: `#%s <%s%s>`__' % ( yield ':IRC Channel: `#%s <%s%s>`__' % (
@ -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:
- ptl - required:
- deliverables - ptl
- url - deliverables
- mission - url
- 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: "array" type: "object"
uniqueItems: true properties:
items: tc_members:
type: "string" 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: 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:
- zaneb tc_members:
- ttx - 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: tags:
- team:diverse-affiliation - team:diverse-affiliation
deliverables: deliverables:

View File

@ -24,8 +24,9 @@ adjutant:
repos: repos:
- openstack/python-adjutantclient - openstack/python-adjutantclient
liaisons: liaisons:
- knikolla tc_members:
- mnaser - knikolla
- mnaser
barbican: barbican:
ptl: ptl:
name: Douglas Mendizábal name: Douglas Mendizábal
@ -74,8 +75,9 @@ barbican:
tags: tags:
- vulnerability:managed - vulnerability:managed
liaisons: liaisons:
- knikolla tc_members:
- cloudnull - knikolla
- cloudnull
blazar: blazar:
ptl: ptl:
name: Pierre Riteau name: Pierre Riteau
@ -110,8 +112,9 @@ blazar:
repos: repos:
- openstack/python-blazarclient - openstack/python-blazarclient
liaisons: liaisons:
- mugsie tc_members:
- belmoreira - mugsie
- belmoreira
cinder: cinder:
ptl: ptl:
name: Brian Rosmaita name: Brian Rosmaita
@ -164,8 +167,9 @@ cinder:
- vulnerability:managed - vulnerability:managed
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
- cloudnull tc_members:
- mugsie - cloudnull
- mugsie
cloudkitty: cloudkitty:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@ -199,8 +203,9 @@ cloudkitty:
repos: repos:
- openstack/cloudkitty-tempest-plugin - openstack/cloudkitty-tempest-plugin
liaisons: liaisons:
- evrardjp tc_members:
- knikolla - evrardjp
- knikolla
cyborg: cyborg:
ptl: ptl:
name: Yumeng Bao name: Yumeng Bao
@ -229,8 +234,9 @@ cyborg:
repos: repos:
- openstack/cyborg-tempest-plugin - openstack/cyborg-tempest-plugin
liaisons: liaisons:
- njohnston tc_members:
- cloudnull - njohnston
- cloudnull
designate: designate:
ptl: ptl:
name: Michael Johnson name: Michael Johnson
@ -272,8 +278,9 @@ designate:
tags: tags:
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
- evrardjp tc_members:
- jungleboyj - evrardjp
- jungleboyj
ec2-api: ec2-api:
ptl: ptl:
name: Andrey Pavlov name: Andrey Pavlov
@ -292,8 +299,9 @@ ec2-api:
repos: repos:
- openstack/ec2api-tempest-plugin - openstack/ec2api-tempest-plugin
liaisons: liaisons:
- jungleboyj tc_members:
- mnaser - jungleboyj
- mnaser
freezer: freezer:
ptl: ptl:
name: cai hui name: cai hui
@ -328,8 +336,9 @@ freezer:
repos: repos:
- openstack/python-freezerclient - openstack/python-freezerclient
liaisons: liaisons:
- ricolin tc_members:
- jungleboyj - ricolin
- jungleboyj
glance: glance:
ptl: ptl:
name: Abhishek Kekane name: Abhishek Kekane
@ -370,8 +379,9 @@ glance:
- vulnerability:managed - vulnerability:managed
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
- mnaser tc_members:
- njohnston - mnaser
- njohnston
heat: heat:
ptl: ptl:
name: Rico Lin name: Rico Lin
@ -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,8 +560,9 @@ horizon:
repos: repos:
- openstack/xstatic-spin - openstack/xstatic-spin
liaisons: liaisons:
- mnaser tc_members:
- mugsie - mnaser
- mugsie
ironic: ironic:
ptl: ptl:
name: Julia Kreger name: Julia Kreger
@ -656,8 +668,9 @@ ironic:
email: jay@jvf.cc email: jay@jvf.cc
expires-in: July 2019 expires-in: July 2019
liaisons: liaisons:
- mnaser tc_members:
- knikolla - mnaser
- knikolla
karbor: karbor:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@ -680,8 +693,9 @@ karbor:
repos: repos:
- openstack/python-karborclient - openstack/python-karborclient
liaisons: liaisons:
- mugsie tc_members:
- belmoreira - mugsie
- belmoreira
keystone: keystone:
ptl: ptl:
name: Kristi Nikolla name: Kristi Nikolla
@ -737,8 +751,9 @@ keystone:
repos: repos:
- openstack/ldappool - openstack/ldappool
liaisons: liaisons:
- mnaser tc_members:
- knikolla - mnaser
- knikolla
kolla: kolla:
ptl: ptl:
name: Mark Goddard name: Mark Goddard
@ -768,8 +783,9 @@ kolla:
- openstack/kayobe-config - openstack/kayobe-config
- openstack/kayobe-config-dev - openstack/kayobe-config-dev
liaisons: liaisons:
- evrardjp tc_members:
- mugsie - evrardjp
- mugsie
kuryr: kuryr:
ptl: ptl:
name: Maysa de Macedo Souza name: Maysa de Macedo Souza
@ -797,8 +813,9 @@ kuryr:
repos: repos:
- openstack/kuryr-tempest-plugin - openstack/kuryr-tempest-plugin
liaisons: liaisons:
- belmoreira tc_members:
- njohnston - belmoreira
- njohnston
magnum: magnum:
ptl: ptl:
name: Spyros Trigazis name: Spyros Trigazis
@ -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,8 +921,9 @@ masakari:
repos: repos:
- openstack/masakari-dashboard - openstack/masakari-dashboard
liaisons: liaisons:
- evrardjp tc_members:
- cloudnull - evrardjp
- cloudnull
mistral: mistral:
ptl: ptl:
name: Renat Akhmerov name: Renat Akhmerov
@ -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,8 +1033,9 @@ monasca:
repos: repos:
- openstack/monasca-kibana-plugin - openstack/monasca-kibana-plugin
liaisons: liaisons:
- ricolin tc_members:
- belmoreira - ricolin
- belmoreira
murano: murano:
ptl: ptl:
name: Rong Zhu name: Rong Zhu
@ -1065,8 +1087,9 @@ murano:
repos: repos:
- openstack/murano-tempest-plugin - openstack/murano-tempest-plugin
liaisons: liaisons:
- cloudnull tc_members:
- njohnston - cloudnull
- njohnston
neutron: neutron:
ptl: ptl:
name: Sławek Kapłoński name: Sławek Kapłoński
@ -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,8 +1284,9 @@ octavia:
tags: tags:
- stable:follows-policy - stable:follows-policy
liaisons: liaisons:
- cloudnull tc_members:
- mugsie - cloudnull
- mugsie
OpenStack Charms: OpenStack Charms:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@ -1786,8 +1812,9 @@ OpenStack Charms:
repos: repos:
- openstack/charm-watcher-dashboard - openstack/charm-watcher-dashboard
liaisons: liaisons:
- evrardjp tc_members:
- gmann - evrardjp
- gmann
openstack-chef: openstack-chef:
ptl: ptl:
name: Lance Albertson name: Lance Albertson
@ -1881,8 +1908,9 @@ openstack-chef:
repos: repos:
- openstack/openstack-chef-specs - openstack/openstack-chef-specs
liaisons: liaisons:
- njohnston tc_members:
- ricolin - njohnston
- ricolin
OpenStack-Helm: OpenStack-Helm:
ptl: ptl:
name: Gage Hugo name: Gage Hugo
@ -1926,8 +1954,9 @@ OpenStack-Helm:
repos: repos:
- openstack/loci - openstack/loci
liaisons: liaisons:
- evrardjp tc_members:
- njohnston - evrardjp
- njohnston
OpenStackAnsible: OpenStackAnsible:
ptl: ptl:
name: Dmitriy Rabotyagov name: Dmitriy Rabotyagov
@ -2020,8 +2049,9 @@ OpenStackAnsible:
repos: repos:
- openstack/openstack-ansible-specs - openstack/openstack-ansible-specs
liaisons: liaisons:
- evrardjp tc_members:
- knikolla - evrardjp
- knikolla
OpenStackSDK: OpenStackSDK:
ptl: ptl:
name: Artem Goncharov name: Artem Goncharov
@ -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,8 +2356,9 @@ placement:
repos: repos:
- openstack/os-resource-classes - openstack/os-resource-classes
liaisons: liaisons:
- gmann tc_members:
- njohnston - gmann
- njohnston
Puppet OpenStack: Puppet OpenStack:
ptl: ptl:
name: Shengping Zhong name: Shengping Zhong
@ -2483,8 +2516,9 @@ Puppet OpenStack:
- openstack/puppet-zaqar - openstack/puppet-zaqar
liaisons: liaisons:
- evrardjp tc_members:
- ricolin - evrardjp
- ricolin
qinling: qinling:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@ -2508,8 +2542,9 @@ qinling:
- openstack/qinling-dashboard - openstack/qinling-dashboard
liaisons: liaisons:
- mugsie tc_members:
- jungleboyj - mugsie
- jungleboyj
Quality Assurance: Quality Assurance:
ptl: ptl:
name: Masayuki Igawa name: Masayuki Igawa
@ -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,8 +2676,9 @@ rally:
- openstack/performance-docs - openstack/performance-docs
liaisons: liaisons:
- knikolla tc_members:
- diablo_rojo - knikolla
- diablo_rojo
Release Management: Release Management:
ptl: ptl:
name: Hervé Beraud name: Hervé Beraud
@ -2670,8 +2707,9 @@ Release Management:
repos: repos:
- openstack/specs-cookiecutter - openstack/specs-cookiecutter
liaisons: liaisons:
- diablo_rojo tc_members:
- evrardjp - diablo_rojo
- evrardjp
requirements: requirements:
ptl: ptl:
name: Matthew Thode name: Matthew Thode
@ -2689,8 +2727,9 @@ requirements:
repos: repos:
- openstack/requirements - openstack/requirements
liaisons: liaisons:
- diablo_rojo tc_members:
- belmoreira - diablo_rojo
- belmoreira
sahara: sahara:
ptl: ptl:
name: Jeremy Freudberg name: Jeremy Freudberg
@ -2792,8 +2831,9 @@ sahara:
- openstack/sahara-specs - openstack/sahara-specs
liaisons: liaisons:
- gmann tc_members:
- njohnston - gmann
- njohnston
searchlight: searchlight:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@ -2825,8 +2865,9 @@ searchlight:
- openstack/searchlight-ui - openstack/searchlight-ui
liaisons: liaisons:
- mugsie tc_members:
- belmoreira - mugsie
- belmoreira
senlin: senlin:
ptl: ptl:
name: APPOINTMENT NEEDED name: APPOINTMENT NEEDED
@ -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,8 +2926,9 @@ solum:
- openstack/solum-tempest-plugin - openstack/solum-tempest-plugin
liaisons: liaisons:
- jungleboyj tc_members:
- belmoreira - jungleboyj
- belmoreira
storlets: storlets:
ptl: ptl:
name: Takashi Kajinami name: Takashi Kajinami
@ -2904,8 +2947,9 @@ storlets:
- openstack/storlets - openstack/storlets
liaisons: liaisons:
- jungleboyj tc_members:
- knikolla - jungleboyj
- knikolla
swift: swift:
ptl: ptl:
name: Tim Burke name: Tim Burke
@ -2949,8 +2993,9 @@ swift:
- openstack/swift-bench - openstack/swift-bench
liaisons: liaisons:
- cloudnull tc_members:
- diablo_rojo - cloudnull
- diablo_rojo
tacker: tacker:
ptl: ptl:
name: Yasufumi Ogawa name: Yasufumi Ogawa
@ -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: Rong Zhu name: Rong Zhu
@ -3031,8 +3077,9 @@ Telemetry:
- openstack/telemetry-tempest-plugin - openstack/telemetry-tempest-plugin
liaisons: liaisons:
- cloudnull tc_members:
- gmann - cloudnull
- gmann
tripleo: tripleo:
ptl: ptl:
@ -3169,8 +3216,9 @@ tripleo:
- openstack/tripleo-ha-utils - openstack/tripleo-ha-utils
liaisons: liaisons:
- diablo_rojo tc_members:
- jungleboyj - diablo_rojo
- jungleboyj
trove: trove:
ptl: ptl:
name: Lingxian Kong name: Lingxian Kong
@ -3212,8 +3260,9 @@ trove:
- openstack/trove-tempest-plugin - openstack/trove-tempest-plugin
liaisons: liaisons:
- gmann tc_members:
- diablo_rojo - gmann
- diablo_rojo
vitrage: vitrage:
ptl: ptl:
name: Eyal Bar-Ilan name: Eyal Bar-Ilan
@ -3263,8 +3312,9 @@ vitrage:
- openstack/xstatic-moment-timezone - openstack/xstatic-moment-timezone
liaisons: liaisons:
- belmoreira tc_members:
- mugsie - belmoreira
- mugsie
watcher: watcher:
ptl: ptl:
name: canwei li name: canwei li
@ -3297,8 +3347,9 @@ watcher:
- openstack/watcher-dashboard - openstack/watcher-dashboard
liaisons: liaisons:
- mugsie tc_members:
- mnaser - mugsie
- mnaser
winstackers: winstackers:
ptl: ptl:
name: Lucian Petrut name: Lucian Petrut
@ -3329,8 +3380,9 @@ winstackers:
- openstack/compute-hyperv - openstack/compute-hyperv
liaisons: liaisons:
- mnaser tc_members:
- jungleboyj - mnaser
- jungleboyj
zaqar: zaqar:
ptl: ptl:
name: wang hao name: wang hao
@ -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:
- mugsie tc_members:
- diablo_rojo - mugsie
- 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)