在 Ansible 角色中执行特定任务



如何执行某些任务。例如,对于以下角色,假设我正在部署应用程序,那么我只需要创建常规目录和应用程序 1 目录。如何仅部署这两个任务?

我有以下 Ansible 目录结构:

├── ansible.cfg
├── playbook.yml
└── roles
└── groups
└── tasks
└── main.yml

我的组/任务/main.yml 文件如下所示:

---
- name: Create Directory General
file:
path: /tmp/general
state: directory
mode: '0755'
- name: Create Directory Application1
file:
path: /tmp/Application1
state: directory
mode: '0755'
- name: Create Directory Application2
file:
path: /tmp/Application2
state: directory
mode: '0755'

剧本.yml

---
- name: Deploy application
hosts: localhost
become: yes
become_method: sudo
become_user: root
roles:
- groups

注意:我已经知道include_role,但它将为角色中的所有任务设置一个标签。我不想那样做。

IMO 对这个问题没有一个好的答案,但既然你提到了标签......

---
- name: Create Directory General
file:
path: /tmp/general
state: directory
mode: '0755'
tags:
- always
- name: Create Directory Application1
file:
path: /tmp/Application1
state: directory
mode: '0755'
tags:
- app1
- name: Create Directory Application2
file:
path: /tmp/Application2
state: directory
mode: '0755'
tags:
- app2

然后,您可以使用以下命令调用您的剧本:

# Deploy all apps with common tasks
ansible-playbook playbook.yml
# Deploy only application 1 with common tasks
ansible-playbook --tags app1 playbook.yml
# Deploy application 2 without running common tasks
ansible-playbook --tags app2 --skip-tags always playbook.yml

小心最新的,因为它默认情况下也会跳过事实收集。有关更多详细信息,请参阅上面的文档链接。

最新更新