Ansible. Скопировать директорию на нужный сервер, в зависимости от условия

Только начинаю изучать Ansible.

Есть задание, имея значение blue или green, копировать директорию либо на server1 либо на server2. Я решил это дело, но чувствую что сделано топорно. Есть ли решение этой задачи с меньшим колличеством кода? Я по сути, два раза повторяю одно и тоже в коде.

Команда:

shell> ansible-playbook playbook.yml --extra-var "VAR3=blue"

shell> cat hosts.txt

[servers]

server1 ansible_host=192.168.0.2 
server2 ansible_host=192.168.0.3 

shell> cat playbook.yml

---

- name: deploy to blue
  hosts: server1
  become: yes

  vars:
    source_file: /home/ubuntu/my_app
    destin_file: /home/ubuntu

  tasks:
  - name: Copy file to servers
    copy: src={{ source_file }} dest={{ destin_file }} mode=755
    when: '"{{ VAR3 }}" == "blue"'

- name: deploy to green
  hosts: server2
  become: yes

  vars:
    source_file: /home/ubuntu/my_app
    destin_file: /home/ubuntu

  tasks:
  - name: Copy file to servers
    copy: src={{ source_file }} dest={{ destin_file }} mode=755
    when: '"{{ VAR3 }}" == "green"'

Ответы (2 шт):

Автор решения: zersh

создать папку host_vars,с файлами

server1.yml
server2.yml

в каждом задать своё значение VAR3, например:

VAR3: "blue"

тогда код можно сделать таким:

---

- name: deploy to servers
  #группа хостов из hosts.txt
  hosts: [ servers ]
  become: yes

  #эти переменные также можно задать для каждого сервера свои в host_vars, тогда этот блок можно будет убрать.
  vars:
    source_file: /home/ubuntu/my_app
    destin_file: /home/ubuntu

  tasks:
  - name: Copy file to servers
    copy: src={{ source_file }} dest={{ destin_file }} mode=755
    when: '"{{ VAR3 }}" == "blue"'

  - name: Copy file to servers
    copy: src={{ source_file }} dest={{ destin_file }} mode=755
    when: '"{{ VAR3 }}" == "green"'

Запуск: Для всей группы:

ansible-playbook -i hosts.txt playbook.yml -l servers

или для выбранного хоста:

ansible-playbook -i hosts.txt playbook.yml -l server2
→ Ссылка
Автор решения: eteri

Решил в итоге так: Изменил в hosts.txt вместо server1, server2 стало blue, green

shell> cat hosts.txt

[servers]

blue ansible_host=192.168.0.2 
green ansible_host=192.168.0.3 

В плейбуке в hosts вставил {{ VAR3 }}, и всё. Код уменьшился в 2 раза.

shell> cat playbook.yml

---

- name: blue-green deploy
  hosts: {{ VAR3 }}
  become: yes

  vars:
    source_file: /home/ubuntu/my_app
    destin_file: /home/ubuntu

  tasks:
  - name: Copy file to servers
    copy: src={{ source_file }} dest={{ destin_file }} mode=755
→ Ссылка