project-config/nodepool/elements/openstack-repos/extra-data.d/50-create-repo-list

80 lines
2.5 KiB
Python
Executable File

#!/usr/bin/env python
# Copyright (C) 2011-2013 OpenStack Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
#
# See the License for the specific language governing permissions and
# limitations under the License.
from __future__ import print_function
import os
import yaml
from six.moves.urllib.request import urlopen
from six.moves.urllib.error import URLError
URL = ('https://git.openstack.org/cgit/openstack-infra/project-config/'
'plain/gerrit/projects.yaml')
TMP_HOOKS_PATH=os.environ['TMP_HOOKS_PATH']
PROJECTS_REPOS=os.path.join(TMP_HOOKS_PATH, 'source-repository-projects-yaml')
GIT_BASE=os.environ.get('GIT_BASE', 'git://git.openstack.org')
CUSTOM_PROJECTS_LIST_URL=os.environ.get('DIB_CUSTOM_PROJECTS_LIST_URL')
def get_project_list(url):
try:
projects = []
for f in yaml.load(urlopen(url)):
# Skip repos that are inactive
project = f['project']
dirname = os.path.dirname(project)
if 'attic' in dirname or dirname == 'stackforge':
continue
# Skip the /deb- git repo copies
if '/deb-' in project:
continue
acl = f.get('acl-config')
# Ignore retired repositories
if acl and os.path.basename(acl) == 'retired.config':
continue
projects.append(project)
return projects
except URLError:
print("Could not open project list url: '%s'" % url)
raise
def main():
projects = []
if CUSTOM_PROJECTS_LIST_URL:
projects = get_project_list(CUSTOM_PROJECTS_LIST_URL)
if not projects:
projects = get_project_list(URL)
with open(PROJECTS_REPOS, 'w') as projects_list:
for project in projects:
args = dict(
name=os.path.basename(project),
location=os.path.join('/opt/git', project),
url='%s/%s.git' % (GIT_BASE, project),
ref='*')
projects_list.write("%(name)s git %(location)s "
"%(url)s %(ref)s\n" % args)
if __name__ == '__main__':
main()