From 67f2923a527e7578fc681a53792087924ce38724 Mon Sep 17 00:00:00 2001 From: Martin Schuppert Date: Tue, 24 Feb 2026 10:40:31 +0100 Subject: [PATCH] [repo_setup] Fix git clone failure when using local filesystem paths The git module fails when cifmw_repo_setup_src points to a local path (e.g., in Zuul CI environments) and the source repository is in detached HEAD state. The module tries to resolve 'HEAD' from the source repo and fails with "pathspec 'None' did not match any file(s) known to git". This fix adds conditional logic to: - Use ansible.builtin.copy for local filesystem paths (starts with '/') - Use ansible.builtin.git with proper version parameter for git URLs Additionally, adds a new variable cifmw_repo_setup_git_ref to explicitly control which git branch, tag, or commit to checkout when cloning the repo-setup repository (defaults to 'main'). This allows the role to work in both Zuul CI (where repos are pre-checked out locally) and manual deployments (where git URLs are used). Co-Authored-By: Claude Sonnet 4.5 Signed-off-by: Martin Schuppert --- roles/repo_setup/README.md | 1 + roles/repo_setup/defaults/main.yml | 1 + roles/repo_setup/tasks/install.yml | 12 +++++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/roles/repo_setup/README.md b/roles/repo_setup/README.md index 6b7f41657f..2ccc9b0594 100644 --- a/roles/repo_setup/README.md +++ b/roles/repo_setup/README.md @@ -19,6 +19,7 @@ using `cifmw_repo_setup_src` role default var. * `cifmw_repo_setup_rdo_mirror`: (String) Address from which to install RDO packages. Defaults to `{{ cifmw_repo_setup_dlrn_uri }}`. * `cifmw_repo_setup_os_release`: (String) Operating system release. Defaults to `{{ ansible_distribution|lower }}`. * `cifmw_repo_setup_src`: (String) repo-setup repository location. Defaults to `https://github.com/openstack-k8s-operators/repo-setup`. +* `cifmw_repo_setup_git_ref`: (String) Git branch, tag, or commit to checkout when cloning repo-setup repository. Only applies when `cifmw_repo_setup_src` is a git URL. Defaults to `main`. * `cifmw_repo_setup_output`: (String) Repository files output. Defaults to `{{ cifmw_repo_setup_basedir }}/artifacts/repositories`. * `cifmw_repo_setup_additional_repos`: (String) Additional repos(ceph, deps) to enable. Defaults to `''`. * `cifmw_repo_setup_env`: (Dict) Environment variables to be passed to repo_setup cli . Defaults to `'{}'`. diff --git a/roles/repo_setup/defaults/main.yml b/roles/repo_setup/defaults/main.yml index 5929b16e41..c88cb828f6 100644 --- a/roles/repo_setup/defaults/main.yml +++ b/roles/repo_setup/defaults/main.yml @@ -28,6 +28,7 @@ cifmw_repo_setup_rdo_mirror: "{{ cifmw_repo_setup_dlrn_uri }}" cifmw_repo_setup_os_release: "{{ ansible_distribution | lower }}" cifmw_repo_setup_dist_major_version: "{{ ansible_distribution_major_version }}" cifmw_repo_setup_src: "https://github.com/openstack-k8s-operators/repo-setup" +cifmw_repo_setup_git_ref: "main" cifmw_repo_setup_output: "{{ cifmw_repo_setup_basedir }}/artifacts/repositories" cifmw_repo_setup_env: {} cifmw_repo_setup_additional_repos: '' diff --git a/roles/repo_setup/tasks/install.yml b/roles/repo_setup/tasks/install.yml index e47676adeb..a2a3f85003 100644 --- a/roles/repo_setup/tasks/install.yml +++ b/roles/repo_setup/tasks/install.yml @@ -18,11 +18,21 @@ - packages - bootstrap -- name: Get repo-setup repository # noqa: latest[git] +- name: Get repo-setup repository (from local path) + ansible.builtin.copy: + src: "{{ cifmw_repo_setup_src }}/" + dest: "{{ cifmw_repo_setup_basedir }}/tmp/repo-setup" + remote_src: true + mode: preserve + when: cifmw_repo_setup_src is match('^/') + +- name: Get repo-setup repository (from git URL) ansible.builtin.git: accept_hostkey: true dest: "{{ cifmw_repo_setup_basedir }}/tmp/repo-setup" repo: "{{ cifmw_repo_setup_src }}" + version: "{{ cifmw_repo_setup_git_ref }}" + when: cifmw_repo_setup_src is not match('^/') - name: Initialize python venv and install requirements ansible.builtin.pip: