我试图将变量从 Ansible 传递到 kubernetes YAML 文件,但不知何故,值没有被填充。
这是我的剧本:
- hosts: master
gather_facts: no
vars:
logstash_port: 5044
tasks:
- name: Creating kubernetes pod
command: kubectl create -f logstash.yml
logstash.yml
:
apiVersion: v1
kind: Pod
metadata: logstash
spec:
containers:
- name: logstash
image: logstash
ports:
- containerPort: {{ logstash_port }}
是否有更好的方法将参数传递给使用命令任务调用的 Kubernetes YAML 文件?
最佳答案
你正在尝试做的事情没有机会成功。 Kubernetes(kubectl
命令)与 Jinja2 语法无关,您尝试在 logstash.yml
中使用该语法,并且它没有访问 Ansible 对象(出于多种原因)。
相反,请使用 k8s_raw
module管理 Kubernetes 对象。
您可以将 Kubernetes 的 list 直接包含在 definition
声明中,然后您可以使用 Jinja2 模板:
- k8s_raw:
state: present
definition:
apiVersion: v1
kind: Pod
metadata: logstash
spec:
containers:
- name: logstash
image: logstash
ports:
- containerPort: "{{ logstash_port }}"
或者您可以保留 logstash.yml
不变,并使用模板查找插件提供它:
- k8s_raw:
state: present
definition: "{{ lookup('template', 'path/to/logstash.yml') | from_yaml }}"
注意,如果您在 Ansible 代码中直接使用 Jinja2 模板,则必须引用它。模板插件不需要。
关于kubernetes - 如何从 Ansible 将变量传递到 Kubernetes YAML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50806103/