如何在 Ansible 中显示特定 OS 内主机的所有主机名

How to show all the host names of hosts within a specific OS in Ansible

Ansible 中是否有任何命令可以使用 OS Debain 收集主机的主机名? 文件主机不包含组!

查看包含 Debain 的主机的主机名的简单命令。

setup module, which is implicitly called in any playbook via the gather_facts mechanism, contains some output that you could use.
查找 ansible_distribution 事实的示例,其中应包含您要查找的主机上的 Debian

如果您只需要该列表一次,您可以使用 ansible 命令和 grep:

直接调用该模块

ansible all -m setup -a 'filter=ansible_distribution' | grep Debian

如果您想在剧本中动态使用该信息,可以使用此模式:

---
 - hosts: all
   tasks:
     - name: Do something on Debian
       debug:
         msg: I'm a Debian host
       when: ansible_distribution == 'Debian'

我想补充一点,如果你想定位发行版和最低版本(通常是这种情况),你可以用字典来做到这一点。我经常使用这个片段:

---
- hosts: localhost
  vars:
    minimum_required_version:
      CentOS: 7
      Debian: 11
      Fedora: 31
      RHEL7: 7
      Ubuntu: 21.10

  - name: set boolean fact has_minimum_required_version
    set_fact:
      has_minimum_required_version: "{{ ansible_distribution_version is version(minimum_required_version[ansible_distribution], '>=') | bool }}"

  tasks:
  - name: run task when host has minimum version required
    debug:
      msg: "{{ ansible_distribution }} {{ ansible_distribution_version }} >= {{ minimum_required_version[ansible_distribution] }}"
    when: has_minimum_required_version

您还可以动态包含针对特定发行版或版本的剧本片段,如下所示:

- name: Include task list in play for specific distros
  include_tasks: "{{ ansible_distribution }}.yaml"

假设您为每个要支持的发行版定义了 Debian.yaml、Ubuntu.yaml 等。