Ansible role_path 未定义错误
Ansible role_path undefined error
我有一个如下所示的任务文件:
- name: Drop schemas
mysql_db: state=import name=mysql target={{ role_path }}/files/schemas/drop-imdb-perf.sql login_user={{ MYSQL_ROOT_USER }} login_password={{ MYSQL_ROOT_PWD }} login_host={{ inventory_hostname }}
我正在从一个看起来像这样的剧本中调用它:
- name: Drop mySQL data
gather_facts: no
hosts: imdb
connection: local
tags:
- mysql-data-drop
tasks:
- include: ../roles/mysql/tasks/drop-perf.yml
我使用的是 Ansible 版本 1.9.4,所以我认为 role_path
应该是一个有效变量。
但是当我 运行 剧本时,我得到这个输出:
TASK: [Drop schemas] **************************************************
fatal: [imdb] => One or more undefined variables: 'role_path' is undefined
我不明白为什么 role_path
是未定义的。根据 ansible docs,对于 1.8 及更高版本,它似乎应该填充有问题的角色的目录,但我显然弄错了某些东西。
我没有看到你使用任何角色。如果不查看 Ansible 代码,很明显 role_path
是在角色中定义的。但是,包含角色的文件不会使其成为角色上下文中的 运行。
如果您的包含是有意的,role_path
将不会被定义。您可以尝试自己将其与 include 一起设置,如下所示:
tasks:
- include: ../roles/mysql/tasks/drop-perf.yml
role_path: ../roles/mysql
这可能有效,也可能无效,因为 role_path
仍然是一个魔法变量,因此可能无法手动更改。
如果您确实打算包含该角色,那么您需要像这样定义您的剧本:
- name: Drop mySQL data
gather_facts: no
hosts: imdb
connection: local
tags:
- mysql-data-drop
roles:
- role: ../roles/mysql
但我的猜测是,您只是想 运行 该角色的单个任务文件,而不是整个角色。但是您在那里尝试做的事情似乎与最佳实践背道而驰。我的建议是将标签 mysql-data-drop
移动到文件 drop-perf.yml
的任务中,因为这就是标签的用途:触发一组有限的角色或剧本任务。
我有一个如下所示的任务文件:
- name: Drop schemas
mysql_db: state=import name=mysql target={{ role_path }}/files/schemas/drop-imdb-perf.sql login_user={{ MYSQL_ROOT_USER }} login_password={{ MYSQL_ROOT_PWD }} login_host={{ inventory_hostname }}
我正在从一个看起来像这样的剧本中调用它:
- name: Drop mySQL data
gather_facts: no
hosts: imdb
connection: local
tags:
- mysql-data-drop
tasks:
- include: ../roles/mysql/tasks/drop-perf.yml
我使用的是 Ansible 版本 1.9.4,所以我认为 role_path
应该是一个有效变量。
但是当我 运行 剧本时,我得到这个输出:
TASK: [Drop schemas] **************************************************
fatal: [imdb] => One or more undefined variables: 'role_path' is undefined
我不明白为什么 role_path
是未定义的。根据 ansible docs,对于 1.8 及更高版本,它似乎应该填充有问题的角色的目录,但我显然弄错了某些东西。
我没有看到你使用任何角色。如果不查看 Ansible 代码,很明显 role_path
是在角色中定义的。但是,包含角色的文件不会使其成为角色上下文中的 运行。
如果您的包含是有意的,role_path
将不会被定义。您可以尝试自己将其与 include 一起设置,如下所示:
tasks:
- include: ../roles/mysql/tasks/drop-perf.yml
role_path: ../roles/mysql
这可能有效,也可能无效,因为 role_path
仍然是一个魔法变量,因此可能无法手动更改。
如果您确实打算包含该角色,那么您需要像这样定义您的剧本:
- name: Drop mySQL data
gather_facts: no
hosts: imdb
connection: local
tags:
- mysql-data-drop
roles:
- role: ../roles/mysql
但我的猜测是,您只是想 运行 该角色的单个任务文件,而不是整个角色。但是您在那里尝试做的事情似乎与最佳实践背道而驰。我的建议是将标签 mysql-data-drop
移动到文件 drop-perf.yml
的任务中,因为这就是标签的用途:触发一组有限的角色或剧本任务。