I am to trying to pass variables to kubernetes YAML file from Ansible but somehow values are not being populated.
Here is my playbook:
- hosts: master
gather_facts: no
vars:
logstash_port: 5044
tasks:
- name: Creating kubernetes pod
command: kubectl create -f logstash.ymllogstash.yml:
apiVersion: v1
kind: Pod
metadata: logstash
spec:
containers:
- name: logstash
image: logstash
ports:
- containerPort: {{ logstash_port }}Is there a better way to pass arguments to Kubernetes YAML file that is being invoked using command task?
What you are trying to do has no chance of working. Kubernetes (the kubectl command) has nothing to do with Jinja2 syntax, which you try to use in the logstash.yml, and it has no access to Ansible objects (for multiple reasons).
Instead, use k8s_raw module to manage Kubernetes objects.
You can include Kubernetes' manifest directly in the definition declaration and there you can use Jinja2 templates:
- k8s_raw:
state: present
definition:
apiVersion: v1
kind: Pod
metadata: logstash
spec:
containers:
- name: logstash
image: logstash
ports:
- containerPort: "{{ logstash_port }}"Or you can leave your logstash.yml as is, and feed it using the template lookup plugin:
- k8s_raw:
state: present
definition: "{{ lookup('template', 'path/to/logstash.yml') | from_yaml }}"Notice if you used Jinja2 template directly in Ansible code, you must quote it. It's not necessary with the template plugin.