代码之家  ›  专栏  ›  技术社区  ›  Jared Smith

在playbook执行期间从git repo克隆运行playbook

  •  0
  • Jared Smith  · 技术社区  · 6 年前

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

    假设我有一个git repo a,它有一个ansible的playbook X。我也有一个git repo B,它有一个ansible的playbook Y。我想要的是在X的执行过程中,克隆B,然后运行playbook Y。这似乎是谷歌应该很容易做的事情,而事实上它并没有让我怀疑我是不是把这一切都搞错了。

    以下是我在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 设置为“是”,它一直告诉我它找不到 /tmp/B/Y.yml /tmp 在远程(通过ssh确认)。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Jared Smith    6 年前

    这可以通过以下方法的组合来实现 git , fetch ,和 include_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 必须是一个简单的任务列表。因为我也希望能够运行它既独立和包括在项目回购 A

    另外,关于我的第一种方法的误导性错误消息(请参阅对问题的评论),看起来他们已经 already patched it .