Ansible - 具有动态库存的组变量

Ansible - Group Variables with Dynamic Inventory

我正在尝试开始使用 ansible,我当前的项目正在部署一个 Graylog 集群。我在 AWS 中运营,需要处理动态库存。我想我缺少 link betweek 我的剧本和动态实例获取组变量中定义的变量。

这是我的目录结构。 https://pastebin.com/cuNH4bzX

这是我的 tag_Application_graylog 文件 https://pastebin.com/Vw0cbnZq

当我在播放目录中时,我可以使用该标签连接到实例。

ubuntu@ip-10-128-0-86:~/deployments/plays$ ansible -m ping tag_Application_graylog
ec2_justin_graylog01_dev | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}
ec2_justin_graylog02_dev | SUCCESS => {
    "changed": false, 
    "failed": false, 
    "ping": "pong"
}

当我尝试 运行 播放时,出现以下错误。

TASK [elastic.elasticsearch : os-specific vars] *******************************************************************************************************************************************************************
task path: /home/ubuntu/deployments/roles/elastic.elasticsearch/tasks/main.yml:2
ok: [ec2_justin_graylog01_dev] => {"ansible_facts": {"default_file": "/etc/default/elasticsearch", "es_home": "/usr/share/elasticsearch", "java": "{% if es_java is defined %}{{es_java}}{% else %}openjdk-8-jre-headless{% endif %}"}, "ansible_included_var_files": ["/home/ubuntu/deployments/roles/elastic.elasticsearch/vars/Debian.yml"], "changed": false, "failed": false}
ok: [ec2_justin_graylog02_dev] => {"ansible_facts": {"default_file": "/etc/default/elasticsearch", "es_home": "/usr/share/elasticsearch", "java": "{% if es_java is defined %}{{es_java}}{% else %}openjdk-8-jre-headless{% endif %}"}, "ansible_included_var_files": ["/home/ubuntu/deployments/roles/elastic.elasticsearch/vars/Debian.yml"], "changed": false, "failed": false}

TASK [elastic.elasticsearch : fail] *******************************************************************************************************************************************************************************
task path: /home/ubuntu/deployments/roles/elastic.elasticsearch/tasks/elasticsearch-parameters.yml:3
fatal: [ec2_justin_graylog01_dev]: FAILED! => {"changed": false, "failed": true, "msg": "es_instance_name must be specified and cannot be blank"}
fatal: [ec2_justin_graylog02_dev]: FAILED! => {"changed": false, "failed": true, "msg": "es_instance_name must be specified and cannot be blank"}
    to retry, use: --limit @/home/ubuntu/deployments/plays/graylog.retry

PLAY RECAP ********************************************************************************************************************************************************************************************************
ec2_justin_graylog01_dev   : ok=6    changed=0    unreachable=0    failed=1   
ec2_justin_graylog02_dev   : ok=6    changed=0    unreachable=0    failed=1   

因为 'es_instance_name' 是在我的组变量中定义的,所以我相信它们没有被读入。

我用于 运行 playbook 的命令,来自 plays 文件夹。

ansible-playbook -vv graylog.yml

命令的完整输出。 https://pastebin.com/NxNFVbBG

graylog.ymlhttps://pastebin.com/Liq8qCDi

的内容

任何帮助都会很棒。

找到问题。

https://github.com/ansible/ansible/issues/16878

基本上,group_vars 需要与剧本相邻的文件夹。所以我要么需要将我的游戏提升一个级别,要么将组 var 文件夹降低一个级别。

根据已发布的最佳实践,我将我的游戏提升了一个级别。

https://docs.ansible.com/ansible/latest/playbooks_best_practices.html#content-organization