我想尝试将变量从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文件?
答案 0 :(得分:1)
你想做的事没有工作的机会。 Kubernetes(kubectl
命令)logstash.yml
中使用的Jinja2语法有关,并且它无法访问Ansible对象(由于多种原因) )。
相反,使用k8s_raw
module来管理Kubernetes对象。
您可以直接在definition
声明中包含Kubernetes的清单,在那里您可以使用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模板,则必须引用它。模板插件没有必要。