From 892596373f3960ee198ee9f2a3bb5465912db5b9 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Mon, 15 Jul 2019 15:18:45 -0700 Subject: [PATCH] Improve idempotency of gitea-git-repos When determining whether a project exists, we need to compare to just the name, not the full data structure about the project. Also, if the project exists, don't try to create it again; that will return a 409 conflict error. Change-Id: I0b8affac96b17fa73253082b1b87d4c00bf23463 --- .../library/gitea_create_repos.py | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/playbooks/roles/gitea-git-repos/library/gitea_create_repos.py b/playbooks/roles/gitea-git-repos/library/gitea_create_repos.py index 2681985716..06299b43ba 100755 --- a/playbooks/roles/gitea-git-repos/library/gitea_create_repos.py +++ b/playbooks/roles/gitea-git-repos/library/gitea_create_repos.py @@ -86,22 +86,24 @@ class Gitea(object): self.log("Added gerrit to team:", org) def get_org_repo_list(self, org): - return self.get('/api/v1/orgs/{org}/repos'.format(org=org)).json() + return [x['full_name'] for x in + self.get('/api/v1/orgs/{org}/repos'.format(org=org)).json()] def get_csrf_token(self): resp = self.get('/') return urllib.parse.unquote(resp.cookies.get('_csrf')) - def make_gitea_project(self, project, csrf_token): + def make_gitea_project(self, project, csrf_token, create_project=True): org, repo = project['project'].split('/', 1) - resp = self.post( - '/api/v1/org/{org}/repos'.format(org=org), - json=dict( - auto_init=True, - description=project.get('description', '')[:255], - name=repo, - private=False, - readme='Default')) + if create_project: + resp = self.post( + '/api/v1/org/{org}/repos'.format(org=org), + json=dict( + auto_init=True, + description=project.get('description', '')[:255], + name=repo, + private=False, + readme='Default')) self.log("Created repo:", project['project']) if project.get('use-storyboard'): external_tracker_url = SB_REPO.format(org=org, repo=repo) @@ -158,8 +160,12 @@ class Gitea(object): csrf_token = self.get_csrf_token() for project in self.projects: - if project['project'] not in gitea_repos or self.always_update: - self.make_gitea_project(project, csrf_token) + if project['project'] in gitea_repos: + create = False + else: + create = True + if create or self.always_update: + self.make_gitea_project(project, csrf_token, create) def ansible_main():