在with_items和loop中使用通配符

团队

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,"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 == ''


wangchen1211 回答:在with_items和loop中使用通配符

不幸的是,这是不可能的。这是基于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),该节点将始终为空。

本文链接:https://www.f2er.com/3164314.html

大家都在问