保持 Ansible DRY:如何避免重复变量? [英] Keep Ansible DRY: How to avoid repeating variables?
问题描述
最近刚开始使用 Ansible,但遇到了一个问题.在我的 YAML 结构之一中,我定义了如下内容:
Recently just started using Ansible and I have run into a problem. In one of my YAML structures I have defined something like this:
---
# file: main.yml
#
# Jenkins variables for installation and configuration
jenkins:
debian:
# Debian repository containing Jenkins and the associated key for accessing the repository
repo: 'deb http://pkg.jenkins-ci.org/debian binary/'
repo_key: 'http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key'
# Dependencies needed for Jenkins to run properly
dependencies:
- 'openjdk-7-jdk'
- 'git-core'
- 'curl'
port: 8080
# Installation directory
home: '/opt/jenkins'
# Path to the location of the main Jenkins-cli binary
bin_path: '{{jenkins.home}}/jenkins-cli.jar'
# Path to the location of the Jenkins updates file
updates_path: '{{jenkins.home}}/updates_jenkins.json'
Ansible 在特定任务中给了我这样的错误:
Ansible gives me an error like this from a specific task:
"在模板字符串中检测到递归循环:{{jenkins.home}}/updates_jenkins.json"
"recursive loop detected in template string: {{jenkins.home}}/updates_jenkins.json"
我已经将问题缩小到 bin_path 和 updates_path 都指的是家"这一事实.有没有解决的办法?我需要多次定义/opt/jenkins",这有点糟糕.
I've narrowed it down to the problem being with the fact bin_path and updates_path both refer to 'home'. Is there a way around this? It kind of sucks that I would need to define '/opt/jenkins' multiple times.
推荐答案
据我所知,这是 jinja2 变量的限制.它使用旧的 ${} 并且从 1.4 开始就坏了.我不确定他们是否在 1.5 中修复了这个问题.
As far as I know that this is a limitation of jinja2 variables. it was working with the old ${} and broke since 1.4. I am not sure if they fixed that in 1.5.
我的临时解决方案是从jenkins"中移除家
My temp solution would be removing home from the "jenkins"
---
# file: main.yml
#
# Jenkins variables for installation and configuration
# Installation directory
jenkins_home: '/opt/jenkins'
jenkins:
debian:
# Debian repository containing Jenkins and the associated key for accessing the repository
repo: 'deb http://pkg.jenkins-ci.org/debian binary/'
repo_key: 'http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key'
# Dependencies needed for Jenkins to run properly
dependencies:
- 'openjdk-7-jdk'
- 'git-core'
- 'curl'
port: 8080
# Path to the location of the main Jenkins-cli binary
bin_path: '{{jenkins_home}}/jenkins-cli.jar'
# Path to the location of the Jenkins updates file
updates_path: '{{jenkins_home}}/updates_jenkins.json'
这篇关于保持 Ansible DRY:如何避免重复变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!