Variables Ansible任务包括未定义的var,尽管在defaults/main.yml中有定义

Variables Ansible任务包括未定义的var,尽管在defaults/main.yml中有定义,variables,ansible,yaml,undefined,default,Variables,Ansible,Yaml,Undefined,Default,我正在尝试为我们组织的内部星系创建一个星系角色,我首先在本地进行测试。在我们的组织中,我们在所有角色中使用一个通用的默认列表 Ansible在运行我的playbook时向我抛出了一个“任务包括一个带有未定义变量的选项”错误:“redis_download_url”未定义,尽管我在defaults/main.yml中定义了变量: 运行我的简单角色/playbook.yml时 链接到tasks/main.yml 它应该从tasks/download.yml中提取tar文件,如下所述: --- - n

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

Ansible在运行我的playbook时向我抛出了一个“任务包括一个带有未定义变量的选项”错误:“redis_download_url”未定义,尽管我在defaults/main.yml中定义了变量:

运行我的简单角色/playbook.yml时

链接到tasks/main.yml

它应该从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 eg中也定义了类似的变量

我想ansible也找不到/看不到它们(但没走那么远)。我还检查了所有文件权限,它们似乎都很好

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

根据:

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

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

-主机:所有
变成:真的
任务:
-包括以下角色:
姓名:myrole

-主机:所有
变成:真的
角色:
-我的角色
根据:

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

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

-主机:所有
变成:真的
任务:
-包括以下角色:
姓名:myrole

-主机:所有
变成:真的
角色:
-我的角色

如果您想在playbook中使用角色,为什么不使用
include_role
roles:[“rolename”]
?您包含了一个任务文件,该路径恰好位于角色中,但ansible并不真正关心这个最新的断言。如果要执行该角色,请将其添加到剧本中的
角色
部分,或使用
(包括导入)\u角色
。如果您想在playbook中使用角色,为什么不使用
include_role
roles:[“rolename”]
?您包含了一个任务文件,该路径恰好位于角色中,但ansible并不真正关心这个最新的断言。如果要执行该角色,请将其添加到剧本中的
角色
部分,或使用
(包括导入)\u角色
。谢谢你的回答,第一个例子似乎不是有效的yaml,但是它为我指明了正确的方向。欢迎。很高兴这有帮助。真奇怪。使用第一个示例运行
--语法检查
可以检查是否正确。感谢您的回答,第一个示例似乎不是有效的yaml,但它为我指明了正确的方向。欢迎。很高兴这有帮助。真奇怪。对第一个示例运行
--语法检查
,检查是否正常。
---
- hosts: all
  become: true
  tasks:
    - include: 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
---
- 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_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"