Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Ansible-role

Ansible-role

作者头像
星哥玩云
发布于 2022-09-15 13:09:19
发布于 2022-09-15 13:09:19
41100
代码可运行
举报
文章被收录于专栏:开源部署开源部署
运行总次数:0
代码可运行

假设我们要写一个playbook来安装管理lamp环境,那么这个playbook就会写很长。所以我们希望把这个很大的文件分成多个功能拆分, 分成apache管理,php管理,mysql管理,然后在需要使用的时候直接调用就可以了,以免重复写。就类似编程里的模块化的概念,以达到代码复用的效果。

一、roles介绍

roles: ansible模块,类似于函数,完成一个任务的指令。每一个roles都有自己特定的目录结构,就是通过分别将variables, tasks及handlers等放置于单独的目录中,并可以便捷地调用它们的一种机制。

roles优点:

​ 1)模块中指令较少,方便编写

​ 2)重复调用方便

3)排错方便

二、创建roles的目录结构

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
files:用来存放由copy模块或script模块调用的文件。
tasks:至少有一个main.yml文件,定义各tasks。
handlers:有一个main.yml文件,定义各handlers。
templates:用来存放jinjia2模板。
vars:有一个main.yml文件,定义变量。
meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系。

注意: 在每个角色的目录中分别创建files, tasks,handlers,templates,vars和meta目录,用不到的目录可以创建为空目录.

三、案例:通过roles实现lamp

分析:需定制三个角色: httpd,mysql,php

3.1) 创建roles目录及文件,并确认目录结构

roles/ ├── httpd │ ├── files │ ├── handlers │ │ └── main.yml │ ├── meta │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── templates │ └── vars │ └── main.yml ├── mysql │ ├── files │ ├── handlers │ │ └── main.yml │ ├── meta │ │ └── main.yml │ ├── tasks │ │ └── main.yml │ ├── templates │ └── vars │ └── main.yml └── php ├── files ├── handlers │ └── main.yml ├── meta │ └── main.yml ├── tasks │ └── main.yml ├── templates └── vars └── main.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@manage01 ansible]# mkdir -p roles/{httpd,mysql,php}/{files,tasks,handlers,templates,vars,meta}
[root@manage01 ansible]# touch roles/{httpd,mysql,php}/{tasks,handlers,vars,meta}/main.yml
[root@manage01 ansible]# tree roles/
roles/
├── httpd
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
├── mysql
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│       └── main.yml
└── php
    ├── files
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── tasks
    │   └── main.yml
    ├── templates
    └── vars
        └── main.yml

21 directories, 12 files

3.2)准备httpd服务器的主页文件,php测试页和配置文件等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@manage01 files]# ls
httpd.conf  phpinfo.php

3.3)编写httpd角色的main.yml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@manage01 roles]# cat httpd/tasks/main.yml 
- name: httpd httpd-devel httpd-manual软件包安装
  yum: name={{item}} state=latest
  with_items:
    - httpd
    - httpd-devel
    - httpd-manual

- name: 创建apache管理用户 www
  user: name={{user}} state=present


- name: 设置apache开机启动,并启动服务
  service: name=httpd enabled=yes state=started

- name: 拷贝配置文件,初始化业务
  copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
  #定义通知调用,当配置文件更新,需要重启服务
  notify: 
    - restart apache

- name: 拷贝php测试页面
  copy: src=/etc/ansible/roles/httpd/files/phpinfo.php dest=/var/www/html/

[root@manage01 roles]# cat httpd/vars/main.yml
user: www


[root@manage01 roles]# cat httpd/handlers/main.yml 
- name: restart apache
  service: name=httpd state=restarted

3.4)编写mysql角色的main.yml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@manage01 ansible]# ls roles/php/files/
www.conf

[root@manage01 roles]# cat mysql/tasks/main.yml 
- name: mysql 用户创建
  user: name={{user}} state=present

- name: mysql 软件安装
  yum: name={{item}} state=latest
  with_items:
    - mariadb
    - mariadb-server

