ansible 自动化运维工具 9 (ansible角色的安装及使用)

本文详细介绍了Ansible角色的概念、目录结构和创建方法,并通过实例演示了如何编写和使用角色进行任务配置,包括任务主任务、触发器模块、变量模块的设置。此外,还展示了如何通过习题测试配置Apache服务,控制任务执行顺序,以及使用多重角色。文章最后讨论了任务执行顺序的控制和多重角色的应用,帮助读者深入理解Ansible角色在自动化部署中的应用。
摘要由CSDN通过智能技术生成

一、ansible 角色简介

(1)Ansible roles 是为了层次化,结构化的组织Playbook。
(2)roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们;
(3)roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高;
(4)以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行。

1.roles目录结构

参数含义
files 存放copy或script等模块调用的函数
tasks定义各种task,要有main.yml,其他文件include包含调用
handlers定义各种handlers,要有main.yml,其他文件include包含调用
vars定义variables,要有main.yml,其他文件include包含调用
templates存储由template模块调用的模板文本
meta定义当前角色的特殊设定及其依赖关系,要有main.yml的文件
defaults要有main.yml的文件,用于设定默认变量
tests用于测试角色

2.ansible 角色的创建

ansible—galaxy命令工具: Ansible Galaxy 是一个免费共享和下载 Ansible 角色的网站,可以帮助我们更好的定义和学习roles;
ansible-galaxy命令默认与https://galaxy.ansible.com网站API通信,可以查找、下载各种社区开发的
Ansible 角色
ansible-galaxy在 Ansible 1.4.2 就已经被包含了,可以在galaxy.ansible.com网站查询roles

列出所有已经安装的galaxy;
请添加图片描述
role存放的路径在配置文件ansible.cfg中定义;
roles_path = ~/ansible/roles (默认目录:/etc/ansible/roles)
请添加图片描述
请添加图片描述
创建目录结构
请添加图片描述
创建vsftps(应该是vsftpd,这里打错了)角色
请添加图片描述
ansible-galaxy list 查看角色;
可以看到vsftpd角色成功创建
请添加图片描述

二、ansible角色的使用

1.书写task主任务

示例:下载安装vsftpd,根据变量更改配置文件;
编辑 ~/ansible/roles/vsftps/tasks/main.yml 文件


---
# tasks file for vsftpd
- name: install vsftpd                     安装模块
  dnf:
    name: vsftpd
    state: latest
  notify:                                  触发器
    - restart vsftpd
    - firewalld set

- name: set vsftpd                        修改配置模块
  lineinfile:                            
    path: /etc/vsftpd/vsftpd.conf
    regexp: "anonymous_enable"
    line: "anonymous_enable={{ STATE }}"
  notify:                                 触发器
    - restart vsftpd
/

请添加图片描述

2.触发器模块

请添加图片描述
查看防火墙的设置规则
请添加图片描述
示例如下
请添加图片描述
请添加图片描述

- name: restart vsftpd             vsftpd模块
  service:
    name: vsftpd
    state: restarted
    enabled: yes

- name: firewalld set              防火墙模块
  firewalld:
    name: ftp
    state: enabeld
    permanent: yes
    immediate: yes

请添加图片描述

3.变量模块

请添加图片描述
请添加图片描述
启用模块 ~/ansible/vsftpd.yml
请添加图片描述
执行playbook,为node主机安装vsftpd
请添加图片描述
接下来测试删除所安装的vsftpd,编辑task主任务模块
请添加图片描述
请添加图片描述
执行playbook
请添加图片描述
再次编辑task主任务模块,测试安装vsftpd
请添加图片描述
执行playbook
请添加图片描述

三、习题测试

为node主机下载httpd,要求如下:
输入域名westos.westos.org ------得到访问测试页westos.westos.org;
输入域名linux.westos.org ------得到访问测试页linux.westos.org;
输入其他默认域名 ------得到访问测试页www.westos.org。

1.创建角色apache

请添加图片描述

2.设置变量

