kubernetes - 如何在ansible中获取kubernetes节点名称和IP地址作为字典?
问题描述
我需要获取每个节点的节点名称和 IP 地址,然后创建字典对象。我可以使用以下命令获取 Kubernetes 节点列表
- hosts: k8s
tasks:
- name: get cluster nodes
shell: "kubectl get nodes -o wide --no-headers | awk '{ print $1 ,$7}'"
register: nodes
- debug: var=nodes
- set_fact:
node_data: {}
- name: display node name
debug:
msg: "name is {{item.split(' ').0}}"
with_items: "{{nodes.stdout_lines}}"
- set_fact:
node_data: "{{ node_data | combine ( item.split(' ').0 : { 'name': item.split(' ').0 , 'ip' : item.split(' ').1 }, recursive=True) }}"
with_items: "{{ nodes.stdout_lines }}"
- debug: var=node_data
我收到以下错误:
失败的!=> {“msg”:“模板字符串时模板错误:预期标记',',得到':'。字符串:{{ node_data | combine ( item.split(' ').0 : { 'name':item. split(' ').0 , 'ip': item.split(' ').1 }, recursive=True) }}"}
kubectl 命令的输出如下
kubectl get nodes -o wide --no-headers | awk '{ print $1 ,$7}'
如下
> ip-192-168-17-93.ec2.internal 55.175.171.80
> ip-192-168-29-91.ec2.internal 3.23.224.95
> ip-192-168-83-37.ec2.internal 54.196.19.195
> ip-192-168-62-241.ec2.internal 107.23.129.142
如何在ansible中将节点名和IP地址获取到字典对象中?
解决方案
过滤器的第一个参数combine
必须是字典。你在打电话:
- set_fact:
node_data: "{{ node_data | combine ( item.split(' ').0 : { 'name': item.split(' ').0 , 'ip' : item.split(' ').1 }, recursive=True) }}"
with_items: "{{ nodes.stdout_lines }}"
你需要这样做:
- set_fact:
node_data: "{{ node_data | combine ({item.split(' ').0 : { 'name': item.split(' ').0 , 'ip' : item.split(' ').1 }}, recursive=True) }}"
with_items: "{{ nodes.stdout_lines }}"
请注意{...}
您的第一个参数周围的新内容combine
。为了清楚起见,您可能需要考虑重新格式化此任务,这可能会使此类问题更加明显:
- set_fact:
node_data: >-
{{ node_data | combine ({
item.split(' ').0: {
'name': item.split(' ').0,
'ip': item.split(' ').1
},
}, recursive=True) }}
with_items: "{{ nodes.stdout_lines }}"
您甚至可以通过将调用移动item.split
到一个vars
部分来使其更清晰,如下所示:
- set_fact:
node_data: >-
{{ node_data | combine ({
name: {
'name': name,
'ip': ip
},
}, recursive=True) }}
vars:
name: "{{ item.split(' ').0 }}"
ip: "{{ item.split(' ').1 }}"
with_items: "{{ nodes.stdout_lines }}"
推荐阅读
- node.js - 是否有任何功能可用于访问 Mongoose 中的聚合计数功能?
- python - 尝试通过 Shopify API 提取订单数据时 Python 抛出错误
- c# - 如何在相隔 10 个元素的数组中查找重复项/重复项
- c# - 使用 C# 和华为 E8372 加密狗发送短信
- javascript - 仅在特定 div 中替换选定的 HTML
- appium - 如何检测并点击原生 Android 应用程序中的 Mapbox 标记?
- java - 如何将以下方法转换为 Java 8 内联函数?
- omnet++ - OMNet++-如何建立RSU节点和Vehicle节点之间的连接
- javascript - 如何在 Javascript 中获取会话值,但我的 javascript 代码在 asp.net 后面的代码中。我正在尝试在 javascript 中设置变量值
- android - 录制视频块