Create git repos on gitea servers before gerrit

We need to make sure repos are created in gitea before gerrit so
that we can safely create to gerrit and have it replicate.

Change-Id: If3efc7ed0d7995f1ef6f52cd2eefb9260193e020
Story: 2004627
Task: 29703
This commit is contained in:
Monty Taylor 2019-03-01 16:57:47 +00:00 committed by James E. Blair
parent 04077adf29
commit a53f333162
6 changed files with 146 additions and 0 deletions

View File

@ -20,6 +20,14 @@
facts:
project_config_ref: "{{ hostvars.localhost.gitinfo.after }}"
- hosts: "gitea:!disabled"
name: "Create repos on gitea servers"
strategy: free
max_fail_percentage: 1
roles:
- role: gitea-git-repos
project_config_ref: "{{ hostvars.localhost.gitinfo.after }}"
- hosts: "review:!disabled"
name: "Puppet-git: Run puppet on the Gerrit server"
strategy: free

View File

@ -0,0 +1 @@
Create git repos on a gitea server

View File

@ -0,0 +1,3 @@
gitea_url: https://localhost:3000
project_config_ref: master
project_config_dest: /tmp/project_config

View File

@ -0,0 +1,37 @@
- name: Clone project-config
git:
repo: https://git.openstack.org/openstack-infra/project-config
dest: "{{ project_config_dest }}"
version: "{{ project_config_ref }}"
- name: Get Gerrit project list
set_fact:
gerrit_projects: "{{ lookup('file', project_config_dest + '/gerrit/projects.yaml') | from_yaml }}"
- name: Parse Gerrit org list
set_fact:
gerrit_orgs: "{{ gerrit_projects | map(attribute='project') | map('regex_search', '^(.*?)/') | list | unique | select | map('regex_replace', '/', '') | list }}"
- name: debug
debug:
msg: "{{ gerrit_orgs }}"
- name: Get Gitea org list
# We assume that all the orgs we are interested in are owned by root
uri:
url: "{{ gitea_url }}/api/v1/user/orgs"
user: root
password: "{{ gitea_root_password }}"
force_basic_auth: true
validate_certs: false
status_code: 200
register: gitea_org_list
- name: Parse Gitea org list
set_fact:
gitea_orgs: "{{ gitea_org_list.json | map(attribute='username') | list }}"
- name: Create orgs
loop: "{{ gerrit_orgs }}"
loop_control:
loop_var: org
include_tasks: 'setup-org.yaml'
- name: Create repos
loop: "{{ gerrit_projects }}"
loop_control:
loop_var: project
include_tasks: 'setup-repo.yaml'

View File

@ -0,0 +1,56 @@
- name: Process org
debug:
msg: "Processing org {{ org }}"
- name: Create org
when: org not in gitea_orgs
uri:
url: "{{ gitea_url }}/api/v1/admin/users/root/orgs"
user: root
password: "{{ gitea_root_password }}"
force_basic_auth: true
validate_certs: false
status_code: 201
method: POST
body_format: json
body:
username: "{{ org }}"
- name: Get org team list
uri:
url: "{{ gitea_url }}/api/v1/orgs/{{ org }}/teams"
user: root
password: "{{ gitea_root_password }}"
force_basic_auth: true
validate_certs: false
status_code: 200
register: gitea_org_team_list
- name: Get org owners
uri:
url: "{{ gitea_url }}/api/v1/teams/{{ (gitea_org_team_list.json | selectattr('name', 'equalto', 'Owners') | list)[0]['id'] }}/members"
user: root
password: "{{ gitea_root_password }}"
force_basic_auth: true
validate_certs: false
status_code: 200
register: gitea_org_members
- name: Add Gerrit user to org
when: "'gerrit' not in gitea_org_members.json | map(attribute='username')"
uri:
url: "{{ gitea_url }}/api/v1/teams/{{ (gitea_org_team_list.json | selectattr('name', 'equalto', 'Owners') | list)[0]['id'] }}/members/gerrit"
user: root
password: "{{ gitea_root_password }}"
force_basic_auth: true
validate_certs: false
status_code: 204
method: PUT
- name: Get org repo list
uri:
url: "{{ gitea_url }}/api/v1/orgs/{{ org }}/repos"
user: root
password: "{{ gitea_root_password }}"
force_basic_auth: true
validate_certs: false
status_code: 200
register: gitea_org_repo_list
- name: Parse org repo list
set_fact:
gitea_org_repos: "{{ gitea_org_repo_list.json | map(attribute='name') | list }}"

View File

@ -0,0 +1,41 @@
- name: debug
debug:
msg: "{{ project }}"
- name: Parse project name
set_fact:
org: "{{ project.project | regex_replace('^(.*)/(.*)$', '\\1') }}"
repo: "{{ project.project | regex_replace('^(.*)/(.*)$', '\\2') }}"
- name: Create repo
when: repo not in gitea_org_repos
uri:
url: "{{ gitea_url }}/api/v1/org/{{ org }}/repos"
user: root
password: "{{ gitea_root_password }}"
force_basic_auth: true
validate_certs: false
status_code: 201
method: POST
body_format: json
body:
auto_init: false
description: "{{ project.description | default('') }}"
name: "{{ repo }}"
private: false
register: create_repo_result
- name: Get created repo id
when: "create_repo_result.json is defined"
set_fact:
repo_id: "{{ create_repo_result.json['id'] }}"
- name: Prepare sql query
when: "repo_id is defined"
set_fact:
sql_statement: |
start transaction;
delete from repo_unit where repo_id = {{ repo_id }} and `type` in (2, 3, 5, 7);
insert into repo_unit (repo_id, `type`, config, created_unix) values ({{ repo_id }}, 7, "{""ExternalTrackerURL"":""https://storyboard.openstack.org/#!/project/{{ org }}/{{ repo }}"",""ExternalTrackerFormat"":""https://storyboard.openstack.org/#!/story/{index}"",""ExternalTrackerStyle"":""""}", unix_timestamp());
commit;
- name: Adjust repo settings
when: "sql_statement is defined"
become: true
command: |
docker exec giteadocker_mariadb_1 bash -c 'mysql --password="$MYSQL_ROOT_PASSWORD" -e "{{ sql_statement }}" gitea'