如何将变量传递给Ansible的Kubernetes YAML文件?

时间:2018-06-11 21:11:44

标签: kubernetes ansible

我想尝试将变量从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文件?

1 个答案:

答案 0 :(得分:1)

你想做的事没有工作的机会。 Kubernetes(kubectl命令) nothing 与您尝试在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模板,则必须引用它。模板插件没有必要。