ansible - 在 with_items 和循环中使用通配符
问题描述
团队,
with_item
在我的任务中使用单个完整定义的字符串运行良好。但是,在规模上,我想循环使用 with_items 内的字符串变化。任何提示?
- name: "Fetch all CPU nodes from clusters using K8s beta.kubernetes.io/instance-type"
k8s_facts:
kind: Node
label_selectors:
- "beta.kubernetes.io/instance-type=e1.xlarge"
verify_ssl: no
register: cpu_class_list
failed_when: cpu_class_list == ''
输出:
ok: [localhost] => {
"nodes_class_label": [
{
"instanceType": "e1.xlarge,
"nodeType": "cpu",
"node_name": "hostA"
},
{
"instanceType": "e1.xlarge,
"nodeType": "cpu",
"node_name": "hostB"
}
]
}
我想使用通配符提取与任何名称匹配的所有节点。
label_selectors:
- "beta.kubernetes.io/instance-type=e1.xlarge"
- "beta.kubernetes.io/instance-type=f1.xlarge"
- "beta.kubernetes.io/instance-type=g1.xlarge"
预期输出:
list all e1 label nodes output
list all f1 label nodes output
list all g1 label nodes output
我尝试的解决方案:
- name: "Fetch all CPU nodes from clusters using K8s beta.kubernetes.io/instance-type"
k8s_facts:
kind: Node
label_selectors:
- "beta.kubernetes.io/instance-type=*.xlarge"
verify_ssl: no
register: cpu_class_list
failed_when: cpu_class_list == ''
解决方案
不幸的是,这是不可能的。这是基于 Kubernetes API 实现的限制,与 Ansible 或 k8s_facts 模块无关。
有几种解决方法,但最终我认为使用基于集合的选择器是您的最佳选择。这看起来类似于:
- k8s_facts:
kind: Node
label_selectors:
- "beta.kubernetes.io/instance-type in (e1.xlarge, f1.xlarge, g1.xlarge)"
出于代码可读性和维护目的,您还应该能够将实例类型提取到变量中。
另一种选择是只循环k8s_facts
每个实例类型的任务,我猜你已经考虑过:"beta.kubernetes.io/instance-type={{ item }}"
.
最后,您在问题中的一个示例将不起作用:
label_selectors:
- "beta.kubernetes.io/instance-type=e1.xlarge"
- "beta.kubernetes.io/instance-type=f1.xlarge"
- "beta.kubernetes.io/instance-type=g1.xlarge"
这是在寻找满足所有这些条件(即e1.xlarge && f1.xlarge && g1.xlarge
)的节点,这些条件总是没有的。
推荐阅读
- rust - 我真的需要对 Rust 进行向下转换吗?
- visual-studio - 如何消除vs2019中<<<>>>下的intellisense警告
- java - 捕获 IllegalStateException 后如何重试 try-catch?
- python - 在python中使用append和for循环将整数添加到列表中
- javascript - 如何显示包含另一个数组的数组的值?
- c++ - 有条件地选择要继承的类
- spring-boot - 如何在spring boot中将嵌入式tomcat控制台打印到外部文件
- javascript - 搜索并删除剑道树中的空父节点
- botframework - Virtual Assistant Bot Framework Alexa 通道 HTTP 状态码 GatewayTimeout
- c++ - 如何使用 gcc 工具链在 c++11 中仅初始化全局数组的几个元素?