如何在 ansible 中使用 "maps" 和 "with_items"

How to use "maps" in anisble along with "with_items"

我正在尝试将标签添加到标签是地图的每个节点:

set_node_labels:
  topology.kubernetes.io/region: "syd"
  topology.kubernetes.io/zone: "syd01"

我按如下方式编写了 Ansible 任务,但它没有按预期工作:

- name: Get all Nodes
  shell: "oc get nodes | awk '(NR>1) { print  }'"
  register: node_names

- name: Print phone records
  k8s:
    state: present
    kind: Node
    name: "{{ item }}"
    definition:
      metadata:
        labels: "{{ item.key }} {{ item.value }}"
    loop: "{{ lookup('dict', set_node_labels) }}"
  with_items: "{{ node_names.stdout_lines }}"

首先,您应该使用现有的模块,而不是 shell 模块。
在您的情况下,您可以通过 k8s_info 模块获取有关节点的信息。

因此,您的第一个任务应该是:

- name: Get all Nodes
  k8s_info:
      kind: Node
  register: node_names

然后为了传递你的标签,那些实际上应该在字典中,所以你应该能够将整个 set_node_labels 作为 labels:

- name: Print phone records
  k8s:
    state: present
    kind: Node
    name: "{{ item.metadata.name }}"
    definition:
      metadata:
        labels: "{{ set_node_labels }}"
  loop: "{{ node_names.resources }}"

您也可以使用现有代码稍作调整

- name: Get all Nodes
  shell: "oc get nodes | awk '(NR>1) { print  }'"
  register: node_names

- name: Print phone records
  k8s:
    state: present
    kind: Node
    name: "{{ item }}"
    definition:
      metadata:
        labels: "{{ set_node_labels }}"
  with_items: "{{ node_names.stdout_lines }}"