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

目录

一、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;
ansible 自动化运维工具 9 (ansible角色的安装及使用)
role存放的路径在配置文件ansible.cfg中定义;
roles_path = ~/ansible/roles (默认目录:/etc/ansible/roles)
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)
创建目录结构
ansible 自动化运维工具 9 (ansible角色的安装及使用)
创建vsftps(应该是vsftpd,这里打错了)角色
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible-galaxy list 查看角色;
可以看到vsftpd角色成功创建
ansible 自动化运维工具 9 (ansible角色的安装及使用)

二、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
/

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

2.触发器模块

ansible 自动化运维工具 9 (ansible角色的安装及使用)
查看防火墙的设置规则
ansible 自动化运维工具 9 (ansible角色的安装及使用)
示例如下
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)

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

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

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

3.变量模块

ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)
启用模块 ~/ansible/vsftpd.yml
ansible 自动化运维工具 9 (ansible角色的安装及使用)
执行playbook,为node主机安装vsftpd
ansible 自动化运维工具 9 (ansible角色的安装及使用)
接下来测试删除所安装的vsftpd,编辑task主任务模块
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)
执行playbook
ansible 自动化运维工具 9 (ansible角色的安装及使用)
再次编辑task主任务模块,测试安装vsftpd
ansible 自动化运维工具 9 (ansible角色的安装及使用)
执行playbook
ansible 自动化运维工具 9 (ansible角色的安装及使用)

三、习题测试

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

1.创建角色apache

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

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
//      

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

3.设置j2模板

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

{% 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 %}

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

4.设置task任务

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

///
---
# 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

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

5.设置触发器

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

/
---
# 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
///

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

6.设置执行任务

ansible 自动化运维工具 9 (ansible角色的安装及使用)
执行playbook
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)
可以在node主机查看到虚拟主机的信息
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)

四、控制任务的执行顺序

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
ansible 自动化运维工具 9 (ansible角色的安装及使用)
ansible 自动化运维工具 9 (ansible角色的安装及使用)
执行playbook;
可以看到,在角色任务之前之前有任务执行
ansible 自动化运维工具 9 (ansible角色的安装及使用)
在角色任务之后有任务执行
ansible 自动化运维工具 9 (ansible角色的安装及使用)

五、多重角色的使用

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

上一篇:cf883 G. Orientation of Edges(贪心)


下一篇:hadoop服务无法启动datanode节点