Ansible 组的第一个主机名
Ansible first hostname of groups
我不确定如何从 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
问题是我将任务委派给每个组的第一主持人。以前我只用过网络服务器组,所以使用下面的任务要容易得多
- name: syncing web files to {{ version_dir }}
synchronize:
src: "{{ build_dir }}"
dest: "{{ version_dir }}"
rsync_timeout: 60
delegate_to: "{{ groups.webservers | first }}"
如果我有 2 个不同的 group_names,我如何 select 每组中的第一个?所以它可以更动态
如果你想让当前播放的第一个主机成为一种主要主机来同步,我推荐另一种方法:使用 play_hosts
或 ansible_play_hosts
之一(取决于你的Ansible 版本)变量。参见 magic variables。
喜欢 delegate_to: "{{ play_hosts | first }}"
.
问题是当你对 Ansible 说 hosts: webservers-el7
时 webservers-el7
是这里的一个模式。 Ansible 搜索主机以匹配此模式并将它们提供给 Play。你可能也写了 webservers-el*
。所以在 Play 中你没有任何变量会告诉你 “我是 运行 这个 Play 主机来自组 webserver-el7...”。您可能只会在分析 group_names
和 groups
魔术变量时进行一些猜测。但是当你在几个组中有一个主机时,这就变得笨拙了。
仅限单组主机,您可以尝试:groups[group_names | first] | first
要从组中获取任何元素,请使用 group[group_name][0...n]
。
这将从组中获取第一个元素。
- debug: msg="{{ groups['group_name'][0] }}"
我不确定如何从 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
问题是我将任务委派给每个组的第一主持人。以前我只用过网络服务器组,所以使用下面的任务要容易得多
- name: syncing web files to {{ version_dir }}
synchronize:
src: "{{ build_dir }}"
dest: "{{ version_dir }}"
rsync_timeout: 60
delegate_to: "{{ groups.webservers | first }}"
如果我有 2 个不同的 group_names,我如何 select 每组中的第一个?所以它可以更动态
如果你想让当前播放的第一个主机成为一种主要主机来同步,我推荐另一种方法:使用 play_hosts
或 ansible_play_hosts
之一(取决于你的Ansible 版本)变量。参见 magic variables。
喜欢 delegate_to: "{{ play_hosts | first }}"
.
问题是当你对 Ansible 说 hosts: webservers-el7
时 webservers-el7
是这里的一个模式。 Ansible 搜索主机以匹配此模式并将它们提供给 Play。你可能也写了 webservers-el*
。所以在 Play 中你没有任何变量会告诉你 “我是 运行 这个 Play 主机来自组 webserver-el7...”。您可能只会在分析 group_names
和 groups
魔术变量时进行一些猜测。但是当你在几个组中有一个主机时,这就变得笨拙了。
仅限单组主机,您可以尝试:groups[group_names | first] | first
要从组中获取任何元素,请使用 group[group_name][0...n]
。
这将从组中获取第一个元素。
- debug: msg="{{ groups['group_name'][0] }}"