尽管已在 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(但它并没有那么远)。我也检查了所有文件权限,它们似乎没问题。
如果问题格式不正确,请提前致歉。
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_role
或 roles: []
。
- hosts: all
become: true
tasks:
- include_role:
name: myrole
或
- hosts: all
become: true
roles:
- myrole
我正在尝试为我们组织的内部星系创建一个 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(但它并没有那么远)。我也检查了所有文件权限,它们似乎没问题。
如果问题格式不正确,请提前致歉。
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_role
或 roles: []
。
- hosts: all
become: true
tasks:
- include_role:
name: myrole
或
- hosts: all
become: true
roles:
- myrole