首先,我有一个用于角色的基本的ansible目录结构。
在ansible目录中:
- inventory
- playbook.yml
- [roles]
- [gui_utils]
- [defaults]
- main.yml
- [files]
- main.yml
- [handlers]
- main.yml
- [library]
- my_module.py
- [meta]
- main.yml
- [tasks]
- main.yml
- [templates]
- main.yml
- [vars]
- main.yml唯一包含任何相关数据的文件是:
ansible/inventory[all]
#
[prep]
ansible-prep ansible_connection=local ansible_host=localhostansible/playbook.yml - hosts: prep
tasks:
- name: "Update cache if older than 3600 seconds"
ansible.builtin.apt:
update_cache: yes
cache_valid_time: 3600
update_cache_retries: 10
update_cache_retry_max_delay: 18
- name: "Import and run task to install 'gui_utils'".
import_tasks: roles/gui_utils/tasks/main.ymlansible/gui_utils/tasks/main.yml - tasks:
- name: "Load gui_utils_list variable"
include_vars: "{{ role_path }}/vars/main.yml"
- name: "Install GUI utility packages"
ansible.builtin.apt:
name: "{{ gui_utils_list }}"
state: presentansible/gui_utils/vars/main.ymlgui_utils_list:
- notepadqq
- redshift执行ansible-lint ansible/playbook.yml将返回以下错误。
root@ansible-prep:/home/user/Desktop/ansible-project# ansible-lint ansible/playbook.yml
CRITICAL Couldn't parse task at /home/user/Desktop/ansible-project/ansible/roles/gui_utils/tasks/main.yml:4 (couldn't resolve module/action 'tasks'. This often indicates a misspelling, missing collection, or incorrect module path.)
{ 'tasks': [ { '__file__': '/home/user/Desktop/ansible-project/ansible/roles/gui_utils/tasks/main.yml',
'__line__': 16,
'include_vars': '{{ role_path }}/vars/main.yml',
'name': 'Load gui_utils_list variable'},
{ '__file__': '/home/user/Desktop/ansible-project/ansible/roles/gui_utils/tasks/main.yml',
'__line__': 19,
'ansible.builtin.apt': { '__file__': '/home/user/Desktop/ansible-project/ansible/roles/gui_utils/tasks/main.yml',
'__line__': 21,
'name': '{{ gui_utils_list }}',
'state': 'present'},
'name': 'Install GUI utility packages'}]}
root@ansible-prep:/home/user/Desktop/ansible-project# 不幸的是,这无助于我解决这个问题。ansible-lint ansible/roles/gui_utils/tasks/main.yml返回时没有任何错误,如果我从ansible/playbook.yml中删除- name和import_tasks行,ansible-lint ansible/playbook.yml也不会返回错误。在这一点上,我认为我的错误在ansible/playbook.yml的最后两行中,但我不知道哪里出了问题,特别是,或者如何修复它。
发布于 2020-12-21 07:19:52
问:"gui_utils/tasks/main.yml:4 (无法解析模块/动作'tasks'." )
A:从ansible/gui_utils/ tasks /main.yml中移除关键字任务。任务import_tasks已经在剧本的“任务”部分。
---
- name: "Load gui_utils_list variable"
include_vars: "{{ role_path }}/vars/main.yml"
- name: "Install GUI utility packages"
ansible.builtin.apt:
name: "{{ gui_utils_list }}"
state: present导入 而不是import_tasks
使用import_role而不是import_tasks,代码将更简单。运行任务/main.yml是默认设置
- name: "Import role gui_utils."
import_role:
name: gui_utils通过这种方式,您还可以省略ansible/gui_utils/ gui_utils_list /main.yml中的任务"Load变量“。默认设置也在角色中读取vars/main.yml。请参阅理解变量优先
---
- name: "Install GUI utility packages"
ansible.builtin.apt:
name: "{{ gui_utils_list }}"
state: present唯一的区别是import_role将提供其他角色的工件(缺省值、处理程序、.)为了这出戏。但是,这就是角色的作用。见备注。
https://stackoverflow.com/questions/65387848
复制相似问题