Ansible自动化部署之ROLES

简介:

一、ROLES 角色

   1、目录层级结构

   2、角色调用

   3、层级结构展示

    示例1:利用ansible角色安装nginx

    示例2:变量调用

    示例3:在playbook调用角色方法:传递变量给角色

    示例4:条件测试角色调用

    示例5:角色安装

    示例6:角色变量调整memcached内存大小


一、ROLES 角色

         对于以上所有的方式有个弊端就是无法实现复用假设在同时部署Web、db、ha 时或不同服务器组合不同的应用就需要写多个yml文件。很难实现灵活的调用。。

         roles 用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

1、目录层级结构

1
2
3
4
5
6
7
8
9
roles每个角色中,以特定的层级目录进行组织
   Mysql/  角色
      Files/     #存放有copy或script模块等调用的文件;’
      Tepmlates/ #template模块查找所需要模板文件目录;
      Tasks/     #定义任务;至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行包含。
      Handlers/  #定义触发器;至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行包含。
      Vars/      #定义变量;至少应该包含一个名为main.yml的文件;其他的文件需要在此文件中通过include进行包含。
      Meta/      #定义变量;至少应该包含一个名为main.yml的文件;定义当前角色的特殊设定及其依赖关系;其他的文件需要在此文件中通过include进行包含。
      Default/   #设定默认变量时使用此目录中的main.yml文件。

2、角色调用

1
2
3
4
5
6
7
8
[root@centos7_1 yaml]# vim roles.yml
    ---
     Hosts:web
    Remote_user:root
    Roles:
    - mysql
    - memchached
    - nginx

 3、层级结构展示

         wKioL1iNvDigfDsaAAAfQx5IoMw285.png

 

示例1:利用ansible角色安装nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@centos7_1 ~]# mkdir/etc/ansible/roles/nginx/{files,tasks,templates,handlers,vars, \
default,mata} –pv
#创建固定目录结构
[root@centos7_1 ~]# tree  /etc/ansible/roles/nginx/
/etc/ansible/roles/nginx/
├── default
├── files
├── handlers
├── mata
├── tasks
├── templates
└── vars
 
[root@centos7_1 ~]# cd/etc/ansible/roles/nginx/
[root@centos7_1 nginx]# vim tasks/main.yml  #创建任务
- name: install nginx package
   yum: name=nginx state=present
- name: install conf file
   template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  #此处源文件可不写绝对路径,系统自查找。
  #- name: start nginx
  # service: name=nginx state=started
  
[root@centos7_1 ~]# cp /apps/work/files/nginx.conf.c6.j2 ../templates/nginx.conf.j2 
#将配置文件拷贝至templates目录内。
[root@centos7_1 ~]# cd /apps/yaml/
[root@centos7_1 yaml]# cat roles.yml #创建调用文件
---
- hosts: web
   remote_user: root
   roles:
   - nginx
[root@centos7_1 yaml]#ansible-playbook roles.yml  #利用ansible-playbook执行。

示例2:变量调用

1
2
3
4
5
6
7
8
9
利用定义变量使远程主机的nginx服务运行用户变更为daemon
[root@centos7_1 ~]# vim/etc/ansible/roles/nginx/vars/main.yml
username: daemon
[root@centos7_1 ~]# vim/etc/ansible/roles/nginx/templates/nginx.conf.j2
user {{ username }};  #  将此处原有用户修改为变量
[root@centos7_1 ~]# cd/apps/yaml/
[root@centos7_1 yaml]#ansible-playbook  roles.yml
[root@centos7_1 yaml]#ansible-playbook  -e"username=adm"  roles.yml
#也可以直接利用命令行传递变量参数给剧本文件。

示例3:在playbook调用角色方法:传递变量给角色

1
2
3
4
5
6
7
8
9
[root@centos7_1 yaml]vim roles.yml
---
  - hosts:web
    remote_user:root
    roles:
    - {role: nigix, username: nginx } 
   #在调用nginx角色是使用变量username:nginx时服务运行用户为nginx
    键role:用于指定角色名称;后续的键值对用户传递变量给角色
[root@centos7_1yaml]# ansible-playbook roles.yml

示例4:条件测试角色调用

1
2
3
4
5
6
7
8
9
还可以基于条件测试实现角色调用;
[root@centos7_1yaml]vim roles.yml
---
- hosts:web
   remote_user: root
   roles:
   {role: nigix, username: nginx ,when: “ansible_distribution_major_version ==’7’”}
#基于条件测试调用变量赋予nginx。
[root@centos7_1 yaml]#ansible-playbook -t instconf  roles.yml

示例5:角色安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@centos7_1 ~]# mkdir/etc/ansible/roles/memcached/tasks -pv
[root@centos7_1 ~]# vim  /etc/ansible/roles/memcached/tasks/main.yml
- name: install package
   yum: name=memcached state=present
- name: start memecached
   service: name=memcached state=started
     
[root@centos7_1 ~]# cd/apps/yaml/
[root@centos7_1 yaml]# cat mem.yml
---
- hosts: web
   remote_user: root
   roles:
   - { role: nginx,when:ansible_distribution_version == '7' }  
   #系统为centos7时调用执行nginx
   - { role: memcached,when: ansible_hostname =='memcached' }  
   #系统用户名为memcached的主机调用执行角色memcached。

