从剧本执行期间克隆的git repo运行playbook

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从剧本执行期间克隆的git repo运行playbook相关的知识,希望对你有一定的参考价值。

我似乎无法从ansible文档中弄清楚这一点。

我有一个我想在各种环境中重用的剧本X.像任何优秀的软件工程师一样,我把它放在源代码控制(git)的repo中。所以我希望我的其他剧本能够抓住并包含它,我该如何实现呢?我可以用X作为子树包含repo,但这并不理想。

假设我有一个git repo A有一个ansible playbook X.我也有一个git repo B有一个ansible playbook Y.我想要的是在执行X,克隆B然后运行playbook Y.这似乎就像那种应该很容易google的东西,以及它不会让我想知道我是否会这么做错。

这是我在playbook X中尝试的内容:

- name: Clone B
      git:
        repo: 'http://{{ git_user }}:{{ git_pass }}@somehost/B.git'
        dest: /tmp/B

- name: Run Y
      include_tasks: /tmp/B/Y.yml
      remote_src: yes

即使我有remote_src设置为是它它一直告诉我它无法在Ansible控制器上找到/tmp/B/Y.yml,所以它似乎在我的本地盒而不是遥控器上查找。 Repo B被正确克隆到遥控器上的/tmp(通过ssh确认)。

答案

这可以通过gitfetchinclude_tasks模块的组合来实现:

- name: Clone B on the remote
  git:
    repo: 'http://{{ git_user }}:{{ git_pass }}@somehost/B.git'
    dest: /tmp/B

# This copies the specified file from the remote to the current dir
- name: Fetch yml from remote
  fetch:
    src: /tmp/B/Y.yml
    dest: ./
    flat: yes

- name: Run Y
  include_tasks: Y.yml

请注意,Y.yml必须是一个简单的任务列表。因为我也希望能够独立运行它并且包含在repo A的项目中,所以我在它的repo中添加了一个playbook,它包含并运行它。

另外参考我的第一种方法的误导性错误信息(参见问题的评论),它看起来像是already patched it

以上是关于从剧本执行期间克隆的git repo运行playbook的主要内容,如果未能解决你的问题,请参考以下文章

ssh克隆不克隆git中的repo

如何将一些文件从一个 git repo 移动到另一个(不是克隆),保留历史记录

如何从服务器端口 9418 克隆存储库?

用于克隆私有 git repo 的 Dockerfile

Git 克隆操作

怎么从gitlab中克隆分支代码