Я начал изучать ansible как жизнеспособный инструмент управления конфигурацией для офиса, настройки тестовой среды и т. д. Мне удалось охватить большинство основных сценариев использования, использование плейбуков для определения задач и оркестровки с ролями.
Я создал очень простые роли apache2 для конкретного сценария, например vhost документа и vhost mod_proxy. Я застрял, я не могу понять, как написать playbook для выполнения этих разных конфигураций vhosts на одних и тех же хостах, то есть домен node1.localhost
, указывающий на /var/www/vhosts/node1.localhost
, и node2.localhost
, выполняющий обратный прокси-сервер для другого ящика на tomcat ajp port
.
Ниже моя роль:
#roles/apache/tasks/main.yaml
---
- name: Update apt cache
apt: update_cache=yes
- name: Install Apache2
apt:
name=apache2
state=present
- name: Creating a Document virtualhost file
template:
src=http_vhost.conf.j2
dest=/etc/apache2/site-available/{{ apache_domain_name }}.conf
mode=0644
when: document_vhost == True
- name: Creating a Reverse Proxy virtualhost file
template:
src=http_vhost_reverse_proxy.conf.j2
dest=/etc/apache2/site-available/{{ apache_domain_name }}.conf
mode=0644
when: proxy_vhost == True
- name: Activate Vhosts
command: a2ensite {{ apache_domain_name }}.conf
when: activate_vhost|bool
notify: Reload Apache
- name: Deactivate Vhosts
command: a2dissite {{ apache_domain_name }}.conf
when: deactivate_vhost|bool
notify: Reload-Apache
Файл шаблона документа vhost
#roles/templates/http_vhost.conf.j2
<VirtualHost *:{{ apache_port }}>
ServerAdmin {{ apache_admin_email_address }}
ServerName {{ apache_domain_name }}
{% if apache_domain_aliases is defined %}
{% for serveralias in apache_domain_aliases %}
ServerAlias {{ serveralias }}
{% endfor %}
{% endif %}
DocumentRoot /var/www/vhosts{{ apache_domain_name}}/htdocs
<Directory /var/www/vhosts{{ apache_domain_name}}/htdocs>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/{{ apache_domain_name }}_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel {{ apache_log_level|default('warn') }}
CustomLog ${APACHE_LOG_DIR}/{{ apache_domain_name }}_access.log combined
</VirtualHost>
Файл шаблона обратного прокси vhost
#roles/apache/templates/http_vhost_reverse_proxy.conf.j2
<VirtualHost *:{{ apache_port }}>
ProxyRequests off
ProxyPreserveHost On
ServerAdmin {{ apache_admin_email_address }}
ServerName {{ apache_domain_name }}
{% if apache_domain_aliases if defined %}
{% for serveralias in apache_domain_aliases %}
ServerAlias {{ serveralias }}
{% endfor %}
{% endif %}
{% if apache_vhosts if defined %}
{% for vhost in apache_vhosts %}
ProxyPass {{ vhost.apache_proxy_context }} {{ vhost.reversed_server_mod }}://{{ vhost.reversed_server_ip }}:{{ vhost.reversed_server_port }}{{ vhost.reversed_server_context }}
ProxyPassReverse {{ vhost.apache_proxy_context }} {{ vhost.reversed_server_mod }}://{{ vhost.reversed_server_ip }}:{{ vhost.reversed_server_port }}{{ vhost.reversed_server_context }}
{% endfor %}
{% endif %}
ErrorLog ${APACHE_LOG_DIR}/{{ apache_domain_name }}_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel {{ apache_log_level|default('warn') }}
CustomLog ${APACHE_LOG_DIR}/{{ apache_domain_name }}_access.log combined
</VirtualHost>
Допустим, у меня есть IP-адрес узла 192.168.56.106, и я должен обрабатывать как node1.localhost
обычный виртуальный хост, так и node2.localhost
прокси-виртуальный хост.
Спасибо за помощь