团队
在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 == ''
答案 0 :(得分:0)
不幸的是,这是不可能的。这是基于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
),该节点将始终为空。