gpt4 book ai didi

Ansible 包含每个主机的变量

转载 作者:行者123 更新时间:2023-12-02 20:55:37 24 4
gpt4 key购买 nike

我在 Ubuntu 中使用 Ansible 2.2 时遇到问题。

我的剧本包含以下内容:

---
- hosts: all
become: yes
roles:
- mysql

我已经使用了这里的 MySQL 角色 https://galaxy.ansible.com/geerlingguy/但在本地将其全部重命名为MySQL。在剧本的默认文件夹中有一个包含参数的文件:

mysql_datadir: /var/lib/mysql

这样,Ansible 就可以正常工作了。但现在我想要每个主机的特定配置,如下所述:http://docs.ansible.com/ansible/playbooks_best_practices.html

因此,我创建了文件 inventories/host_vars/test.yml,删除了任务默认文件夹中的文件,并将 playbook 更新为以下内容:

  ---
- hosts: all
become: yes
roles:
- mysql
tasks:
- name: include vars
include_vars: inventories/host_vars/test.yml

现在 Ansible 不会接受这一点;它说变量未设置:

fatal: []: FAILED! => {"failed": true, "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'mysql_datadir' is undefined\n\nThe error appears to have been in '/home/michael/Ansible/Playbooks/roles/mysql/tasks/setup-Debian.yml': line 24, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Delete innodb log files created by apt package after initial install.\n ^ here\n"}

通过命令行传递参数没有问题。我该如何解决这个问题?

最佳答案

我相信您有多个问题。我建议从标准的、更简单的目录结构开始。

我会尝试执行以下操作:

  • 使用标准目录布局,因此将 host_vars 移至顶部文件夹
  • 在 host_vars 目录中,为每个主机放置一个文件,该文件完全按照 list 中定义的主机名命名,文件以“---”开头,然后将变量放入其中。不要将 .yml 扩展名添加到文件中!
  • 不要明确“包含”任何内容。它是自动的。 site.yml 中没有“任务”。

关于Ansible 包含每个主机的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40490601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com