2013-07-29 4 views
1

Скажем, у меня есть Nginx конфигурационный файл, созданный с помощью шаблона, который я использую для настройки некоторых узлов для перенаправления имя сервера HTTP на HTTPS:Несущие: возможны ли переменные для конкретной роли и инвентаря?

server { 
    listen    80; 
    server_name   {{ server_name }}; 
    rewrite    ^https://$server_name$request_uri? permanent; 
} 

Say У меня есть два веб-сайтов, размещенных на одной машине :

  • сайт A
  • сайт B

каждый имеет свое собственное имя сервера и каждый нуждается в перенаправление выше. В то же время, скажем, у меня есть по крайней мере две отдельные конфигурации развертывания, каждый из которых представлен своим собственным файлом инвентаризации и его group_vars/папки, например:

  • бродяга Onebox
  • производства

каждого используя другое имя сервера. Так что теперь у меня есть 2 * 2 = 4 отдельные имена серверов:

  • sitea.myonebox.com
  • siteb.myonebox.com
  • sitea.production.com
  • siteb.production.com

Я не могу понять, как определить все эти 4 переменные. Я не могу определить две отдельные переменные в group_vars /, потому что шаблон j2 ожидает только одно имя переменной {{server_name}}, поэтому я должен был бы определить тот же шаблон дважды, чтобы сделать эту работу.

Другой вариант - иметь sitea и siteb как две отдельные роли (которые я собираюсь делать в любом случае) и хранить имя_рынка в ролях/sitea/vars/main.yml, однако эта настройка не учитывает инвентаризацию , что означает, что я бы снизился до 2 переменных, а не 4.

Возможно ли это вообще без дублирования шаблона или есть Ansible, который еще не поддерживает этот сценарий?

ответ

0

Как насчет этого. Это не может быть ответ, который вы ожидаете.

: nginx.j2

server { 
    listen    80; 
    server_name   {% for host in groups['all'] -%} 
{% if hostvars[host]['ansible_eth0']['ipv4']['address'] == ansible_eth0['ipv4']['address'] %} 
{{ hostvars[host]['inventory_hostname'] }} {% endif %}{% endfor %} ; 
    rewrite    ^https://$server_name$request_uri? permanent; 
} 

Этот шаблон будет проверять все узлы. Если ip-адрес group_host и ip-адрес current_host одинаковы, добавьте файл inventory_hostname в файл конфигурации nginx. Даже если это не так, вы можете получить inventory_hostoname в других группах или хостах, используя hostvars.

1

Если ты собираешься разделить их на две роли в любом случае, определить имена узлов в инвентаре и передавать их в качестве параметров роли:

roles: 
     - { role: sitea, server_name: "{{ sitea_server_name }}" } 
     - { role: siteb, server_name: "{{ siteb_server_name }}" } 
+0

анзибль 1.8.2: 'ОШИБКА: Ошибка синтаксиса при загрузке YAML script' – user272735

+0

Правильный синтаксис выглядит как: '- {role: sitea, server_name:" {{sitea_server_name}} "}' – user272735

+0

Вы правы, исправлены – hkariti