Ansible шаблоны инвентаря и аргумент ограничения - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующий файл инвентаря с именем 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.

1 Ответ

0 голосов
/ 19 июня 2020

Я думаю, что аргумент --limit был отвлекающим маневром, а не тем, что я хотел для решения проблемы.
Я обнаружил, что вы можете указать несколько файлов инвентаризации. Итак, у меня есть основная инвентаризация hosts:

[minio_cluster_members]
host-1
host-2
host-3
host-4

[nginx_reverse_proxies]
host-1
host-3

[all:vars]
ansible_connection=ssh

У меня есть инвентарь для локальных хостов под названием hosts-local:

[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

и один для теста hosts-test:

[test]
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

И я могу объединить их с: $ ansible-playbook playbook.yml -i hosts -i hosts-local

Вот и все! Вот и все.
Кроме того, я получаю дополнительное преимущество от наличия групп test, local и c, поэтому я могу устанавливать переменные на основе имени группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...