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

问题描述 投票:0回答:1

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

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 也无法找到/看到它们(但还没有那么远)。我还检查了所有文件权限,它们似乎都很好。

如果问题格式错误,请提前道歉。

variables ansible yaml undefined default
1个回答
3
投票

根据文档

如果您包含角色中的任务文件,它将不会触发角色行为,这只在作为角色运行时发生,include_role 将起作用。

要获得从

defaults/main.yml
读取变量的角色功能,您需要使用
include_role
roles: []

- hosts: all
  become: true

  tasks:
    - include_role:
        name: myrole

- hosts: all
  become: true

  roles:
    - myrole
© www.soinside.com 2019 - 2024. All rights reserved.