【问题标题】:How to Play with particular group using Ansible Playbook如何使用 Ansible Playbook 与特定组一起玩
【发布时间】:2016-11-14 10:47:29
【问题描述】:

Ansible 版本:2.1.0

我的 ansible hosts 文件是:

[PM]
xyz.example.com ansible_connection=ssh

[ND]
pqr.example.com ansible_connection=ssh

[CM]
xyz.example.com ansible_connection=ssh
pqr.example.com ansible_connection=ssh

剧本是:

- hosts: PM:ND:CM
   remote_user: root
   tasks:
    {some thing}

- hosts: PM
   remote_user: root
   tasks:
    {some thing}

 - hosts: ND
   remote_user: root
   tasks:
    {some thing}

- hosts: CM
   remote_user: root
   tasks:
    {some thing}

我正在使用以下命令运行剧本:

ansible-playbook --limit 'PM' akana-installation.yml

但剧本仍然在与所有主机一起玩,这意味着

Play 'PM:ND:CM'
Play 'PM'
Play 'ND'
Play 'CM'

所有戏剧都在播放。请帮我解决这个问题。

我需要的是:在执行剧本时我会给出组名,只有那个组才能玩,所以请告诉我还有其他方法吗。

【问题讨论】:

    标签: ansible ansible-2.x ansible-inventory


    【解决方案1】:

    原来的问题是:--limit 选项不起作用

    通过调用ansible-playbook --limit 'PM' akana-installation.yml,您告诉 ansible 将服务器限制在 PM 组中的主机上。
    在您的情况下,它将是 xyz.example.com
    请记住,如果您在多个组中拥有此服务器,正如您所做的那样,它仍然是这些组的成员。
    您的有限库存将变为:

    [PM]
    xyz.example.com ansible_connection=ssh
    
    [ND]
    
    [CM]
    xyz.example.com ansible_connection=ssh
    

    ansible-playbook 将执行你的剧本中适用于 asma.example.com 的每一个剧本。
    在你的情况下:

    Play 'PM:ND:CM'
    [xyz.example.com]
    Play 'PM'
    [xyz.example.com]
    Play 'ND'
    skipping: no hosts matched
    Play 'CM'
    [xyz.example.com]
    

    【讨论】:

    • 是的,你是对的,这就是发生在我身上的事情。但是我想和特定的群主一起玩,我该如何实现呢?
    • @KishoreReddy,这不是 ansible 中的工作方式。您可以限制主机(就像使用--limit 开关一样),但它不会限制播放。如果您想限制播放,请考虑将它们分成不同的剧本并将它们包含在主剧本中(参见example:site.yml 和 webservers.yml)。或者使用标签。
    【解决方案2】:

    为剧本文件创建目录:

    mkdir playbooks
    

    将您的剧本拆分为单独的文件,例如。剧本/pm.yml:

    - hosts: PM
      remote_user: root
      tasks:
      {some thing}
    

    创建文件all.yml

    - hosts: PM:ND:CM
      remote_user: root
      tasks:
      {some thing}
    
    - include: playbooks/pm.yml
    - include: playbooks/nd.yml
    - include: playbooks/cm.yml    
    

    现在你有单独的逻辑,你可以用命令玩所有的东西:

    ansible-playbook all.yml
    

    或运行单独的命令:

    ansible-playbook playbooks/pm.yml
    

    ansible-playbook playbooks/nd.yml
    

    【讨论】:

      【解决方案3】:

      这是对上一个答案的补充。如果我误解了您的问题,我深表歉意,但您的示例剧本没有描述。

      清理跳过的主机:
      组“ND”将(如上所述)不匹配任何主机。如果您想从播放中删除输出,则必须使用回调插件。我使用以下Gist

      另一种限制方式:
      要限制您要求的方式,您需要使用TAGS。这将允许您通过播放(这似乎是您想要做的)而不是主机列表来限制。

      为此,在播放中添加一个标签:

      ...
      - hosts: PM
        remote_user: root
        tags: pmtag
        tasks:
          {some thing}
      

      然后根据您的需要在排除或包含新标签的情况下运行剧本。

      ansible-playbook --limit 'PM' akana-installation.yml --tags pmtag
      

      这将确保只有 PM 运行的主机只播放带有 pmtag 标记的播放。

      【讨论】:

        猜你喜欢
        • 2021-07-22
        • 2017-09-08
        • 1970-01-01
        • 2018-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多