Monty Taylor d76f051d22 Attempt to more fully manage project creation.
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
2012-11-14 01:18:23 +00:00

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)