I have an Ansible 2.9.27 and I am trying to add upstream remote for git repositories which I previously cloned with Ansible. Let's assume that already cloned repositories are located in /home/user/Documents/github/
directory and I want to add upstream remote for them (git remote add upstream
for each repo).
The task looks like this:
- name: Add remote upstream to github projects
# TODO: how to add remote with git module?
command: git remote add upstream [email protected]:{{ git_user }}/{{ item }}.git
changed_when: false
args:
chdir: /home/user/Documents/github/{{ item }}
loop: "{{ github_repos }}"
The issue is that ansible-lint doesn't like using command
instead of git
module:
WARNING Listing 1 violation(s) that are fatal
command-instead-of-module: git used in place of git module
tasks/github.yaml:15 Task/Handler: Add remote upstream to github projects
What I need to do to add remote upstream for these repositories with git
module?
CodePudding user response:
Since what you want to achieve is not (yet...) taken in charge by the git
module, this is a very legitimate use of command
.
In such cases, it is possible to silence the specific rule in ansible lint for that specific task.
To go a bit further, your changed_when: false
clause looks a bit like a quick and dirty fix to silence the no-changed-when
rule and can be enhanced in conjunction with a failed_when
clause to detect cases where the remote already exists.
Here is how I would write that task to be idempotent, documented and passing all needed lint rules:
- name: Add remote upstream to github projects
# Git module does not know how to add remotes (yet...)
# Using command and silencing corresponding ansible-lint rule
# noqa command-instead-of-module
command:
cmd: git remote add upstream [email protected]:{{ git_user }}/{{ item }}.git
chdir: /home/user/Documents/github/{{ item }}
register: add_result
changed_when: add_result.rc == 0
failed_when:
- add_result.rc != 0
- add_result.stderr | default('') is not search("remote .* already exists")
loop: "{{ github_repos }}"