我为我的ansible playbooks设置了基本目录架构。 我定义了两个角色: - 1)www: - 管理所有站点部署 2)root: - 执行与根相关的任务
我的root角色包含以下任务: - 1)在目标服务器上设置新站点 2)启动Web服务器(apache,nginx)
我想在站点部署后重新启动我的apache服务器,为此我已经在根角色的任务下创建了一个名为apache-restart的剧本。这就是我的目录结构的样子
这就是我在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。
答案 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
角色。