当前位置:  开发笔记 > 编程语言 > 正文

组的第一个主机名

如何解决《组的第一个主机名》经验,为你挑选了1个好方法。

我不确定如何从group_names中找到第一个可识别的主机名。您能给我建议怎么做吗?

主机

[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

问题是我有委派任务到每个组的第一位主持人。以前我只使用过webservers组,因此使用下面的任务要容易得多

- 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,如何选择每个组的第一个?这样可以更动态



1> Konstantin S..:

如果您希望当前播放的第一台主机成为一种同步的主主机,我建议另一种方法:使用play_hostsansible_play_hosts(取决于您的Ansible版本)变量中的一个。参见魔术变量。
喜欢delegate_to: "{{ play_hosts | first }}"

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

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

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有