Ansible 剧本 : list all servers as comma separated and exclude own server

标签 ansible yaml

我有三台服务器

[servers]
server1 
server2 
server3

我想为每个服务器创建服务器列表而不包括其自身:例如

  • 对于 server1:应该是 server2,server3;
  • 对于 server2:应该是 server1,server3;
  • 对于 server3:应该是 server1,server2;

我可以创建所有服务器的列表,但不知道如何排除一台服务器?

- hosts: servers
  vars:
    network_check_list: "{{groups['servers']|join(',')}}"

最佳答案

您可以将difference过滤器与包含当前目标服务器作为参数的单个元素列表一起使用:

---
- hosts: servers
  gather_facts: false

  vars:
    network_check_list: "{{ groups['servers'] | difference([inventory_hostname]) | join(',') }}"

  tasks:
    - debug:
        var: network_check_list

由于 jinja2 表达式是在现场解释的,并且每次在特定服务器上运行时,您可以将此定义保留在您的 playbook 变量中,它将适应任务中的每个上下文。这是结果(使用您的示例库存):

$ ansible-playbook -i inventory play.yml

PLAY [servers] ****************************************************************************************************************************************************************************************************

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [server1] => {
    "network_check_list": "server2,server3"
}
ok: [server2] => {
    "network_check_list": "server1,server3"
}
ok: [server3] => {
    "network_check_list": "server1,server2"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
server1                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
server2                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
server3                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

引用号:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#set-theory-filters

关于Ansible 剧本 : list all servers as comma separated and exclude own server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60072442/

相关文章:

ruby - 解码 YAML 序列化对象

ruby-on-rails - 如何在 Ruby 中合并和排序 YML 文件中的键?

python - 将yaml文件中的 'Created Time'更改为 'Current Time'

Ansible - 列出可用主机

docker - 是否可以让 ansible 打印每个语句?

ansible - 使用列表变量通过 apt 安装软件列表

java - Spring 中的 Maven 配置文件和应用程序 yml 文件

Yaml 分层数据

shell - 当通过 Jenkins 管道中的 shell 脚本运行 ansible playbook 时,回显输出被缓冲并且不会实时显示

python - 无法将 ansible yml 文件中的 dict 键值获取到我的 after.yml 文件中