Проблемы с динамической инвентаризацией Ansible ec2

Я использую ansible для настройки и развертывания нескольких серверов в ec2. Поскольку эти серверы часто меняются, я бы хотел использовать динамическую инвентаризацию. Я установил ec2.py и ec2.ini на моем сервере jenkins (здесь запускаются скрипты ansible), но при запуске playbook у меня возникает проблема:

ERROR! Specified --limit does not match any hosts

Это явно означает, что мои хосты выбираются неправильно. Когда я бегу:

./ec2.py --list >> aws_example.json

в aws_example.json все выглядит хорошо.

Я пытаюсь выбрать серверы на основе двух тегов: Name и environment. Например, у меня есть сервер с тегом «Имя» - «api» и тегом «среда» - «производство».


Я настроил destination_format_tags так:

destination_format_tags = Name,environment

и запустите ansible следующим образом:

ansible-playbook site.yml -i ec2.py -l api

Я также пробовал изменить hostname_variable:

hostname_variable = tag_Name.tag_environment

и запустив команду так:

ansible-playbook site.yml -i ec2.py -l api.production

Кроме того, я также пробовал использовать только один тег с hostname_variable:

hostname_variable = tag_Name

и запустив команду так:

ansible-playbook site.yml -i ec2.py -l api

Ни одна из этих конфигураций не работает. Я также не могу найти много документации по этим параметрам, поэтому я не уверен, как правильно их настроить. Может кто-то указать мне верное направление?


person cscan    schedule 26.05.2016    source источник
comment
Как вы выполняете пьесу? Опубликуйте командную строку, включая аргументы.   -  person helloV    schedule 26.05.2016
comment
@helloV Я обновил вопрос, включив в него команду.   -  person cscan    schedule 26.05.2016


Ответы (1)


Итак, проблема заключалась в том, как я представлял имена своих хостов в своей книге. Установка переменной имени хоста была правильным решением:

hostname_variable = tag_Name

А вот как это представить в playbook:

- name: configure and deploy api servers
  hosts: tag_Name_api
  remote_user: ec2-user
  sudo: true

  roles:
  - java
  - nginx
  - api

Кроме того, его нужно будет называть так:

ansible-playbook site.yml -i ec2.py -l tag_Name_api

Обязательно измените специальные символы, такие как . или - на _.

person cscan    schedule 27.05.2016
comment
теги могут содержать. или любой другой специальный символ, однако в инвентаре все специальные символы преобразуются в символы подчеркивания. - person MillerGeek; 27.05.2016
comment
tag_Name_api.production становится tag_Name_api_production - person MillerGeek; 27.05.2016
comment
спасибо @ smiller171, я обновил свой ответ, чтобы отразить это. - person cscan; 27.05.2016