从ansible中的角色执行任务文件

时间:2017-09-19 12:50:31

标签: ansible

我为我的ansible playbooks设置了基本目录架构。 我定义了两个角色: - 1)www: - 管理所有站点部署 2)root: - 执行与根相关的任务

我的root角色包含以下任务: - 1)在目标服务器上设置新站点 2)启动Web服务器(apache,nginx)

我想在站点部署后重新启动我的apache服务器,为此我已经在根角色的任务下创建了一个名为apache-restart的剧本。这就是我的目录结构的样子

enter image description here

这就是我在site.yml中尝试的内容

---

- name: Deploy Application
  hosts: "{{ host }}"
  roles: 
    - www
  become: true
  become_user: www-data
  tags: 
    - site-deployment


- name: Restart Apache Server
  hosts: "{{ host }}"
  roles: 
    - root
  tasks: 
    include: roles/root/apache-restart.yml
  become: true
  become_user: root
  tags: 
    - site-deployment

当我运行这个剧本时,它给我带来了这个错误: -

ERROR! A malformed block was encountered.

The error appears to have been in '/Users/Atul/Workplace/infra-automation/deployments/LAMP/site.yml': line 18, column 3, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:


- name: Restart Apache Server
  ^ here

有没有更好的方法,以便我可以通过指定 root 角色直接将apache-restart.yml文件包含在我的site.yml中,因为如果我只包含角色,那么ansible将开始寻找main。 YML。

2 个答案:

答案 0 :(得分:1)

tasks应该是一个列表,所以:

tasks: 
  - include: roles/root/apache-restart.yml

答案 1 :(得分:0)

apache-restart.yml目录中将main.yml重命名为root/tasks,当您调用root角色

时,该文件中指定的任务将自动运行

重命名文件后,您可以简化Restart apache server播放到

- name: Restart Apache Server
  hosts: "{{ host }}"
  roles: 
    - root
  become: true
  become_user: root
  tags: 
    - site-deployment

有条件地重启服务器或守护程序的最佳做法是使用handlers

在您的情况下,您需要在Restart Apache Server角色中创建一个名为www的处理程序,并在该角色的相关任务中通知它。使用www中的重启处理程序,您可以完全摆脱root角色。