我正在尝试为我们组织的内部星系创建一个星系角色,我首先在本地进行测试。在我们的组织中,我们在所有角色中使用通用的默认列表。
Ansible 向我抛出一个 “任务包含一个带有未定义变量的选项,错误是:'redis_download_url'未定义” 运行我的剧本时出现错误,尽管我已经在 defaults/main.yml 中定义了变量:
# Download
redis_version: "6.2.3"
redis_download_url: "https://download.redis.io/releases/redis-{{ redis_version }}.tar.gz"
运行我的简单 role/playbook.yml
时---
- hosts: all
become: true
tasks:
- include: tasks/main.yml
链接到tasks/main.yml
---
- name: Check ansible version
assert:
that: "ansible_version.full is version_compare('2.4', '>=')"
msg: "Please use Ansible 2.4 or later"
- include: download.yml
tags:
- download
- include: install.yml
tags:
- install
它应该从 tasks/download.yml 中提取 tar 文件,如下所示:
---
- name: Download Redis
get_url:
url: "{{ redis_download_url }}"
dest: /usr/local/src/redis-{{ redis_version }}.tar.gz
- name: Extract Redis tarball
unarchive:
src: /usr/local/src/redis-{{ redis_version }}.tar.gz
dest: /usr/local/src
creates: /usr/local/src/redis-{{ redis_version }}/Makefile
copy: no
redis_download_url var 是在 defaults/main.yml 中定义的,据我了解,ansible 应该能够在那里找到。我也在 defaults/task.yml 例如中定义了类似的变量。
redis_user: redis
redis_group: "{{ redis_user }}"
redis_port: "6379"
redis_root_dir: "/opt/redis"
redis_config_dir: "/etc/redis"
redis_conf_file: "{{ redis_config_dir }}/{{ redis_port }}.conf"
redis_password: "change-me"
redis_protected_mode: "yes"
我认为 ansible 也无法找到/看到它们(但还没有那么远)。我还检查了所有文件权限,它们似乎都很好。
如果问题格式错误,请提前道歉。
根据文档:
如果您包含角色中的任务文件,它将不会触发角色行为,这只在作为角色运行时发生,include_role 将起作用。
要获得从
defaults/main.yml
读取变量的角色功能,您需要使用include_role
或roles: []
。
- hosts: all
become: true
tasks:
- include_role:
name: myrole
或
- hosts: all
become: true
roles:
- myrole