16.5.3 自行创建角色
操作示例
创建一个名为apache的新角色,能够帮助我们自动安装、运行httpd网站服务,设置防火墙的允许规则,以及根据每个主机生成独立的index.html首页文件。
1、定义角色保存路径

2、执行ansible-galaxy init命令创建角色
为了避免角色信息过于分散需要进入/etc/ansible/roles目录下进行创建
ansible-galaxy init apache
下面准备创建新角色
第1步:打开用于定义角色任务的task/main.yml文件。在该文件中不需要定义要执行的主机组列表,因为后面会单独编写剧本进行调用,此时应先对apache角色能做的事情(任务)有一个明确的思路,在调用角色后yml文件会按照从上到下的顺序自动执行。
任务1:安装httpd网站服务。
任务2:运行httpd网站服务,并且加入到开机启动项中。
任务3:配置防火墙,使其放行HTTP协议。
任务4:根据每台主机的变量值,生成不同的主页文件。
先写一个任务。使用yum模块安装httpd网站服务程序:
进入到角色创建默认目录,进入创建的apache目录
cd /etc/ansible/roles/apache
vim task/main.yml
--- - name: one yum: name: httpd state: latest
第2步:使用service模块启动httpd网站服务程序,并加入到启动项中,保证能够一直为用户提供服务。可以使用ansible-doc命令查看以下帮助和实例信息。

vim task/main.yml
根据上面图中的ansible-doc service示例编写文件
--- - name: one yum: name: httpd state: latest - name: two service: name: httpd state: started enabled: yes
第3步:配置防火墙的允许策略,让其它主机可以正常访问。在配置防火墙时,需要使用firewalld模块。也可以看一下帮助示例:
ansible-doc firewalld

--- - name: one yum: name: httpd state: latest - name: two service: name: httpd state: started enabled: yes - firewalld: service: https permanent: yes state: enabled immediate: yes
immediate: yes 表示当前立即生效
第4步:让每台主机显示的主页文件均不相同,让每台主机上运行的httpd网站服务都显示不同的内容
ansible-doc template

--- - name: one yum: name: httpd state: latest - name: two service: name: httpd state: started enabled: yes - firewalld: service: https permanent: yes state: enabled immediate: yes - name: fore template: src: index.html.j2 dest: /var/www/html/index.html
src参数用于定义本地文件的路径,dest参数用于定义复制到受管主机的文件路径
src: index.html.j2 表示用到了Jinja2格式的模版文件Jinja2是Python语言中一个被广发使用的模版引擎,能够让受主管主机根据自身变量产生出不同的文件内容。
ansible-doc setup
setup模块
该模块由剧本自动调用,以收集有关远程主机的有用变量
vim templates/index.html.j2
Welcome to {{ ansible_fqdn}} on {{ ansible_all_ipv4_addresses }}
ansible_fqdn:主机名称
ansible__all_ipv4_address:主机ip
最后编写一个用于调用apache角色的yml文件,以及执行这个文件
vim roles.yml
---
- name: 调用自建角色
hosts: all
roles:
- apache
ansible-playbook roles.yml
执行之后访问浏览器,下面效果即表示成功

浙公网安备 33010602011771号