У меня есть следующий файл инвентаря с именем hosts-local
:
host-1 ansible_host=minio-1.localdomain
host-2 ansible_host=minio-2.localdomain
host-3 ansible_host=minio-3.localdomain
host-4 ansible_host=minio-4.localdomain
[minio_cluster_members]
host-1
host-2
host-3
host-4
[nginx_reverse_proxies]
host-1
host-3
[all:vars]
ansible_connection=ssh
и книга воспроизведения, которая ссылается на группы:
- name: "Install and configure Minio"
hosts: minio_cluster_members
become: yes
remote_user: ansible
roles:
- minio
- name: "Install and configure nginx reverse proxy"
hosts: nginx_reverse_proxies
become: yes
remote_user: ansible
roles:
- nginx
И я вызываю ansible вот так $ ansible-playbook -i hosts-local playbook.yml
Я изначально думал, что у меня будут файлы hosts-local
, hosts-test
и hosts-prod
, чтобы host-1
, host-2
et c можно было определить на основе среды развертывания ( хотя и с дублированием остальных групп).
Но затем кто-то предложил мне взглянуть на образцы ansible и, в частности, на аргумент --limit
, ссылаясь на на ansible документы . Это выглядит особенно актуальным:
Наконец, вы можете использовать --limit для чтения списка хостов из файла, добавив к имени файла префикс @:
ansible -playbook site.yml --limit @ retry_hosts.txt
Я читал, что у меня будет один файл инвентаря, например:
[minio_cluster_members]
host-1
host-2
host-3
host-4
[nginx_reverse_proxies]
host-1
host-3
[all:vars]
ansible_connection=ssh
, а затем ряд файлов, которые определяют host-1
, host-2
et c для каждой среды:
# local dev hosts
host-1 ansible_host=minio-1.localdomain
host-2 ansible_host=minio-2.localdomain
host-3 ansible_host=minio-3.localdomain
host-4 ansible_host=minio-4.localdomain
# test hosts
host-1 ansible_host=test-minio-1.test.domain.com
host-2 ansible_host=test-minio-2.test.domain.com
host-3 ansible_host=test-minio-3.test.domain.com
host-4 ansible_host=test-minio-4.test.domain.com
et c.
И затем я вызываю ansible вот так: $ ansible-playbook -i inventory playbook.yml --limit 'all:@hosts-local'
Но хоть убей, я не могу заставить это работать. Он жалуется на каждую строку в файле ограничений (включая комментарий):
[WARNING]: Could not match supplied host pattern, ignoring: # local dev hosts
[WARNING]: Could not match supplied host pattern, ignoring: host-1 ansible_host=minio-1.localdomain
[WARNING]: Could not match supplied host pattern, ignoring: host-2 ansible_host=minio-2.localdomain
[WARNING]: Could not match supplied host pattern, ignoring: host-3 ansible_host=minio-3.localdomain
[WARNING]: Could not match supplied host pattern, ignoring: host-4 ansible_host=minio-4.localdomain
Что я делаю не так? Я неправильно понял, как работают шаблоны и, в частности, аргумент --limit
с файлом? В каком формате / синтаксисе должен быть файл? Я нигде не могу найти таких примеров на inte rnet.