可以跳过Ansible在运行Ansible剧本的机器上运行剧本

问题描述 投票:1回答:1

我如何构建剧本,以免在运行Ansible的计算机上执行单个剧本?

例如,如果我有一个简单的两部剧本:

- name: Patch and reboot
  hosts: all
  gather_facts: true

  tasks:
  - name: Fully patch system
    package:
      name: "*"
      state: latest
    become: true
    register: patchstatus

  - name: Reboot if patched
    reboot:
    become: true
    when: patchstatus is changed

但是我不希望重新启动在运行Ansible的计算机上运行时触发。

我知道维护得更好的库存不会使我的Ansible系统与其他系统一起使用,但这是一个实验室,我希望我能每晚夜间启动一本简单的剧本-我宁愿不重启我的Ansible剧本(在至少直到它是最后一个重新启动为止。]

ansible ansible-inventory
1个回答
0
投票

如果您在运行Playbook时未将现有清单文件作为目标,则Implicit Localhost将您的工作站作为目标。

您遇到的行为是因为全局hosts变量设置为all。您可能知道,它指定每个任务应在清单中的所有主机上运行。

如果您不希望重新启动在运行Playbook的计算机上触发,那么您需要确保将其排除在外。这通常是通过清单文件中的组来完成的。

我对使用Ansible库存文件比较熟悉,我从来没有遇到过这样的情况:使用Ansible库存文件会增加您在描述的最后一段中描述的限制。

首先,here is the documentation用于Ansible库存文件。我知道Ansible文档非常冗长。但是Ansible的许多更好的工作都是细微的,如果您通常在文档中搜索特定的实现信息,则可能会错过很多上下文。我建议您先阅读整个文档,然后再继续阅读。

之后,像这样建立库存文件:

[hardware]
my.router.name
my.switch.name
my.computer.name
my.first.server
my.second.server
my.third.server

[networking]
my.router.name
my.switch.name
my.second.server

[servers]
my.first.server
my.second.server
my.third.server

[computers]
my.computer.name
wife.computer.name

[instances:children]
my.router.name
my.switch.name
my.computer.name
wife.computer.name
my.first.server
my.second.server
my.third.server

在此示例中,您总共定义了7个设备。它们出现在您的children部分中。从那里,您可以派生不同的主机组。例如,在这里,我创建了hardwarenetworkingserverscomputers组。

假设您想使用Playbook重新启动所有个人计算机。然后,将第2行设置为hosts: computers。如果要重新引导所有服务器和所有网络设备,则可以将其设置为以下格式:hosts: networking:servers

如果您希望除my.computer.name之外的所有设备都打补丁并重启,则可以这样编写Playbook:

- name: Patch and reboot
  hosts: hardware:networking:servers:wife.computer.name
  gather_facts: true

  tasks:
  - name: Fully patch system
    package:
      name: "*"
      state: latest
    become: true
    register: patchstatus

  - name: Reboot if patched
    reboot:
    become: true
    when: patchstatus is changed

让我知道这对您有帮助还是我错过了您的问题。 Ansible使用起来很有趣,所以我总是很乐意为您提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.