在角色的 ansible 剧本中,只需调用特定的任务文件,而不是 main.yml

在角色的 ansible 剧本中,只需调用特定的任务文件,而不是 main.yml

我有一个简单的角色来安装 Weblogic 服务器;现在我想添加一个 deinstall.yml 任务文件。

目前,我创建了一个新的简单剧本,并想用它执行文件tasks / deinstall.yml。请问我该如何实现?我最近的方法是使用标签……这是一种可行的方法吗?当我测试它时,main.yml被执行,其中的块和任务没有标签。

- hosts: alf_sandbox
  roles:
  - role: Weblogic
    vars:
      domain: TODO
    tags: deinstall

角色目录的一部分

├── tasks
│   ├── deinstall.yml
│   ├── main.yml

答案1

您的标签示例并未进行过滤,而是将标签 deinstall 添加到角色中的每个任务。请参阅https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_tags.html#adding-tags-to-roles

您可以通过从 main.yml 中包含 deinstall 并设置 never 标签来使用标签:

 - include_tasks: deinstall
   tags: [ never, deinstall ]

然后要求 Ansible 仅运行带有 deinstall 标签的任务 ansible-playbook ./weblogic.yml --tags deinstall

另一个选项是使用tasks_from选项的include_role:

   tasks:
   - name: Run tasks/deinstall.yml from Weblogic
      ansible.builtin.include_role:
        name: Weblogic
        tasks_from: deinstall  

但通常卸载可以是一个单独的剧本。这样可以保持你的角色清晰,并且安装/配置和卸载任务之间通常很少有重叠。

相关内容