- name: 启动服务,并设置开机启动
  service: name=mariadb enabled=yes state=started

- name: 改变mysql文件的所有者为mysql
  file: path='/usr/lib/mysql' owner={{user}} group={{user}} recurse=yes


[root@manage01 roles]# cat mysql/vars/main.yml 
user: mysql

3.5):编写php角色的main.yml文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@manage01 ansible]# cat roles/php/tasks/main.yml 
- name: 安装php
  yum: name={{item}} state=latest
  with_items:
    - php
    - php-mysqlnd
    - php-gd
    - php-ldap
    - php-odbc
    - php-pear
    - php-xml
    - php-xmlrpc
    - php-mbstring
    - php-snmp
    - php-soap
    - curl
    - curl-devel 
    - php-bcmath
    - php-fpm

- name: copy www.conf to /etc/php-fpm.d
  copy: src=/etc/ansible/roles/php/files/www.conf dest=/etc/php-fpm.d force=yes
  notify:
    - restart php-fpm


[root@manage01 ansible]# cat roles/php/handlers/main.yml 
- name: restart php-fpm
  service: name=php-fpm state=restarted

3.6)编写lamp的playbook文件调用前面定义好的三个角色

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@manage01 yaml]# cat lamp.yml 
---
- hosts: group1
  remote_user: root
  roles:
  - httpd
  - mysql
  - php

3.7) 执行lamp的playbook文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@manage01 yaml]# ansible-playbook -C lamp.yml
[root@manage01 yaml]# ansible-playbook lamp.yml

