使用Ansible更新单个vhost文件

时间:2019-02-25 16:48:52

标签: ansible

我有以下文件: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中运行所有其他命令。

2 个答案:

答案 0 :(得分:1)

如果要将角色/主页/任务/main.yml保留为一个文件,则可能需要将逻辑分成多个块。创建变量主页运行

如果您想运行整个角色,请设置homepage-run:完整

如果要运行vhost更新,请设置主页运行:vhost

- block:
  - name: Run homepage setup part 1
    - task1
    - task2
    - task3
  when: homepage-run == "full"

- block:
  - name: Run vhost setup
    - name: create ssl vhost
      template:
        src: vhost_443.conf.j2
        dest: "/etc/apache2/sites-available/{{ vhost_name }}_443.conf"
      notify: restart apache
      tags:
        - vhostconfig
  when: ( homepage-run == "full" ) or ( homepage-run == "vhost" )

- block:
  - name: Run homepage setup part 2
    - task1
    - task2
    - task3
  when: homepage-run == "full"

答案 1 :(得分:0)

我最终使用的解决方案是将标签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"仅运行该任务。