d76f051d22
Manage project creation via yaml files. Also, Modify the manage_projects scripts to configure Gerrit project ACLs. This change expects the project yaml to exist. The change will clone the project for the localhost Gerrit install. It will then checkout the meta/config ref, copy the ACL config file into the repo, commit, and push to the origin. The ACL config location should be specified in the projects.yaml file with the acl_config key. For this to work the ACLs will need to be copied by Puppet from Puppet to the Gerrit host. Add the file resource to do this as well. Change-Id: I15a1ec13b381dce3c115c01c21f404ab79e72cc4 Reviewed-on: https://review.openstack.org/15352 Reviewed-by: Jeremy Stanley <fungi@yuggoth.org> Approved: Monty Taylor <mordred@inaugust.com> Reviewed-by: Monty Taylor <mordred@inaugust.com> Tested-by: Jenkins
82 lines
2.7 KiB
Python
Executable File
82 lines
2.7 KiB
Python
Executable File
#! /usr/bin/env python
|
|
# Copyright (C) 2011 OpenStack, LLC.
|
|
#
|
|
# 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.
|
|
|
|
# run_mirrors reads a project config file called projects.yaml
|
|
# It should look like:
|
|
|
|
# - project: PROJECT_NAME
|
|
|
|
import logging
|
|
import os
|
|
import subprocess
|
|
import shlex
|
|
import yaml
|
|
|
|
def run_command(cmd, status=False, env={}):
|
|
cmd_list = shlex.split(str(cmd))
|
|
newenv = os.environ
|
|
newenv.update(env)
|
|
p = subprocess.Popen(cmd_list, stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT, env=newenv)
|
|
(out, nothing) = p.communicate()
|
|
if status:
|
|
return (p.returncode, out.strip())
|
|
return out.strip()
|
|
|
|
|
|
def run_command_status(cmd, env={}):
|
|
return run_command(cmd, True, env)
|
|
|
|
|
|
logging.basicConfig(level=logging.ERROR)
|
|
|
|
PROJECTS_YAML = os.environ.get('PROJECTS_YAML',
|
|
'/etc/openstackci/projects.yaml')
|
|
PIP_TEMP_DOWNLOAD = os.environ.get('PIP_TEMP_DOWNLOAD',
|
|
'/var/lib/pip-download')
|
|
GIT_SOURCE = os.environ.get('GIT_SOURCE', 'https://github.com')
|
|
pip_command = '/usr/local/bin/pip install -M -U -I --exists-action=w ' \
|
|
'--no-install %s'
|
|
|
|
run_command(pip_command % "pip")
|
|
|
|
(defaults, config) = [config for config in yaml.load_all(open(PROJECTS_YAML))]
|
|
|
|
for section in config:
|
|
project = section['project']
|
|
|
|
os.chdir(PIP_TEMP_DOWNLOAD)
|
|
short_project = project.split('/')[1]
|
|
if not os.path.isdir(short_project):
|
|
run_command("git clone %s/%s.git %s" % (GIT_SOURCE, project,
|
|
short_project))
|
|
os.chdir(short_project)
|
|
run_command("git fetch origin")
|
|
|
|
for branch in run_command("git branch -a").split("\n"):
|
|
branch = branch.strip()
|
|
if (not branch.startswith("remotes/origin")
|
|
or "origin/HEAD" in branch):
|
|
continue
|
|
run_command("git reset --hard %s" % branch)
|
|
run_command("git clean -x -f -d -q")
|
|
print("*********************")
|
|
print("Fetching pip requires for %s:%s" % (project, branch))
|
|
for requires_file in ("tools/pip-requires", "tools/test-requires"):
|
|
if os.path.exists(requires_file):
|
|
stanza = "-r %s" % requires_file
|
|
run_command(pip_command % stanza)
|
|
|