Ansible之roles介绍

摘要:
B、 写入任务列表任务[root@node1dbsrvs]#Vimtasks/main。yml name:installmysql服务器包yum:name=mysql服务器状态=最新名称:installconfigurationfilecopy:src=my.cnfdest/etc/my.cnftags:-confonotify:-restartmysqld名称:服务:name=mysqldisabled=true状态=startedc。定义处理程序[root@node1dbsrvs]#Vimhandlers/main。yml name:restartmysqldservice:name=mysqlstate=restarted定义剧本:在角色目录的同一级别创建剧本。[ root@node1ansible_playbooks]#vimweb.yml主机:172.16.7.152角色:-websrvs[root@node1ansible_playbooks]#vimdb.yml主机:172.16.7.151角色:-dbsrvs[root@node1ansible_playbooks]#Vimsite。yml主机:172.16.7.153角色:-websrvs dbsrvs运行:[root@node1ansible_playbooks]#ansible playbookweb.yml[root@node1ansible_playbooks]#ansible playbookdb.yml[root@node1ansible_playbooks]#Ansible-playbooksite.yml也可以将这些内容写入同一个剧本。

一、什么场景下会用roles?

  假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器。我们如何来定义playbook?

  第一个play用到第一个主机上,用来构建httpd,第二个play用到第二个主机上,用来构建php,第三个play用到第三个主机上,用来构建MySQL。这些个play定义在playbook中比较麻烦,将来也不利于模块化调用,不利于多次调。比如说后来又加进来一个主机,这个第4个主机既是httpd服务器,又是php服务器,我们只能写第4个play,上面写上安装httpd和php。这样playbook中的代码就重复了。

  为了避免代码重复,roles能够实现代码重复被调用。定义一个角色叫websrvs,第二个角色叫phpappsrvs,第三个角色叫dbsrvs。那么调用时如下来调用:

hosts: host1
role:
- websrvs

hosts: host2
role:
- phpappsrvs
        
hosts: host3
role:
- dbsrvs
        
hosts: host4
role:
- websrvs
- phpappsrvs

  这样代码就可以重复利用了,每个角色可以被独立重复调用。下面举例说明使用方式。

二、roles示例

  假设有3台主机,172.16.7.151主机上安装MySQL,172.16.7.152上安装httpd,172.16.7.153上安装MySQL和httpd。我们建立两个角色websrvs和dbsrvs,然后应用到这几个主机上。

1. 创建roles的必需目录 

[root@node1 opt]# mkdir -pv ansible_playbooks/roles/{websrvs,dbsrvs}/{tasks,files,templates,meta,handlers,vars}

Ansible之roles介绍第1张

Ansible之roles介绍第2张

每个role下面有个目录叫meta,在里面可以新建文件main.yml,在文件中可以设置该role和其它role之前的关联关系。

 Ansible之roles介绍第3张

2. 配置角色

(1)配置角色websrvs

[root@node1 opt]# cd ansible_playbooks/roles/
[root@node1 roles]# cd websrvs/
[root@node1 websrvs]# ls
files  handlers  meta  tasks  templates  vars

a. 将httpd配置文件上传到files目录下,我这里假设httpd.conf每台主机都是一样的,实际上应该用模板,先用一样的配置文件举例

[root@node1 websrvs]# cp /etc/httpd/conf/httpd.conf files/

直接复制的静态文件都放在files目录下。打算用模板文件的都放在templates目录下。

b.编写任务列表tasks

[root@node1 websrvs]# vim tasks/main.yml
- name: install httpd package
  yum: name=httpd
- name: install configuration file
  copy: src=httpd.conf dest=/etc/httpd/conf
  tags:
  - conf
  notify:
  - restart httpd
- name: start httpd
  service: name=httpd state=started

Ansible之roles介绍第4张

c.由于上面的tasks中定义了notify,所以要定义handlers

[root@node1 websrvs]# vim handlers/main.yml
- name: restart httpd
  service: name=httpd state=restarted

如果需要定义变量,则在vars目录下创建main.yml文件,在文件中写入变量,以key:value的形式定义,比如:

http_port: 8080

