Ansible 写剧本的方式

Ansible 写剧本的方式,ansible,Ansible,我已经开始学习Ansible,我发现在大多数情况下(甚至在官方文档中),剧本的结构如下: - hosts: all tasks: - name: task1 - name: task2 ... - name: activity 1 hosts: all tasks: - commands1 (ping all hosts, gather which ones are reachable) register: ping - group_by: key=ping

我已经开始学习Ansible,我发现在大多数情况下(甚至在官方文档中),剧本的结构如下:

- hosts: all
  tasks:
  - name: task1
  - name: task2
...
- name: activity 1
  hosts: all
  tasks:
  - commands1 (ping all hosts, gather which ones are reachable)
    register: ping
  - group_by: key=pingable
    when: pings.rc == 0
  - task2
  commands2 (do something else)
- name: activity 2
  hosts: pingable
  tasks:
  - commands2 (check if ssh is running only on pingable hosts)
我一直在尝试制作我自己的剧本,用ping检查主机的可访问性,然后检查SSH是否正在运行,等等,我从这样的事情开始(简短地说不完整):

但是id没有正确工作,我发现的唯一一个例子剧本的工作方向相反,如下所示:

- hosts: all
  tasks:
  - name: task1
  - name: task2
...
- name: activity 1
  hosts: all
  tasks:
  - commands1 (ping all hosts, gather which ones are reachable)
    register: ping
  - group_by: key=pingable
    when: pings.rc == 0
  - task2
  commands2 (do something else)
- name: activity 2
  hosts: pingable
  tasks:
  - commands2 (check if ssh is running only on pingable hosts)
等等

我无法使“标准”剧本正常工作,无法正确检测可pingable主机,无法列出它们并将它们传递给第二组任务(主机:pingable),而另一个剧本以这种“反向”顺序编写,可以正常工作

是否有一个理由或规则,为什么或如何写剧本?这两种风格在逻辑上有什么不同?哪一种是“正确的”,如果它存在的话

希望我没有太困惑,但对于初学者来说,当你看到一个与你目前所学的不同的示例时,它会变得混乱……:)


干杯,Andrea

你的剧本不尊重yaml和/或ansible语法。请注意缩进和新行。你可以在发布之前验证你的剧本。好吧,YAML格式的正确性不是这里的问题,而是两种编写剧本的方法之间的逻辑…正如我所说,这是完整剧本的一部分,在解析方面没有问题,因此,在复制/粘贴过程中,可能会出现一些不一致的情况。请使您的示例能够运行。除此之外,
ping
模块本身使用ssh,这就是ssh测试。此外,ansible将忽略后续任务中未通过
ping
测试的主机,因此无需使
ping
主机集可用。您的两个示例仍然无效。此外,我们不知道“工作不正常”是什么意思:预期结果、实际结果、错误消息。。。。请编辑您的问题,以修复您的示例,并添加足够的详细信息,以便能够回答。