Возможное использование группового символа в with_items и цикле - PullRequest
0 голосов
/ 04 ноября 2019

Team,

Использование одной полностью определенной строки в 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 == ''


1 Ответ

0 голосов
/ 05 ноября 2019

К сожалению, это невозможно. Это ограничение основано на реализации API Kubernetes, не связанного с 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), которые всегда будут равны нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...