2014-10-15 2 views
1

У меня есть следующий анзибль файл хосты:анзибль Nginx server_name значение

[production] 
255.255.255.1 
255.255.255.2 
255.255.255.3 

Мой файл инвентаризация имеет nginx роль, которая имеет шаблон конфигурационного файл, который будет скопирован в каталог Nginx на серверах во время установки развернуть. На данный момент часть этого конфигурационного файла выглядит следующим образом:

... 

server { 
    listen 80; 
    server_name 255.255.255.1; 
    root /path/to/public; 

    ... 
} 

... 

The server_name директива указывает на один из IP-адресов из файла хостов. Как я могу изменить его так, чтобы он указывал на правильный IP-адрес производственного сервера для каждого сервера, на котором он развертывается?

Кроме того, если все п хосты будут указывать на тот же домен, это лучшая идея иметь ценность server_name директивы в том, что домен вместо IP- адреса?

ответ

3

Если вы хотите получить IP-адрес сервера, на котором вы сейчас развертываете шаблон, вам необходимо преобразовать конфигурацию Nginx в шаблон Jinja. Поместите его в ролях каталога/Nginx/шаблонов и редактировать его использовать соответствующие факты -

server { 
    listen 80; 
    server_name {{ ansible_eth0.ipv4.address }}; 
    root /path/to/public; 

    ... 
} 

Внутри вашей Playbook настроить задачу для вызова шаблона -

- name: deliver nginx configuration to server 
    template: src=site.j2 dest=/etc/nginx/sites-available/site 

Если вы хотите использовать имя сервера, вы должны определить это где-то, скорее всего, в вашем файле host_vars или hosts. Например, используя ваш хост-файл выше, вы могли бы сделать что-то вроде этого -

[production] 
255.255.255.1 
255.255.255.2 
255.255.255.3 

[production:vars] 
server_name=www.example.com 

Тогда просто заменить выше шаблон {{server_name}} вместо факта анзибль, и вы должны быть хорошо идти.

Смежные вопросы