ansible - 如何从ansible库存文件中跳过主机名?
问题描述
我的 ansible 库存文件有以下条目
[non_prod_servers]
oracle[1:13]
如何从上述规范中消除主机“oracle7”和“oracle10”,而无需创建以下条目?
[non_prod_servers]
oracle[1:6]
oracle[8:9]
oracle[11:13]
本质上,寻找一个比我想出的更优雅的解决方案。
提前致谢。
FR
解决方案
恕我直言,您正在寻找的功能不可用。您可以在清单中使用 Python 切片。清单模式不适用于清单文件中。
如果您需要它来实现自动化,即您想通过几个变量来控制流程,下面的库存和剧本会动态创建组
shell> cat hosts
[non_prod_servers]
localhost
[non_prod_servers:vars]
_name=oracle
_from=1
_to=13
_deny=[7,10]
shell> cat playbook.yml
---
- hosts: non_prod_servers
gather_facts: false
tasks:
- add_host:
hostname: "{{ _name }}{{ item }}"
groups: non_prod_servers_dyn
loop: "{{ range(_from, _to + 1)|difference(_deny) }}"
- hosts: non_prod_servers_dyn
gather_facts: false
tasks:
- debug:
var: ansible_play_hosts_all
run_once: true
给
shell> ansible-playbook -i hosts playbook.yml
PLAY [non_prod_servers] *************************************************
TASK [add_host] *********************************************************
ok: [localhost] => (item=1)
ok: [localhost] => (item=2)
ok: [localhost] => (item=3)
ok: [localhost] => (item=4)
ok: [localhost] => (item=5)
ok: [localhost] => (item=6)
ok: [localhost] => (item=8)
ok: [localhost] => (item=9)
ok: [localhost] => (item=11)
ok: [localhost] => (item=12)
ok: [localhost] => (item=13)
PLAY [non_prod_servers_dyn] **********************************************
TASK [debug] *************************************************************
ok: [oracle1] =>
ansible_play_hosts_all:
- oracle1
- oracle2
- oracle3
- oracle4
- oracle5
- oracle6
- oracle8
- oracle9
- oracle11
- oracle12
- oracle13
推荐阅读
- highcharts - 如何在角度 8 中实现的高图中启用图例的垂直滚动条
- azure - Docker 返回一个非零代码:3221226356
- html - 我的 flexbox 容器对 flex-direction:column 没有响应
- python - 如何在 pandas 中使用 melt() 和 Stack()
- ruby-on-rails - Gem 'byebug' 未在开发中使用
- php - 使用带有 Mysql 和 PHP 的 Haversine 公式过滤搜索值
- mysql - 如何在 MySQL 的 if 中使用 select
- php - 以某种方式准备MySQL查询会导致错误,即使参数正确?
- python - Django-Rest-Framework Serializer 验证数据返回无
- conv-neural-network - 空间变换网络如何学习适当地变换图像?