Ansible动态调用集群变量创建K8s命名空间报project未定义如何解决?
错误原因
- 你通过命令行传入的
cluster=cluster1是字符串类型,仅代表变量名,并非直接指向variables.yaml中存储的集群列表对象,字符串类型的变量本身不存在project属性,因此直接调用cluster.project会报错。 - 缺少循环遍历逻辑:你需要遍历指定集群下的所有节点条目,才能逐个取出
project字段执行创建命令。
修正方案
修改你的playbook任务文件如下:
- hosts: localhost tasks: - name: Create project for {{ item.project }} command: kubectl create ns {{ item.project }} loop: "{{ vars[cluster] }}"
逻辑说明
vars[cluster]:通过变量名字符串动态获取variables.yaml中对应的集群列表值,比如当cluster=cluster1时,等价于直接引用cluster1变量的列表内容loop:会遍历集群列表的每个条目,每个条目用item指代,逐个取出project字段执行命名空间创建- 支持动态增长:不管对应cluster下新增多少节点,都会自动遍历所有条目,不需要修改playbook逻辑
执行命令和你之前的用法完全一致,不需要调整:
ansible-playbook -e @variables.yaml -e cluster=cluster1
内容的提问来源于stack exchange,提问作者smc
相关产品推荐
相关产品推荐

