如何在运行ansible playbook时缩小范围?

时间:2016-01-19 17:43:02

标签: ansible ansible-playbook

我有一个花了很多时间执行的剧本,部分原因是它有很多节点需要运行(我浪费时间检查所有节点的状态),我需要在它的中间某处做一些改变。

什么是我可以缩小剧本范围的最佳方式?我考虑过隔离所需的更改和/或仅在单个节点上运行修改后的部分吗?

2 个答案:

答案 0 :(得分:7)

这是tags的用途。

您可以使用任意标记组合标记任何任务,然后指定要运行的标记组合(或者,可以跳过--skip-tags),然后只运行这些指定的任务。

所以一个示例剧本可能如下所示:

- hosts: all
  tasks:
    - name: copy foo
      copy:
        src:  path/to/foo
        dest: path/to/foo
      tags:
        - copy_foo
        - copy
        - foo

    - name: copy bar
      copy:
        src:  path/to/bar
        dest: path/to/bar
      tags:
        - copy_bar
        - copy
        - bar

    - name: restart foo
      service:
        name:  foo
        state: restarted
      tags:
        - restart_foo
        - restart
        - foo

    - name: restart bar
      service:
        name:  bar
        state: restarted
      tags:
        - restart_bar
        - restart
        - bar

然后我可以使用ansible-playbook -i path/to/hosts playbook.yml --tags "restart_foo"运行“restart foo”任务。或者,我可以运行所有与bar相关的标签,并且还可以使用以下任意组合重新启动foo(但不能复制foo):

  • ansible-playbook -i path/to/hosts playbook.yml --tags "bar,restart_foo"
  • ansible-playbook -i path/to/hosts playbook.yml --tags "restart,copy_bar"
  • ansible-playbook -i path/to/hosts playbook.yml --skip-tags "copy_foo"

如果您想改为(或作为一个组合)限制运行游戏的节点,那么您可以使用--limit选项执行此操作。因此,如果您想将游戏限制为仅限于网络服务器,则可以使用ansible-playbook -i path/to/hosts playbook.yml --limit webservers运行该游戏,或者甚至将其限制为使用ansible-playbook -i path/to/hosts playbook.yml --limit web.example.org

的单个特定主机

答案 1 :(得分:2)

可悲的是,这并没有真正记录,即使非常有用

ansible-playbook -i "hostname," site.yml

如果需要,您可以列出多个主机。正如您所看到的,您需要在名称后面加上一个逗号,以使其意识到它是一个列表。