(2)配置角色dbsrvs

[root@node1 roles]# cd dbsrvs/
[root@node1 dbsrvs]# ls
files  handlers  meta  tasks  templates  vars

a.将MySQL配置文件上传到files目录下。


b.编写任务列表tasks

[root@node1 dbsrvs]# vim tasks/main.yml
- name: install mysql-server package
  yum: name=mysql-server state=latest
- name: install configuration file
  copy: src=my.cnf dest/etc/my.cnf
  tags:
  - conf
  notify:
  - restart mysqld
- name:
  service: name=mysqld enabled=true state=started

c.定义handlers

[root@node1 dbsrvs]# vim handlers/main.yml
- name: restart mysqld
  service: name=mysqld state=restarted

(3)定义playbook

【注意】:要在roles目录同级创建playbook。

[root@node1 ansible_playbooks]# vim web.yml
- hosts: 172.16.7.152
  roles:
  - websrvs 

[root@node1 ansible_playbooks]# vim db.yml
- hosts: 172.16.7.151
  roles:
  - dbsrvs 

[root@node1 ansible_playbooks]# vim site.yml
- hosts: 172.16.7.153
  roles:
  - websrvs
  - dbsrvs

运行:

[root@node1 ansible_playbooks]# ansible-playbook web.yml
[root@node1 ansible_playbooks]# ansible-playbook db.yml
[root@node1 ansible_playbooks]# ansible-playbook site.yml

当然也可以把这些内容写入同一个playbook中。playbook的名字可以自定义。

转载来源:https://www.cnblogs.com/zhaojiankai/p/7655855.html

免责声明:文章转载自《Ansible之roles介绍》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇人人开源框架学习笔记Google的Protobuf协议分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

部署经验Docker

从Docker 到Jenkins 到Ansible的部署经验 https://www.cnblogs.com/itdragon/p/10011816.html 工作中,除了开发功能,还负责系统的部署工作。我从频繁的部署工作中,逐渐找到了一些偷懒的方法。从传统的Java -jar命令启动服务,到通过Docker 容器构建部署服务,再后来通过自动化部署工具Je...

ansible(一)

一.目的 代码发布系统 二.准备工作:干净的虚拟机准备4个 准备一个虚拟机后克隆出另外三个,注意,克隆前要将虚拟机关机 三.可以用来代码发布的工具 puppet ansible slatstack 四.ansible(批量在远程主机上执行 命令) 1.下载ansible 第一步:下载wgetyum install wget第二部:下载epel源wget...

ansible自动化运维详细教程及playbook详解

运维自动化工具( 配置管理 ),例如:Ansible、SaltStack、Puppet、Fabric 等。 Ansible简介 一种集成 IT 系统的配置管理、应用部署、执行特定任务的开源平台,是 AnsibleWorks 公司名下的项目,该公司由 Cobbler 及 Func 的作者于 2012 年创建成立。 Ansible 基于 Python 语言实现...

Ansible介绍与安装使用

Ansible 介绍与安装 目录 Ansible 介绍与安装 Ansible的定义 Ansible的基础架构 Ansible的程序目录结构 Anisible特性 注意事项 安装Ansible 自定义清单(配置组内成员) Anisble实现管理方式 Ansible常用模块 ping 模块 user 模块 command/raw/shell 模块 scr...

ansible 调试 debug 一介凡人

一、debug模块 1、debug模块是Ansible Playbook中最常用的调试模块,可以在Playbook执行过程打印调试信息,特别是跟when条件语句一起使用时,可以调试特定条件下的执行过程。 比如:当变量 a 定义时,将 a 的值打印出来,当任务成功后,打印执行结果等。 msg:调试输出的消息 var:将某个任务执行的输出作为变量传递给d...

批量安装Zabbix_Agent

使用自动化部署工具Ansible批量部署zabbix_agent. 1. 安装Ansible   yum –y install ansible   内网情况下,现在ansible及其依赖的rpm包,添加到yum源进行安装。 2. 主机配置文件   在/etc/ansible中添加主机,主机配置文件为hosts,也可以在ansible.cfg中修改配置  ...