Vagrant Ansible playbook组_变量被角色变量覆盖

Vagrant Ansible playbook组_变量被角色变量覆盖,vagrant,ansible,Vagrant,Ansible,对于一个现有的项目,我用ansible替换了一个bash供应脚本——首先是通过Vagrant,然后在问题解决后将其用于暂存/生产服务器 问题是。。。 根据on变量的优先级,group_变量应该覆盖角色变量,但我看到了相反的情况 相关文件。。。 以下是我的Vagrantfile(在项目根目录中)的摘录: 我把它指向下面几个子目录下的一个剧本,因为我在一个已有的代码库中使用它自己的实践,不能让ansible的东西在根目录上乱七八糟。有关剧本: # app/config/provision/provi

对于一个现有的项目,我用ansible替换了一个bash供应脚本——首先是通过Vagrant,然后在问题解决后将其用于暂存/生产服务器

问题是。。。 根据on变量的优先级,group_变量应该覆盖角色变量,但我看到了相反的情况

相关文件。。。 以下是我的
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
    ]
}