[原创]实战之Ansible生成Apache多主机配置

Posted 运维部落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[原创]实战之Ansible生成Apache多主机配置相关的知识,希望对你有一定的参考价值。

本篇文章是由我们Ansible中文官方推出的:playbook编写技巧系统文章,前几节的文章有《[原创]其实playbook的代码可以这么简洁》、《[原创]巧用Roles优化playbook代码》、《[原创]Roles的高级玩法,带你玩转自动化》、《[原创]Roles技巧之Templates》、《[原创]Jinja2的条件判断高级使用》、《[原创]实战之Ansible生成nginx的配置》,以上文章具有连贯性,如果有需要,还请各位读者查阅

Ansible结合Jinja2生成Apache多主机配置

  上篇《[原创]实战之Ansible生成Nginx的配置》为大家介绍了Nginx配置的生成,本节为大家介绍Apache 多主机配置的生成。因本节不涉及新知识点,以纯实践为主,考虑篇幅,我们尽可以简洁明了的介绍本节,以下是配置示例

一、案例场景说明:

通过Ansible的Jinja模板生成如下的Apache多主机配置,最终实现如下配置:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName apache.magedu.com
  DocumentRoot /data/magedu/
  <Directory "/data/magedu/">
    AllowOverride All
    Options -Indexes FollowSymLinks
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

<VirtualHost *:80>
  ServerName apache.magedu.otherdomain.com
  DocumentRoot /data/otherdomain/
  ServerAdmin stanley@magedu.com
  <Directory "/data/otherdomain/">
    AllowOverride All
    Options -Indexes FollowSymLinks
    Order allow,deny
    Allow from all
  </Directory>
</VirtualHost>

二、案例场景实现:

  • 步骤1:编排目录结构如下:
    roles/apacheconf/
    ├── tasks
    │   ├── file.yml
    │   └── main.yml
    ├── templates
    │   └── apache.conf.j2
    └── vars
      └── main.yml
  • 步骤2:编辑apacheconf role的tasks调度文件 roles/apacheconf/tasks/{file.yml,main.yml}

    编辑file.yml,内容如下:

    \---    #此处"\"是为了转义,各位读者可以忽略
    
    - name: Apache.conf.j2 tempalte transfer example
    template: src=apache.conf.j2 dest=/etc/httpd/apache.conf.template
    \---    #此处"\"是为了转义,各位读者可以忽略
    
    - include: file.yml
    • 编辑main.yml,内容如下:

  • 步骤3:定义apacheconf role的模板文件roles/apacheconf/templates/apache.conf.j2,内容如下:
    NameVirtualHost *:80
    {% for vhost in apache_vhosts %}
    <VirtualHost *:80>
    ServerName {{ vhost.servername }}
    DocumentRoot {{ vhost.documentroot }}
    {% if vhost.serveradmin is defined %}
    ServerAdmin {{ vhost.serveradmin }}
    {% endif %}
    <Directory "{{ vhost.documentroot }}">
      AllowOverride All
      Options -Indexes FollowSymLinks
      Order allow,deny
      Allow from all
    </Directory>
    </VirtualHost>
    {% endfor %}
  • 步骤4:编辑apacheconf role的变量文件roles/apacheconf/vars/main.yml:
    \---       #此处"\"是为了转义,各位读者可以忽略
    apache_vhosts:
    - {servername: "apache.magedu.com", documentroot: "/data/magedu/"}
    - {servername: "apache.magedu.otherdomain.com", documentroot: "/data/otherdomain/", serveradmin: "stanley@magedu.com"}
  • 步骤5:编辑总调度文件apacheconf.yml:
    - name: Apache WebServer's Conf Dynamic Create
    hosts: 192.168.37.159
    gather_facts: no
    
    roles:
      - { role: apacheconf }
  • 步骤6 验证结果:
    • 执行命令:
      ansible-playbook apacheconf.yml
      后登录到192.168.37.159查看/etc/httpd/apache.conf.template 是否和我们预期的一样。
今天的分享就到这里结束了,如果大家在学习的过程中有问题,可以添加Ansible官方QQ群或关注微信公众号参加讨论。我们将在明天的分享中为大家带来《6.3.7    Jinja2动态变量配置及架构优化》,还请各位读者持续关注!
关注我们:


以上是关于[原创]实战之Ansible生成Apache多主机配置的主要内容,如果未能解决你的问题,请参考以下文章

ansible实战应用之——自动化系统上线

运维自动化之 - ansible 批量主机管理

linux12企业实战 -- 13多主机磁盘挂载

Ansible命令介绍之ansible

[ansible]批量部署yum

Ansible 实战:基于docker运行ansible