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

执行之后访问浏览器,下面效果即表示成功

 

posted @ 2024-06-14 15:06  ~技术小白  阅读(36)  评论(0)    收藏  举报