示例6:角色变量调整memcached内存大小

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
利用变量使远程主机上的Memcahed的缓存大小占用系统内存大小的三分之一。
[root@centos7_1 ~]# cd/etc/ansible/roles/memcached/
[root@centos7_1 memcached]#ls
handlers/  tasks/    templates/
[root@centos7_1 memcached]#mkdir  templates
[root@centos7_1memcached]# scp 172.16.254.216:/etc/sysconfig/memcached \
     ./templates//memcached.j2
[root@centos7_1 memcached]#vim templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ansible_memtotal_mb//3 }}"
  #变量设置内存的3分之一  此变量为远程主机的总内存//3 指除3取商
   便为远程主机的三分之一
[root@centos7_1 memcached]#mkdir handlers/
[root@centos7_1 memcached]#vim handlers/main.yml
- name: restart memcached
   service: name=memcached state=restarted
[root@centos7_1 memcached]#cd /apps/yaml/
root@centos7_1 yaml]#ansible-playbook   mem.yml  #执行剧本

转自:http://lxlxlx.blog.51cto.com/3363989/1894385

本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1967514如需转载请自行联系原作者


qianghong000

相关文章
|
12天前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
1月前
|
运维 负载均衡 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第34天】在现代IT运维工作中,自动化已成为提升效率、减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。我们将通过实际案例展示如何利用Ansible的Playbooks来自动化常见任务,并讨论其对提高运维团队工作效率的影响。
|
1月前
|
运维 应用服务中间件 网络安全
自动化运维:使用Ansible进行批量服务器配置
【9月更文挑战第35天】在现代IT基础设施管理中,高效、可扩展的自动化工具是提升工作效率的关键。本文将引导您了解如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置过程,确保一致性和可靠性的同时减少人为错误。通过实际案例,我们将展示如何编写Ansible Playbook以实现批量服务器配置,从而让您能够更加轻松地管理和维护您的服务器群。
|
20天前
|
运维 应用服务中间件 调度
自动化运维:使用Ansible实现服务器批量管理
【10月更文挑战第26天】在当今快速发展的IT领域,自动化运维已成为提升效率、降低人为错误的关键技术手段。本文通过介绍如何使用Ansible这一强大的自动化工具,来简化和加速服务器的批量管理工作,旨在帮助读者理解自动化运维的核心概念和实践方法。文章将围绕Ansible的基础使用、配置管理、任务调度等方面展开,通过实际案例引导读者深入理解自动化运维的实现过程,最终达到提高运维效率和质量的目的。
|
1月前
|
运维 负载均衡 安全
自动化运维:使用Ansible进行服务器配置管理
【10月更文挑战第15天】在本文中,我们将探讨如何利用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。通过实际案例和代码示例,我们将展示Ansible如何帮助运维人员高效地进行软件部署、系统更新和日常维护任务,从而提升工作效率并减少人为错误。
|
1月前
|
运维 应用服务中间件 Linux
自动化运维:使用Ansible管理服务器配置
【10月更文挑战第2天】在现代IT运维中,自动化是提高效率和减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常的服务器管理工作。我们将从基础讲起,逐步深入到高级应用,展示如何通过编写简单的Playbooks来自动化复杂的配置任务。文章还将探讨Ansible的最佳实践,并分享一些实际案例来说明其在实际工作中的应用。
|
1月前
|
运维 应用服务中间件 nginx
自动化运维:使用Ansible管理服务器
【8月更文挑战第70天】随着互联网技术的飞速发展,服务器的数量和复杂性也在日益增加。如何高效、准确地管理这些服务器,成为了每一个运维人员必须面对的问题。本文将介绍如何使用Ansible这个开源的IT自动化工具,来帮助我们更好地管理服务器。Ansible以其简洁的语法、强大的功能和易于上手的特性,成为了运维人员的好帮手。我们将通过一些实际的例子,来看看Ansible是如何工作的。
|
2月前
|
存储 运维 Ubuntu
自动化运维:使用Ansible管理服务器
【8月更文挑战第61天】本文将介绍如何使用Ansible工具进行服务器的自动化管理。我们将从基础概念开始,逐步深入到实际的应用案例,最后通过代码示例展示如何实现自动化部署和配置管理。无论你是初学者还是有经验的运维工程师,这篇文章都会为你提供有价值的参考。
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第20天】在当今快速发展的信息技术时代,自动化运维已成为提升工作效率、减少人为错误的关键技术手段。本文将引导读者了解如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。通过实际代码示例,我们将一起探索Ansible的核心概念、基本操作以及如何构建可重复使用的Playbooks,旨在为读者提供一种清晰、高效的服务器管理方法。无论你是运维新手还是希望提高现有工作流程的效率,这篇文章都将为你提供宝贵的指导和启发。
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维:使用Ansible进行配置管理和任务自动化
【9月更文挑战第27天】在现代IT基础设施中,自动化运维是提高效率、减少人为错误和确保系统一致性的关键。本文将介绍如何使用Ansible,一个流行的开源IT自动化工具,来简化日常的运维任务。我们将探索Ansible的核心概念,包括它的架构、如何安装和使用它,以及一些实际的使用案例。无论你是新手还是有经验的运维专家,这篇文章都会提供有价值的见解和技巧,以帮助你更好地利用Ansible实现自动化。