首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过角色与剧本中的任务和vars脱钩遇到错误

通过角色与剧本中的任务和vars脱钩遇到错误
EN

Stack Overflow用户
提问于 2020-12-21 05:19:14
回答 1查看 106关注 0票数 1

首先,我有一个用于角色的基本的ansible目录结构。

在ansible目录中:

代码语言:javascript
复制
- 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
代码语言:javascript
复制
[all]
#
[prep]
ansible-prep ansible_connection=local ansible_host=localhost
  • ansible/playbook.yml
代码语言:javascript
复制
 - 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.yml
  • ansible/gui_utils/tasks/main.yml
代码语言:javascript
复制
 - 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
  • ansible/gui_utils/vars/main.yml
代码语言:javascript
复制
gui_utils_list:
   - notepadqq
   - redshift

执行ansible-lint ansible/playbook.yml将返回以下错误。

代码语言:javascript
复制
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中删除- nameimport_tasks行,ansible-lint ansible/playbook.yml也不会返回错误。在这一点上,我认为我的错误在ansible/playbook.yml的最后两行中,但我不知道哪里出了问题,特别是,或者如何修复它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 07:19:52

问:"gui_utils/tasks/main.yml:4 (无法解析模块/动作'tasks'." )

A:从ansible/gui_utils/ tasks /main.yml中移除关键字任务。任务import_tasks已经在剧本的“任务”部分。

代码语言:javascript
复制
---
- 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是默认设置

代码语言:javascript
复制
      - name: "Import role gui_utils."
        import_role:
          name: gui_utils

通过这种方式,您还可以省略ansible/gui_utils/ gui_utils_list /main.yml中的任务"Load变量“。默认设置也在角色中读取vars/main.yml。请参阅理解变量优先

代码语言:javascript
复制
---
- name: "Install GUI utility packages"
  ansible.builtin.apt:
    name: "{{ gui_utils_list }}"
    state: present

唯一的区别是import_role将提供其他角色的工件(缺省值、处理程序、.)为了这出戏。但是,这就是角色的作用。见备注

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65387848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档