如何在 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 }}"
我正在尝试将标签添加到标签是地图的每个节点:
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 }}"