【问题标题】:How can I run an ansible role locally?如何在本地运行 ansible 角色?
【发布时间】:2021-05-07 16:13:16
【问题描述】:

我想在本地构建一个 docker 镜像并部署它,以便可以将它拉到我要部署到的远程服务器上。为此,我首先需要检查要构建的 git 中的代码。

我有一个现有的角色,它安装 git,设置从我们的 repo 中读取的密钥等。我想在本地运行这个角色来检查我关心的代码。

我查看了本地操作、delegate_to 等,但还没有找到一个简单的方法来做到这一点。我能找到的最佳方法是:

- name: check out project from git
  delegate_to: localhost
  include_role: 
    name: configure_git

但是,这不起作用我收到投诉说名称行存在语法错误。如果我删除了 delegate_to 行,它可以工作(但在错误的服务器上运行)。如果我用调试替换 include_role 它将在本地运行。就好像 ansible 明确拒绝在本地运行包含的角色,而不是我可以在文档的任何地方找到它。

是否有一种干净的方式在本地运行此角色或其他角色?

【问题讨论】:

    标签: ansible


    【解决方案1】:

    include_role module documentation中提取

    • 任务级关键字、循环和条件仅适用于include_role 语句本身。
    • 要将关键字应用于角色中的任务,请使用apply 选项传递它们,或者改用ansible.builtin.import_role
    • 忽略一些关键字,例如untilretries

    我实际上不知道您得到的错误是否与 delegate_to 被忽略有关(我严重怀疑是这种情况......)。同时在这里使用它不是正确的方法:

    - name: check out project from git
      include_role: 
        name: configure_git
        apply:
          delegate_to: localhost
    

    此外,这很可能是个坏主意。假设您的游戏目标是 100 台服务器:角色将运行 100 次(除非您也申请了run_once: true)。我会在localhost 上“正常”地扮演我的角色,然后在下一个角色中完成我的目标的其余工作。

    - name: Prepare env on localhost
      hosts: localhost
      roles:
        - role: configure_git
    
    - name: Do the rest on other hosts
      hosts: my_group
      
      tasks:
        - name: dummy.
          debug:
            msg: "Dummy"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      相关资源
      最近更新 更多