尽管已在 defaults/main.yml 中定义,但 Ansible 任务包含未定义的变量

Ansible task includes undefined var, despite being defined in defaults/main.yml

我正在尝试为我们组织的内部星系创建一个 Galaxy 角色,我首先在本地进行测试。在我们的组织中,我们使用所有角色的通用默认值列表。

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 变量在 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 成为 found/seen(但它并没有那么远)。我也检查了所有文件权限,它们似乎没问题。

如果问题格式不正确,请提前致歉。

根据documentation

If you include a task file from a role, it will NOT trigger role behavior, this only happens when running as a role, include_role will work.

要获得从 defaults/main.yml 读取变量的角色功能,您需要使用 include_roleroles: []

- hosts: all
  become: true

  tasks:
    - include_role:
        name: myrole

- hosts: all
  become: true

  roles:
    - myrole