繁体   English   中英

如何从Ansible将变量传递到Kubernetes YAML文件?

[英]How to pass variables to a Kubernetes YAML file from 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文件?

您尝试做的事情没有工作的机会。 Kubernetes(该kubectl命令) 无关 ,与Jinja2的语法,你试图在使用logstash.yml ,并且它必须Ansible对象无权访问(出于多种原因)。


而是使用k8s_raw模块来管理Kubernetes对象。

您可以将Kubernetes的清单直接包含在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保留logstash.yml ,并使用模板查找插件来提供它:

- k8s_raw:
    state: present
    definition: "{{ lookup('template', 'path/to/logstash.yml') | from_yaml }}"

注意,如果您直接在Ansible代码中使用了Jinja2模板,则必须引用它。 模板插件没有必要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM