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 шт):
создать папку 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
Решил в итоге так: Изменил в 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