3.8) 测试业务机器

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于ansible role实现LAMP平台批量部署
前言 作为运维人员,当面对几十台或上百台服务器需要修改某个参数或部署某个平台,你将从何入手呢?ansible的出现很好的解决了这一困扰,ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。本文带来的是基于Ansible Role实现LAMP平台批量部署。 ansible简介 特性 No agents:不需要在被管控主机上安装任意客户端 No server:无服务器端,使用
小小科
2018/05/02
8240
基于ansible role实现LAMP平台批量部署
Ansible项目实战LNMP
通过ansible roles配置lnmp环境,nginx通过源码编译安装,php通过源码编译安装,MySQL通过yum安装(mysql源码编译超级慢)支持系统(CentOS6.x和centos7.x系列)
星哥玩云
2022/07/27
4920
Ansible项目实战LNMP
Ansible 详细用法说明(二)
例:获取某台主机的变量 ansible 10.1.6.68 -m setup ===================================== script:发送脚本到各被管理节点,并执行。不需要参数 ===================================== ansible all -m script -a 'test.sh' 直接在-a 后面指定脚本即可。 =============================== selinux: 管理selinux。 =======
小小科
2018/05/04
2.8K0
Ansible 详细用法说明(二)
玩转企业常见应用与服务系列(十五):Ansible palybook 原理与实践
Playbooks是Ansible的配置,部署和编排语言。playbook是由一个或多个play组成的列表,play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module。将多个play组织在一个playbook中,即可以让它们联合起来按事先编排的机制完成某一任务。
民工哥
2023/11/30
4440
玩转企业常见应用与服务系列(十五):Ansible palybook 原理与实践
Ansible之roles介绍
假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器。我们如何来定义playbook?
菲宇
2019/06/12
5940
Ansible之roles介绍
Ansible极简教程
Ansible 极简教程 一、基本部署 简介 ansible是一个自动化管理工具,它足够简单且足够强大来管理大批量设备。可用于配置系统,部署软件以及组合复杂任务。 特性 无agent模式,push模式,这一点与fabric有几分类似 并发执行 可用任何语言写扩展模块 有类似Puppet(RAL)或者SaltStack(state)的playbook 灵活的匹配规则,通配符,正则 安装Ansible 1234 # yum -y install epel-release# yum list all *ansib
KangVcar
2018/07/06
4.2K1
大神带你 20 分钟学会 Ansible !
作者:kangvcar 来源:见文末 一、基本部署 安装Ansible # yum -y install epel-release # yum list all *ansible* # yum inf
小小科
2018/06/20
3.7K0
深入浅出自动化运维工具-----aniible
ansible特性 1.模块化设计,调用特定的模块来完成特定任务 2.基于python语言实现 3.其模块支持JSON、YAML等标准输出格式 4.支持playbook
不吃小白菜
2020/10/28
1.7K0
深入浅出自动化运维工具-----aniible
[Ansible专栏]Ansible Playbook介绍和使用
Ansible Playbooks 提供了一个可重复、可重用、简单的配置管理和多机部署系统,非常适合部署复杂的应用程序。Ansible Playbook 是自动化任务的蓝图,这些任务是复杂的 IT 操作,在有限或没有人为参与的情况下执行。Ansible Playbook 在一组、组或分类的主机上执行,它们共同构成一个 Ansible 清单。
没有故事的陈师傅
2022/12/06
9220
ansible简易入门之playbook
Playbooks 简介 Playbooks 与 adhoc 相比,是一种完全不同的运用 ansible 的方式,是非常之强大的. 简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署. Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务. 我们使用 adhoc 时,主要是使用 /usr/bin
jeremyxu
2018/05/10
1.2K0
11-Role
角色的配置在ansible.cfg中的roles_path选项,多个目录用':'隔开
小朋友呢
2020/01/14
7900
自动化运维工具Ansible之Roles角色详解
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权)。
踏歌行
2020/10/15
1.3K0
自动化运维工具Ansible之Roles角色详解
Ansible 企业高可用负载均衡部署方案
一、前言 ansible作为一款灵活、高效、功能丰富的自动化部署工具在企业运维管理中备受推崇。经过测试,我来使用ansible部署小型企业服务框架,实现高可用、负载均衡的目标。如有错误敬请赐教。 目标
老七Linux
2018/05/31
1.3K0
ansible
  ansible是目前最受运维欢迎的自动化运维工具,基于Python开发,集合了众多运维工具(SaltStack puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。   ansible是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
Cyylog
2020/08/19
4.1K1
第七章·自动化运维工具-Ansible roles
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
8910
第七章·自动化运维工具-Ansible roles
Ansible之Role角色
roles则是在ansible中,playbooks的目录组织结构。而模块化之后,成为roles的组织结构,易读,代码可重用,层次清晰。
用户8639654
2021/08/18
4270
Ansible 以及 Ansible-playbook介绍
Anasible 是基于Python2-Paramiko 模块开发的自动化维护工具,实现了批量系统配置、部署、运行等功能。Ansible是基于模块工作的,本身不具备批量部署的功能,如果想要实现批量自动化部署,是Ansible自身的各种模块的集合。
jwangkun
2021/12/23
6.3K0
Ansible 以及 Ansible-playbook介绍
ansible自动运维工具之ansible-playbook详解
playbook文件定义的任务需要通过ansible-playbook命令进行调用并执行,ansible-playbook命令用法如下:
小手冰凉
2019/10/16
2.3K0
ansible自动运维工具之ansible-playbook详解
Ansible 通过Playbook部署LAMP
Ansible的PlayBook文件格式为YAML语言,所以希望你在编写PlayBook前对YAML语法有一定的了解,否则在运行PlayBook的时候经常碰到语法错误提示,这里我们通过介绍批量部署LAMP为例,介绍一下LAMP.yml这个PlayBook的具体应用写法,如果你对YAML语言没有了解的话,请自行去百度学习.
王 瑞
2022/12/28
9410
ansible自动化部署工具
Ansible是一种IT自动化工具。它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新。Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境。Ansible也是一种简单的自动化语言,可以完美地描述IT应用程序基础结构。
yuezhimi
2020/09/30
2.2K0
ansible自动化部署工具
相关推荐
基于ansible role实现LAMP平台批量部署
更多 >
LV.5
这个人很懒,什么都没有留下~
加入讨论
的问答专区 >
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验