У меня есть два инвентаря, постановочный и производственный.
постановочное содержание:
[webserver]
192.168.56.101 #server 1
192.168.56.103 #server 2
содержание продукции:
[webserver]
192.168.56.108 #server test
Я беру архивный файл с сервера 1 и хочу доставить его на тестовый сервер, а затем распаковать.
мой доступный скрипт похож на:
- name: fetch archived file to local machine
fetch:
src: /tmp/code_release_version_{{ release_version }}.tar.gz
dest: /tmp/code_release_version_{{ release_version }}.tar.gz
flat: yes
tags: test
- name: copy archived file to another remote server on /tmp directory
copy:
src: /tmp/code_release_version_{{ release_version }}.tar.gz
dest: /tmp/code_release_version_{{ release_version }}.tar.gz
delegate_to: 192.168.56.108
tags: test
- name: extract files
unarchive:
src: /tmp/code_release_version_{{ release_version }}.tar.gz
dest: /var/www
copy: no
delegate_to: 192.168.56.108
tags: test
Я играю:
ansible-playbook -i staging --extra-vars "host=webserver[0] user=emma release_version=1" --ask-sudo-pass playbook.yml --tags "test"
как получить хост из инвентаря вместо того, чтобы писать хост вручную, как я delegate_to: 192.168.56.108
?
Спасибо раньше.
Я не думаю, что вы можете использовать одно и то же имя группы для разных групп серверов (будь то в разных средах или нет).
вы используете файл инвентаризации для одной среды при запуске playbook:
ansible-playbook -i staging ... --extra-vars "host=webserver[0]" playbook.yml
вместо этого вы можете попробовать создать третий файл инвентаризации для такого рода задач, в который включены все ваши серверы.
Я предполагаю, что playbook.yml - это что-то вроде:
hosts: "{{ host }}"
tasks:
- name: fetch archived file to local machine
fetch:
...
- name: copy archived file to another remote server on /tmp directory
copy:
..
delegate_to: 192.168.56.108
так что обходной путь, чтобы избежать использования delegate_to всего включенного файла инвентаризации (давайте назовем его: all):
[webserverdev]
192.168.56.101 #server 1
192.168.56.103 #server 2
[webserverprod]
192.168.56.108 #server test
затем сценарий, подобный следующему:
hosts: webserverdev[0]
tasks:
- name: fetch archived file to local machine
fetch:
...
hosts: webserverprod[0]
- name: copy archived file to another remote server on /tmp directory
copy:
..
запуск playbook с использованием нового инвентаря:
ansible-playbook -i all ... playbook.yml