针对 Ansible playbook 中的特定主机执行特定任务

Joh*_*olf 1 ansible

我需要使用 Ansible playbook 将应用程序部署到两个虚拟机。每个虚拟机都有不同的用途,我的应用程序由多个不同的组件组成,因此每个组件在剧本中都有自己的一组任务。

我的库存文件如下所示:

[vig]
192.168.10.11

[websvr]
192.168.10.22
Run Code Online (Sandbox Code Playgroud)

Ansible playbook 只有一个用于声明主机,它位于顶部,所有任务都针对指定主机执行。但我希望达到的目标是:

  1. vig针对组执行任务 1 至 10
  2. websvr针对组执行任务 11 至 20

全部都在同一个剧本中,如:ansible-playbook -i <inventory file> deploy.yml

那可能吗?我是否必须使用 Ansible 角色才能实现此目的?

cha*_*ash 7

Playbook 可以有多个播放(请参阅https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html)。

Playbook 可以包含多个 Play。您可能有一个首先针对 Web 服务器,然后针对数据库服务器的剧本。例如:

---
- hosts: webservers
  remote_user: root

  tasks:
  - name: ensure apache is at the latest version
    yum:
      name: httpd
      state: latest
  - name: write the apache config file
    template:
      src: /srv/httpd.j2
      dest: /etc/httpd.conf

- hosts: databases
  remote_user: root

  tasks:
  - name: ensure postgresql is at the latest version
    yum:
      name: postgresql
      state: latest
  - name: ensure that postgresql is started
    service:
      name: postgresql
      state: started
Run Code Online (Sandbox Code Playgroud)