首页 > 解决方案 > 带有 linux 命令的 Ansible jinja2 模板

问题描述

我正在学习ansible。我已经编写了一个用于循环多个值的 jinja2 模板。但是,我从 linux 命令中获取这些值。

- name: fetching port ranges 
  command: ls /apache |grep redis|grep ".pid"  | awk -F"_" '{ print $2}'| awk -F"." '{print $1}'

上述命令的输出将是:

10001
10002
10003
10004
10005

下面是jinja2模板

 [{% for range in port  %}
    "127.0.0.1:{{ range }}",
  {% endfor %}]

使用 jinja2 模板中的“for loop”,我正在尝试遍历 linux 命令生成的值,但我不确定如何保存这些值并在 jinja2 模板中使用它。任何帮助,将不胜感激。

标签: ansibleansible-2.xansible-inventoryansible-template

解决方案


您需要注册结果,然后使用stdout_lines.

尝试这样的事情:

- name: fetching port ranges 
  command: ls /apache |grep redis|grep ".pid"  | awk -F"_" '{ print $2}'| awk -F"." '{print $1}'
  register: result

- name: my template task
  template:
    src: <src>
    dest: <dest>
  vars:
    port: "{{ result.stdout_lines }}"

推荐阅读