Vagrant Ansible playbook组_变量被角色变量覆盖
对于一个现有的项目,我用ansible替换了一个bash供应脚本——首先是通过Vagrant,然后在问题解决后将其用于暂存/生产服务器 问题是。。。 根据on变量的优先级,group_变量应该覆盖角色变量,但我看到了相反的情况 相关文件。。。 以下是我的Vagrant Ansible playbook组_变量被角色变量覆盖,vagrant,ansible,Vagrant,Ansible,对于一个现有的项目,我用ansible替换了一个bash供应脚本——首先是通过Vagrant,然后在问题解决后将其用于暂存/生产服务器 问题是。。。 根据on变量的优先级,group_变量应该覆盖角色变量,但我看到了相反的情况 相关文件。。。 以下是我的Vagrantfile(在项目根目录中)的摘录: 我把它指向下面几个子目录下的一个剧本,因为我在一个已有的代码库中使用它自己的实践,不能让ansible的东西在根目录上乱七八糟。有关剧本: # app/config/provision/provi
Vagrantfile
(在项目根目录中)的摘录:
我把它指向下面几个子目录下的一个剧本,因为我在一个已有的代码库中使用它自己的实践,不能让ansible的东西在根目录上乱七八糟。有关剧本:
# app/config/provision/provision.yml
---
- hosts: all
gather_facts: yes
sudo: true
roles:
- apache
- php
post_tasks:
- debug: var=vagrant_ansible_test_loading_vars
- debug: var=apache_listen_ports
请注意两个变量的调试语句,这两个变量都是在playbook旁边的group_vars文件中定义的:
# app/config/provision/group_vars/all
---
vagrant_ansible_test_loading_vars: "lorem ipsum"
apache_listen_ports:
- 80
- 8080
我使用的apache角色定义了默认值(应该具有最低的优先级):
该角色还定义了变量(应为第二低优先级):
(意想不到的)结果
然而,在《流浪汉》上映后,我得到了以下信息:
TASK: [debug var=vagrant_ansible_test_loading_vars] ***************************
ok: [default] => {
"vagrant_ansible_test_loading_vars": "lorem ipsum"
}
TASK: [debug var=apache_listen_ports] *****************************************
ok: [default] => {
"apache_listen_ports": [
80
]
}
定义的第一个变量及其原始值告诉我正在加载我的group_vars文件。第二个变量已被组变量值覆盖,显然是角色变量的值。角色/rolename/vars/main.yml中的变量具有非常高的优先级。它们被视为常量,在不修改角色的情况下无法重写。roles/rolename/defaults/main.yml的优先级较低,只是可以轻松覆盖的默认值
# app/config/provision/roles/apache/defaults/main.yml
---
apache_listen_ports: [ 80, 8080 ]
# app/config/provision/roles/apache/vars/main.yml
---
apache_listen_ports: [ 80 ]
TASK: [debug var=vagrant_ansible_test_loading_vars] ***************************
ok: [default] => {
"vagrant_ansible_test_loading_vars": "lorem ipsum"
}
TASK: [debug var=apache_listen_ports] *****************************************
ok: [default] => {
"apache_listen_ports": [
80
]
}