能否在Ansible角色中定义组变量?配置生效问题咨询
Ansible角色变量未加载的问题解决
你的问题核心是Ansible角色的defaults目录只会自动加载main.yml文件,你放在defaults下的debian.yml和redhat.yml不会被自动识别读取,所以分组为redhat或debian的主机无法获取对应变量。不需要在目标主机结构中额外指定角色变量,推荐两种解决方式:
- 方式一:通过任务动态加载变量
在角色的tasks/main.yml开头添加如下任务,根据主机的发行版家族自动加载对应变量文件:
- name: 加载对应发行版的默认变量 include_vars: "{{ ansible_os_family | lower }}.yml" when: ansible_os_family in ['Debian', 'RedHat']
Debian系主机会自动加载debian.yml,RedHat系主机会加载redhat.yml。
- 方式二:改用vars目录自动匹配发行版
Ansible支持在角色的vars目录下创建首字母大写的发行版专属文件(如Debian.yml、RedHat.yml),这些文件会根据主机的ansible_os_family自动加载,无需额外编写任务。你只需将defaults下的debian.yml和redhat.yml移动到vars目录,保持变量定义不变即可生效。
注意:vars目录下的变量优先级高于defaults目录,可根据你的变量生效优先级需求选择对应目录。
内容的提问来源于stack exchange,提问作者MaKaNu
相关产品推荐
相关产品推荐

