使用Ansible更新单个vhost文件

使用Ansible更新单个vhost文件,ansible,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 %} {% end

我有以下文件:
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
中的这一部分(task?),所以我只更新服务器上的vhost_443.conf文件,而不运行main.yml中的所有其他任务,或者我应该创建一个任务来更新这个文件

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

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

如果要运行整个角色,请设置主页运行:full

如果要运行vhost更新,请设置主页run: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"

如果希望将roles/homepage/tasks/main.yml作为一个文件,那么可能需要将逻辑划分为多个块。创建一个变量主页运行

如果要运行整个角色,请设置主页运行:full

如果要运行vhost更新,请设置主页run: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"

我最终采用的解决方案是在我想在
roles/homepage/tasks/main.yml
中运行的特定任务中添加一个标签
update\u vhost
。那么在

...
- 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——标记“update_vhost”
只运行那个任务。

我最终的解决方案是在
角色/homepage/tasks/main.yml>中为我想运行的特定任务添加一个标记
update_vhost
。那么在

...
- 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--标记“update_vhost”
以仅运行该任务。

我注意到您在该任务上有
标记:
ansible playbook--tags vhostconfig…
没有做你想做的事吗?这个标签有很多任务,因此,我猜运行您共享的命令将运行/更新不同服务器上的所有这些文件。不知道我是否可以为此任务添加另一个标记…类似于更新主页的内容,然后运行
ansible playbook--tags update\u homepage\u vhost
?我注意到您在该任务上有
标记:
ansible playbook--tags vhostconfig…
没有做你想做的事吗?这个标签有很多任务,因此,我猜运行您共享的命令将运行/更新不同服务器上的所有这些文件。不知道是否可以在此任务中添加另一个标记…类似于更新主页,然后运行
ansible playbook--tags update\u homepage\u vhost
?…运行此任务的命令是什么?ansible playbook——主页运行完整角色/homepage/tasks/main.yml?剧透警报…这不起作用。我想我是走错路了。我得到一个错误,这不是一个剧本。我需要创建一个关联的剧本来运行这个吗?你是如何运行roles/homepage/tasks/main.yml的?这是一个在剧本中调用的角色,还是你自己用ansible剧本命令来运行它?运行这个角色的命令是什么?ansible playbook——主页运行完整角色/homepage/tasks/main.yml?剧透警报…这不起作用。我想我是走错路了。我得到一个错误,这不是一个剧本。我需要创建一个关联的剧本来运行这个吗?你是如何运行roles/homepage/tasks/main.yml的?这是在剧本中调用的角色,还是您使用ansible playbook命令自己运行它?