首页 > 解决方案 > 使用 Ansible 更新单个 vhost 文件

问题描述

我有以下文件:roles/homepage/templates/vhost_443.conf.j2

<VirtualHost *:443>
    ServerName {{ vhost_name }}
    {% if vhost_aliases is defined %}
    {% for vhost_alias in vhost_aliases %}
    ServerAlias {{ vhost_alias }}
    {% endfor %}
    {% endif %}
    ServerAdmin webmaster@extension.org
    DocumentRoot {{ vhost_document_root }}
    ErrorLog {{ vhost_log_dir }}/error.log
    CustomLog  {{ vhost_log_dir }}/access.log combined
    LogLevel info ssl:warn
    # LogLevel alert rewrite:t
    ...

该文件引用于roles/homepage/tasks/main.yml

...
- name: create ssl vhost
  template:
    src: vhost_443.conf.j2
    dest: "/etc/apache2/sites-available/{{ vhost_name }}_443.conf"
  notify: restart apache
  tags:
    - vhostconfig
  ...

有没有办法只运行这部分(任务?)roles/homepage/tasks/main.yml所以我只更新服务器上的 vhost_443.conf 文件而不运行 main.yml 中的所有其他任务,或者我应该创建一个任务来更新这个文件?

我正在考虑运行: ansible-playbook roles/homepage/tasks/main.yml但这将运行 main.yml 中的所有其他命令。

标签: ansible

解决方案


我最终采用的解决方案是将标签添加update_vhost到我想要运行的特定任务中roles/homepage/tasks/main.yml。所以在

...
- name: create ssl vhost
  template:
    src: vhost_443.conf.j2
    dest: "/etc/apache2/sites-available/{{ vhost_name }}_443.conf"
  notify: restart apache
  tags: ['vhostconfig', 'update_vhost']
  ...

现在,当我想运行该特定任务时,我ansible-playbook playbooks/webapps/homepage.yml --tags "update_vhost"只运行该任务。


推荐阅读