ansible group_vars 中允许 jinja 吗?

问题描述 投票:0回答:1

提前致歉:过去几年我一直在与盐打交道。 。 .

我希望能够使用 group_vars/all 中的

proxy_envs
以便能够在
environment
中为
get_url
任务设置代理。
所以我的任务将如下所示:

- name: Download something via http          
  ansible.builtin.get_url:                            
    url: http://example.com/
  environment: "{{ proxy_env }}"

我想使用 yaml 锚点,例如:

proxy_server: &proxy_server "http://squid:3128" 
proxy_env:
  http_proxy: *proxy_server
  https_proxy: *proxy_server
  ftp_proxy: *proxy_server

这似乎工作正常。我的问题是 no_proxy 。 。 。我希望它是一个列表,例如

no_proxy: &no_proxy
  - url1
  - url2

但是我希望能够像这样使用 proxy_env 设置 no_proxy :

no_proxy: &no_proxy
  - url1
  - url2
proxy_server: &proxy_server "http://squid:3128" 
proxy_env:
  http_proxy: *proxy_server
  https_proxy: *proxy_server
  ftp_proxy: *proxy_server
  no_proxy: "{{ *no_proxy|join(',') }}"

Ansible 不喜欢这样:

template error while templating string: unexpected '*'. String: {{ *no_proxy|join(',') }}. unexpected '*'" 

这可能吗?谢谢!

ansible yaml
1个回答
0
投票

从表达式中删除

*
。无需使用锚。使用变量的值

  proxy_env:
    http_proxy: *proxy_server
    https_proxy: *proxy_server
    ftp_proxy: *proxy_server
    no_proxy: "{{ no_proxy | join(',') }}"

给你想要的

  proxy_env:
    ftp_proxy: http://squid:3128
    http_proxy: http://squid:3128
    https_proxy: http://squid:3128
    no_proxy: url1,url2

用于测试的完整剧本示例

- hosts: all

  vars:

    no_proxy: &no_proxy
      - url1
      - url2
    proxy_server: &proxy_server "http://squid:3128" 
    proxy_env:
      http_proxy: *proxy_server
      https_proxy: *proxy_server
      ftp_proxy: *proxy_server
      no_proxy: "{{ no_proxy | join(',') }}"

  tasks:

    - debug:
        var: no_proxy
    - debug:
        var: proxy_env
© www.soinside.com 2019 - 2024. All rights reserved.