首页 > 解决方案 > 将后缀/前缀添加到单个 ansible 变量

问题描述

我有一个定义 ansible 变量的文件role1/vars/main.yml,要在剧本中使用:

app_name: "amazing"

后来我想在另一个文件中添加一个后缀role1/vars/over-write-main.yml

app_name: "{{ app_name }} app"

这是一个更复杂的项目的一部分,app_name在模板中定义然后在模板中使用,我无权访问。所以想法是简单地将后缀添加到变量中。但是我可以添加一个新任务,或者一个新的变量文件。

但是我从 ansible 得到一个很长的重复错误

"AnsibleError: An unhandled exception occurred while templating '{{ app_name}} *.feedzai.live'. 
Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while templating '{{ app_name}} *.feedzai.live'. 
Error was a <class 'ansible.errors.AnsibleError'>, original message: An unhandled exception occurred while templating '

...

Error was a <class 'ansible.errors.AnsibleError'>, original message: recursive loop detected in template string: {{ app_name }} app"

我发现了很多关于如何对列表执行此操作的解释,而不是对单个变量的解释。我需要将其转换为列表然后再转换回来吗?

我也试过没有成功:app_name: "{{ app_name + 'app'}"

标签: ansible

解决方案


使用重新创建变量set_fact似乎工作得很好:

- hosts: localhost
  gather_facts: false
  vars:
    app_name: amazing

  tasks:
    - set_fact:
        app_name: "{{ app_name }} app"

    - debug:
        var: app_name

推荐阅读