//
---
# vars file for apache
WEBS:
  - docroot: /var/www/html
    index: www.westos.org
    
  - docroot: /var/www/vhosts/westos.org/westos
    name: westos.westos.org
    index: westos.westos.org
    
  - docroot: /var/www/vhosts/westos.org/linux
    name: linux.westos.org
    index: linux.westos.org
//      

请添加图片描述

3.设置j2模板

请添加图片描述

{% for vhost in WEBS %}
{% if vhost['name'] is not defined %}
  <VirtualHost _default_:80>
{%endif%}
{% if vhost['name'] is defined %}
  <VirtualHost *:80>
  ServerName {{vhost['name']}}
{%endif%}
  DocumentRoot   {{vhost['docroot']}}
</VirtualHost>
{% endfor %}

请添加图片描述

4.设置task任务

请添加图片描述

///
---
# tasks file for apache
- name: install apache
  dnf:
    name: httpd
    state: latest
  notify:
    - restart apache
    - firewalld
- name: create documentroot
  file:
    path: "{{ item.docroot }}"
    state: directory
  loop:
    "{{WEBS}}"
- name: create index.html
  copy:
    dest: "{{ item.docroot }}/index.html"
    content: "{{ item.index }}"
  loop:
    "{{WEBS}}"
- name: set vhost
  template:
    src: vhosts.conf.j2
    dest: /mnt/vhost.conf
  notify:
    - restart apache

请添加图片描述

5.设置触发器

请添加图片描述

/
---
# handlers file for apache
- name: restart apache
  service:
    name: httpd
    state: restarted
    enabled: yes

- name: firewalld
  firewalld:
    service: http
    state: enabled
    permanent: yes
    immediate: yes
///

请添加图片描述

6.设置执行任务

请添加图片描述
执行playbook
请添加图片描述
请添加图片描述
请添加图片描述
可以在node主机查看到虚拟主机的信息
请添加图片描述
请添加图片描述

四、控制任务的执行顺序

playbook中使用roles#
playbook中使用roles:
---
- hosts: server2
 roles:
 - role: role1
 - role: role2
 var1: value1  此处变量会覆盖roles中的定义变量

示例:

---
- hosts: server2
 roles:
 - role: role1  角色任务
 pre_tasks:  角色执行前执行的play
 - tasks1
 tasks:  普通任务
 - tasks2
 post_tasks: 在角色和普通任务执行完毕后执行的play
 - tasks3
 handl

在上一个实验的基础上添加任务的执行顺序,继续编辑任务执行模块 ~/ansible/vsftpd.yml
请添加图片描述
请添加图片描述
执行playbook;
可以看到,在角色任务之前之前有任务执行
请添加图片描述
在角色任务之后有任务执行
请添加图片描述

五、多重角色的使用

首先真机开启火墙,打开地址伪装,使得虚拟机可以上网
请添加图片描述
请添加图片描述
请添加图片描述
ansible—galaxy命令工具:
下载角色:
访问地址角色下载地址:install https://galaxy.ansible.com roles
请添加图片描述
搜索nginx
请添加图片描述
请添加图片描述
复制下方链接
请添加图片描述
下载角色成功
请添加图片描述
可以看到所安装的角色
请添加图片描述
打包apache角色目录,将原本的目录删除进行实验测试
请添加图片描述
列出角色,此时只有vsftps和刚刚安装的nginx
请添加图片描述
设置执行任务
请添加图片描述
安装角色
请添加图片描述
接下来,我们安装Red Hat角色,Red Hat系统角色允许管理员有效地管理主机的指定属性
请添加图片描述
安装到了/usr/share/ansible目录下
请添加图片描述
拷贝到devops用户的ansible目录一份
请添加图片描述
列出已安装的角色
请添加图片描述
请添加图片描述
编辑执行任务,完成node主机同步时间
请添加图片描述
请添加图片描述
请添加图片描述
执行playbook
请添加图片描述
请添加图片描述
node主机编辑chrony的默认配置文件 /etc/chrony.conf
请添加图片描述
成功同步到ansible主机的时间
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值