ansible - 包含模式虚拟机名称的列表以排除剧本
问题描述
我有一些应该从所有剧本中排除的虚拟机。我创建具有主要任务的角色:
vars:
exclusion_patterns:
- pattern1
- pattern2
tasks:
- name: End play for exclusion hosts
meta: end_host
with_items: "{{ exclusion_patterns }}"
when: "{{ item }} in inventory_hostname"
接下来,我想在第一个任务剧本中导入这个角色,并使用inventory_hostname中“exclusion_patterns”中的模式跳过vm。但是 Ansible 得到错误:未定义变量项。任何变种?
解决方案
1)让我们创建排除主机列表并循环列表。
- hosts: all_hosts_to_select_from
vars:
exclusion_patterns:
- pattern1
- pattern2
tasks:
- name: Create list of excluded hosts
set_fact:
excluded_hosts: "{{ excluded_hosts|default([]) + ansible_play_hosts_all|
select('match', item)|
list }}"
loop: "{{ exclusion_patterns }}"
run_once: true
- name: End play for exclusion hosts
meta: end_host
loop: "{{ excluded_hosts }}"
run_once: true
(未测试)
2)也可以在第一次播放中创建包含主机的库存组并在第二次使用它。
- name: No.1 Create group of included hosts
hosts: all_hosts_to_select_from
vars:
exclusion_patterns:
- pattern1
- pattern2
included_hosts: "{{ ansible_play_hosts_all }}"
tasks:
- name: Remove excluded hosts fromt the list
set_fact:
included_hosts: "{{ included_hosts|
difference(ansible_play_hosts_all|
select('match', item)|
list)
}}"
loop: "{{ exclusion_patterns }}"
run_once: true
- name: Create group of included hosts
add_host:
name: "{{ item }}"
groups: group_of_included_hosts
loop: "{{ included_hosts }}"
run_once: true
- name: No.2 Run group of included hosts
hosts: group_of_included_hosts
tasks:
- name: List ansible_play_hosts_all
debug:
var: ansible_play_hosts_all
run_once: true
(未测试)
推荐阅读
- android - 由于反应本机邮件,Gradle 构建失败
- amazon-web-services - Cloudformation 应用程序负载均衡器弹性 IP 错误
- xml - 运行 testng.xml 以触发 testng 时会发生什么?
- apache-spark - Spark s3数据框选择失败:ConnectionClosedException内容长度过早结束
- vb.net - 我想将我的 AutoCAD 图层过滤器导出到另一个图形
- django - 在 Django 模板上显示上传的 csv 文件
- parsing - 无法使用格式 [strict_date_optional_time||epoch_millis] 解析 Logstash 中的日期
- node.js - 如何使用查询器在 mongoDB 中搜索单个字段?
- java - 如何覆盖通用存储库错误消息
- python - 如何在 Swagger Codegen 3.x 生成的 Python API 客户端中设置 Bearer 令牌?