Ansible 组的第一个主机名

标签 ansible ansible-2.x

我不确定如何从 group_names 中找到第一个 ansible 主机名。您能告诉我该怎么做吗?

主机

[webservers]
server1
server2
server3

[webserver-el7]
server4
server5
server6

我为每个主机组准备了 2 个不同的剧本

playbook1.yml

- name: deploy app
  hosts: webservers
  serial: 8
  roles:
    - roles1

playbook2.yml

- name: deploy app
  hosts: webservers-el7
  serial: 8
  roles:
    - roles1

问题是我将任务委托(delegate)给每个组的第一位主持人。以前我只使用网络服务器组,所以使用下面的任务会更容易

- name: syncing web files to {{ version_dir }}
  synchronize:
    src: "{{ build_dir }}"
    dest: "{{ version_dir }}"
    rsync_timeout: 60
  delegate_to: "{{ groups.webservers | first }}"

如果我有 2 个不同的组名称,我如何选择每个组的第一个?所以它可以更加动态

最佳答案

如果您希望当前播放的第一台主机成为要同步的主主机,我建议您使用另一种方法:使用 play_hostsansible_play_hosts 之一(取决于您的 Ansible 版本)变量。请参阅magic variables .
就像delegate_to:“{{ play_hosts | first }}”

问题是,当您对 Ansible 说 hosts: webservers-el7 时,webservers-el7 就是这里的一种模式。 Ansible 搜索匹配此模式的主机并将其输入 Play。您可能也编写了webservers-el*。因此,在 Play 中,您没有任何变量可以告诉您“我正在 webserver-el7 组的主机上运行此 Play...”。您可能只能在分析 group_namesgroups 魔术变量时进行一些猜测。但是,当您在多个组中拥有一个主机时,这会变得很笨拙。

仅对于单个组中的主机,您可以尝试:groups[group_names |第一] |首先

关于Ansible 组的第一个主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41571716/

相关文章:

ansible - 使用 ansible playbook 执行 curl -X

ansible - 如何访问 Action 插件中的 ansible 变量(不提供它们作为参数)

Ansible Remote_user 与 ansible_user

docker - 使用 Ansible docker_container,如何显示标准输出? (标准输出)

docker - 在 Docker 中运行时,Fetch 模块返回 "unable to calculate the checksum of the remote file",但不在 Docker 中时工作正常

ssh - Ansible SSH 作为一个用户,Sudo 作为另一个用户

ansible - 如何按标签顺序运行 Ansible playbook 任务

ansible - 每个主机的 "pause"

python - 在提示时将密码传递给 Python 脚本

ansible - 使用 lineinfile 和 blockinfile 编辑文件还是使用模板复制整个文件?