Ansible变量分配给主持人

时间:2018-05-04 08:35:45

标签: ansible

首先在这里发帖,我遇到了一个情况,我试图分配存储在角色中的变量,在我的情况下: / var / lib / awx / projects / test / playbooks / roles /&lt ;<我的角色>> /vars/main.yml 但我希望它们由主机分配,所以我尝试在我的主机文件中分配它们:

[test] 10.102.32.42 id=1 station=red ... 但那不起作用,我的变量没有定义。

我尝试使用 host_vars / ansible-playbook test_role.yml -i host -f 5 -e guest_vars_file=host_vars/test但同样的事情,它并没有采用我的变量。

我的测试文件 id: 1 station: red

我尝试了 group_vars / ansible-playbook test_role.yml -i host -f 5 -e guest_vars_file=group_vars/test我不知道这是不是一个好方法。

我尝试了一个简单的ansible-playbook test_role.yml -i host和文件,但没有

我通过在我的主机中分配变量来尝试使用AWX,但没有工作。

当我使用-e传递变量时,它可以正常工作,但我的变量必须由主机更改。

有什么办法吗?或者它不可能?我正在使用 ansible 2.4.3.0 我想知道当我启动任务时,ansible通过我的 vars / main.yml 中的变量来覆盖我的变量 我只放的地方 id: station:

修改:解决方案是将正确的名称放在 host_vars AND中!不要将变量放在 roles / my_role / vars / main.yml 中,因为它会覆盖 host_vars 中存储的变量。感谢

1 个答案:

答案 0 :(得分:0)

确保host_vars与playbook相关,在本例中为 mytest.yml

user> find roles/mytest
roles/mytest
roles/mytest/tasks
roles/mytest/tasks/main.yml

user> cat roles/mytest/tasks/main.yml 
---

- name: test myvar
  shell: echo "{{ myvar }}" > /tmp/myvar

user> cat hosts2
[test]
10.102.32.42

user> cat host_vars/10.102.32.42 
myvar: "this is 10.102.32.42"

user> cat mytest.yml 
---
- hosts: test
  roles:
    - mytest


user> ansible-playbook --inventory-file=hosts2 mytest.yml 

PLAY [test] *******************************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************************
ok: [10.0.0.4]

TASK [mytest : test myvar] ****************************************************************************************************
changed: [10.102.32.42]

PLAY RECAP ********************************************************************************************************************
10.102.32.42                   : ok=2    changed=1    unreachable=0    failed=0   

user> ssh 10.102.32.42 "cat /tmp/myvar"
this is 10.102.32.42

请注意, group_vars host_vars 文件夹与某个角色文件夹无关。请考虑在这些文件夹中设置的任何变量对于多个角色可能是通用的,或者它们可能与特定主机相关,不是特定角色。参考Ansible Best Practices; :

production                # inventory file for production servers
staging                   # inventory file for staging environment

group_vars/
   group1                 # here we assign variables to particular groups
   group2                 # ""
host_vars/
   hostname1              # if systems need specific variables, put them here
   hostname2              # ""

library/                  # if any custom modules, put them here (optional)
module_utils/             # if any custom module_utils to support modules, put them here (optional)
filter_plugins/           # if any custom filter plugins, put them here (optional)

site.yml                  # master playbook
webservers.yml            # playbook for webserver tier
dbservers.yml             # playbook for dbserver tier

roles/
    common/               # this hierarchy represents a "role"
        tasks/            #
            main.yml      #  <-- tasks file can include smaller files if warranted
        handlers/         #
            main.yml      #  <-- handlers file
        templates/        #  <-- files for use with the template resource
            ntp.conf.j2   #  <------- templates end in .j2
        files/            #