将 `git remote add usptream` 添加到存储库但使用 Ansible

Add `git remote add usptream` to repositories but using Ansible

我有一个 Ansible 2.9.27,我正在尝试为我之前使用 Ansible 克隆的 git 存储库添加上游远程。假设已经克隆的存储库位于 /home/user/Documents/github/ 目录中,我想为它们添加上游远程(每个存储库 git remote add upstream)。

任务看起来像这样:

- name: Add remote upstream to github projects
  # TODO: how to add remote with git module?
  command: git remote add upstream git@github.com:{{ git_user }}/{{ item }}.git
  changed_when: false
  args:
    chdir: /home/user/Documents/github/{{ item }}
  loop: "{{ github_repos }}"

问题是 ansible-lint 不喜欢使用 command 而不是 git 模块:

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

我需要做什么才能使用 git 模块为这些存储库添加远程上游?

由于 git module 尚未(还...)负责您想要实现的目标,因此这是对 command.

的非常合法的使用

在这种情况下,可以silence the specific rule in ansible lint for that specific task

更进一步,您的 changed_when: false 子句看起来有点像一种快速而肮脏的修复方法,可以使 no-changed-when 规则静音,并且可以与 failed_when 子句结合使用得到增强检测遥控器已经存在的情况。

以下是我如何编写该任务以实现幂等、记录并传递所有需要的 lint 规则:

- 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 git@github.com:{{ 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 }}"