Ansible-roles学习

目录

一.roles角色介绍

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

ROLES目录结构

目录 含义
roles 所有脚色都必须放在roles目录下,这个目录可以自定义,默认位置/etc/ansible/roles
project 具体角色项目名称,比如nginx,tomcat,php
files 用来存放copy模块过scripit模块调用文件
templates 用来存放jinjia2模板,template模块会自动在此目录寻找jinjia2模板文件
tasks 此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其他的位于此目录的task文件
handlers 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作
vars 此目录应当包含一个main.yml文件,用于定义此角色用到的变量
defaults 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量
meta 此目录应当包含一个main.yml文件,用于定义此角色的特授及其依赖关系

二.示例

一.安装httpd服务

1.创建目录

复制代码
[root@tdm1 ~]# cd /etc/ansible/roles/
# 创建需要用到的目录
[root@tdm1 roles]# mkdir -p httpd/{handlers,tasks,templates,vars}
[root@tdm1 roles]# cd httpd/
[root@tdm1 httpd]# tree .
.
├── handlers
├── tasks
├── templates
└── vars

4 directories, 0 file

2.准备变量文件

复制代码
[root@tdm1 httpd]# vim vars/main.yml
PORT: 8088        #指定httpd监听的端口
USERNAME: www     #指定httpd运行用户
GROUPNAME: www    #指定httpd运行组

3.配置文件模板

复制代码
# copy一个本地的配置文件放在templates/下并已j2为后缀
[root@ansible httpd]# cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2

# 找到一下几个参数,进行一些修改,调用上面定义的变量
[root@tdm1 httpd]# vim templates/httpd.conf.j2
Listen {{ PORT }} 
User {{ USERNAME }}
Group {{ GROUPNAME }}

4.编写任务剧本,创建用户,创建组,安装软件,配置,启动登

复制代码
# 创建组的task
[root@tdm1 httpd]# vim tasks/group.yml
- name: Create a Startup Group
  group: 
    name: www 
    gid: 60 
    system: yes

# 创建用户的task
[root@tdm1 httpd]# vim tasks/user.yml
- name: Create Startup Users
  user: 
    name: www 
    uid: 60 
    system: yes 
    shell: /sbin/nologin

# 安装软件的task
[root@tdm1 httpd]# vim tasks/install.yml
- name: Install Package Httpd
  yum: 
    name: httpd 
    state: installed

# 配置软件的task
[root@tdm1 httpd]# vim tasks/config.yml
- name: Copy Httpd Template File
  template: 
    src: httpd.conf.j2 
    dest: /etc/httpd/conf/httpd.conf
  notify: Restart Httpd

# 启动软件的task
[root@tmd1 httpd]# vim tasks/start.yml
- name: Start Httpd Service
  service: 
    name: httpd 
    state: started 
    enabled: yes

# 编写main.yml,将上面的这些task引入进来
[root@tdm1 httpd]# vim tasks/main.yml
- include: group.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: start.ym

5.编写handlers

复制代码
[root@tdm1 httpd]# vim handlers/main.yml
# 这里的名字需要和task中的notify保持一致
- name: Restart Httpd
  service: 
  name: httpd 
  state: restarted

6.编写yml文件调用httpd角色

复制代码
[root@tdm1 httpd]# cd ..
[root@tdm1 roles]# vim httpd_roles.yml
---
- hosts: all
  remote_user: root
  roles:
    - role: httpd        #指定角色名称

7.查看整个目录

复制代码
[root@tdm1 roles]# tree
.
└── httpd
    ├── handlers
    │   └── main.yml
    ├── httpd_roles.yml
    ├── tasks
    │   ├── config.yml
    │   ├── group.yml
    │   ├── install.yml
    │   ├── main.yml
    │   ├── start.yml
    │   └── user.yml
    ├── templates
    │   └── httpd.conf.j2
    └── vars
        └── main.yml

5 directories, 10 files

8.测试playbook语法是否正确

复制代码
[root@tdm1 roles]# ll
total 4
drwxr-xr-x 6 root root 4096 Sep  6 14:13 httpd
[root@tdm1 roles]# ansible-playbook httpd/httpd_roles.yml  -C

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [httpd : create group] ********************************************************************************************changed: [47.93.98.117]

TASK [httpd : create user] *********************************************************************************************changed: [47.93.98.117]

TASK [install httpd] ***************************************************************************************************ok: [47.93.98.117]

TASK [httpd : configure template file] *********************************************************************************changed: [47.93.98.117]

TASK [start httpd] *****************************************************************************************************changed: [47.93.98.117]

RUNNING HANDLER [restart httpd] ****************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=7    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

9.执行剧本

复制代码
[root@tdm1 httpd]# ansible-playbook httpd_roles.yml 

PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]

TASK [httpd : create group] ********************************************************************************************ok: [47.93.98.117]

TASK [httpd : create user] *********************************************************************************************ok: [47.93.98.117]

TASK [install httpd] ***************************************************************************************************ok: [47.93.98.117]

TASK [httpd : configure template file] *********************************************************************************changed: [47.93.98.117]

TASK [start httpd] *****************************************************************************************************changed: [47.93.98.117]

RUNNING HANDLER [restart httpd] ****************************************************************************************changed: [47.93.98.117]

PLAY RECAP *************************************************************************************************************47.93.98.117               : ok=7    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
相关推荐
镜子AI3 分钟前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
tianyuanwo27 分钟前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
视觉小萌新2 小时前
AI Class 3 · Chapter 1:变量、字符串、list/dict、if/for(python学习-小白版-有经验可跳过)
python·学习·list
知已难寻3 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning3 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器
say_fall3 小时前
【Linux系统编程】Ext 文件系统:磁盘与存储、文件与目录、现代计算机究竟如何寻找文件
linux·运维·服务器·数据库·c++
wacsii4 小时前
【Linux进程(一)】Linux 进程初探:操作系统如何管理进程?fork() 为什么返回两次?
linux·运维·服务器
相思难忘成疾5 小时前
从零搭建 Kubernetes 1.30 集群:kubeadm 部署一主多从实战(RHEL 9.3 + Docker + flannel)
linux·运维·kubernetes
PellyKoo5 小时前
【docker】cifs卷改smb密码后容器起不来的解决方法
运维·docker·容器
云飞云共享云桌面5 小时前
1台SolidWorks服务器如何承载10个设计并发?
运维·服务器·网络·3d·制造