Ansible角色介绍

官方地址:

https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html

角色目录规划

目录说明:

官方的目录结构,必须这样定义!

[root@m01 ~]# cd /etc/ansible/roles/
[root@m01 /etc/ansible/roles]# tree
.
├── rsync #角色名称
│ ├── files #存放需要copy的文件
│ ├── handlers #触发任务剧本
│ ├── tasks #具体任务剧本
│ ├── templates #模版文件
│ └── vars #存放变量文件

创建项目目录

因为每台服务器都需要创建用户组,用户,安装服务等,所以我们可以将这些相同的任务单独创建一个初始化初始化角色。

角色规划:

1.init      #初始化任务
2.rsync #rsync服务

创建角色目录:

[root@m01 ~]# cd /etc/ansible/roles/
[root@m01 /etc/ansible/roles]# mkdir {init,rsync}/{vars,tasks,templates,handlers,files} -p
[root@m01 /etc/ansible/roles]# tree
/etc/ansible/roles/
.
├── init
│ ├── files
│ ├── handlers
│ ├── tasks
│ ├── templates
│ └── vars
├── rsync
│ ├── files
│ ├── handlers
│ ├── tasks
│ ├── templates
│ └── vars
└── site.yml

编写init角色剧本

编写任务剧本

[root@m01 ~]# cat /etc/ansible/roles/init/tasks/main.yml
#01.配置base源
- name: 01_configure_yum_repos
yum_repository:
name: base
description: base yum repo
baseurl:
- http://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
gpgcheck: no
#02.配置epel源
- name: 02_configure_yum_Repos
yum_repository:
name: epel
description: epel yum repo
baseurl:
- https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
gpgcheck: no
#03.安装常用软件
- name: 03_install_server
yum:
name: "{{ packages }}"
vars:
packages:
- ntpdate
- lsof
- tree
- iftop
- iotop
#04.创建用户组
- name: 04_create_group
group:
name: www
gid: 666
#05.创建用户
- name: 05_create_user
user:
name: www
uid: 666
group: www
shell: /sbin/nologin
create_home: no
#06.创建数据目录和脚本目录
- name: 06_create_dir
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- /data
- /server/scripts
#07.创建同步时间定时任务
- name: 07_cron_ntpdate
cron:
name: Time_Update
minute: "*/5"
job: '/sbin/ntpdate time1.aliyun.com'
#08.拷贝优化后的ssh配置文件
- name: 08_copy_ssh
template:
src: sshd_config.j2
dest: /etc/ssh/sshd_config
mode: '0600'
backup: yes
notify: restart sshd

编写模版文件

[root@m01 ~]# tree /etc/ansible/roles/init/templates/
/etc/ansible/roles/init/templates/
└── sshd_config.j2

编写处理程序文件

[root@m01 ~]# cat /etc/ansible/roles/init/handlers/main.yml
- name: restart sshd
service:
name: sshd
state: restarted

编写rsync角色剧本

编写任务剧本

[root@m01 ~]# cat /etc/ansible/roles/rsync/tasks/main.yml
#01.安装rsync服务
- name: 01_install_rsync
yum:
name: rsync
state: installed
#02.拷贝配置文件模版
- name: 02_copy_conf
template:
src: "{{ item.src}}"
dest: "/etc/{{ item.dest }}"
mode: "{{ item.mode }}"
backup: yes
loop:
- { src: 'rsyncd.conf.j2', dest: 'rsyncd.conf', mode: '0644' }
- { src: 'rsync.passwd.j2', dest: 'rsync.passwd', mode: '0600' }
notify:
- restart rsyncd
#03.创建备份目录
- name: 03_create_backup_dir
file:
dest: "{{ item }}"
state: directory
owner: www
group: www
loop:
- /backup
- /data
#04.启动服务
- name: 04_start_rsynd
service:
name: rsyncd
state: started
enabled: yes

编写模版文件

[root@m01 ~]# tree /etc/ansible/roles/rsync/templates/
/etc/ansible/roles/rsync/templates/
├── rsyncd.conf.j2
└── rsync.passwd.j2 [root@m01 ~]# cat /etc/ansible/roles/rsync/templates/rsync.passwd.j2
{{ user_rsyncd }}:{{ passwd_rsyncd }} [root@m01 ~]# cat /etc/ansible/roles/rsync/templates/rsyncd.conf.j2
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = {{ user_rsyncd }}
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
path = /backup
[data]
path = /data

编写变量文件

[root@m01 ~]# cat /etc/ansible/roles/rsync/vars/main.yml
user_rsyncd: rsync_backup
passwd_rsyncd: oldzhang

编写处理程序文件

[root@m01 ~]# cat /etc/ansible/roles/rsync/handlers/main.yml
- name: restart rsyncd
service:
name: rsyncd
state: restarted

编写主任务文件

[root@m01 ~]# cat /etc/ansible/roles/site.yml
- hosts: rsync
roles:
- init
- rsync

最终目录

[root@m01 roles]# tree
.
├── init
│   ├── files
│   ├── handlers
│ └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   └── sshd_config.j2
│   └── vars
├── rsync
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   │   ├── rsyncd.conf.j2
│   │   ├── rsync.password.j2
│   └── vars
│   └── main.yml
└── site.yml

Ansible角色的更多相关文章

  1. ansible基础-ansible角色的使用

    ansible基础-ansible角色的使用 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们建议把多个节点都会用到的功能将其定义模块,然后谁要用到该模块就直接调用即可!而在a ...

  2. ansible 角色登陆

    用ansible 来管理远程的主机,最大的好处是方便,ansible不用在远程的主机上安装ansible的客户端,ansible只要能通过ssh连接上远程主机就 能对它进行管理.也就是说ansible ...

  3. Ansible_使用Ansible galaxy部署角色

    一.介绍Anisble galaxy 1.介绍Ansibleu galaxy 1️⃣:Ansible Galaxy (官网:https://galaxy.ansible.com)是一个Ansible内 ...

  4. ansible实现keepalived和nginx高可用

    实验环境 ansible节点 keepalived+nginx节点1    ansible自动安装配置 keepalived+nginx节点2    ansible自动安装配置 httpd节点1 ht ...

  5. 使用ansible安装配置zabbix客户端

    ansible角色简介: 目录名 说明 defaults 默认变量存放目录 handlers 处理程序(当发生改变时需要执行的操作) meta 角色依赖关系处理 tasks 具体执行的任务操作定义 t ...

  6. Ansible_描述角色结构

    一.利用角色构造ansible playbook 1.What's 角色 1️⃣:Ansible角色提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码. 我们可以在标准化目录结构 ...

  7. 进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?

    Tips:与前文 <进击的 Ansible(一):Ansible 快速入门> 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS.由于 Ansible 项目开发活 ...

  8. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

  9. Python开源框架

    info:更多Django信息url:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC) ...

随机推荐

  1. Codeforces #250 (Div. 2) B. The Child and Set

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011639256/article/details/28100041 题读错了啊... 一直跪,但刚 ...

  2. 翻译 What is the concept of Service Container in Laravel?

    原文链接: https://stackoverflow.com/questions/37038830/what-is-the-concept-of-service-container-in-larav ...

  3. 解决 使用migrations 执行update-database 出现System.InvalidOperationException: 实例失败的问题

    好久没有使用Code First的方式来创建模型了  今天重温了一下 但是出现了很多问题 现在总结一下 在我做完初期的操作的之后,使用 update-database -verbose 更新数据库时, ...

  4. KiCAD绘制电源符号

    KiCAD绘制电源符号 KiCAD自带的电源符号有时候不符合我们的操作习惯,需要自己重新定义电源符号,这时候就需要新建(不能更改系统自带库的电源符号) 1.新建符号,参照下图行设置 2.放置引脚和图形 ...

  5. 热修复框架Tinker的从0到集成之路(转)

    转自:http://blog.csdn.net/lisdye2/article/details/54411727 热修复框架Tinker的从0到集成之路 转载请标明出处: http://blog.cs ...

  6. Vuex白话教程第六讲:Vuex的管理员Module(实战篇)

    写在前面 这一讲是 Vuex 基础篇的最后一讲,也是最为复杂的一讲.如果按照官方来的话,对于新手可能有点难以接受,所以想了下,决定干脆多花点时间,用一个简单的例子来讲解,顺便也复习一下之前的知识点. ...

  7. 转帖 使用eclipse创建之前没有创建的web.xml

    由于在下学习Java的时间不长,所以对于一些工具的使用不太熟悉,特别是eclipse,虽然这是一款强大的Java编译工具但是现有汉化版.所以在实际使用的时候难免会遇到各种各样的麻烦.今天就遇到了一个: ...

  8. Linux系统关闭对ping命令做响应。

    1.测试 ping 192.168.10.5 可以正常ping通, 2,修改 /proc/sys/net/ipv4/icmp_echo_ignore_all  文件的值=1 3.在测试 已经ping不 ...

  9. thinkcmf链接多个数据库

    1.打开/data/conf/config.php 'db1'=>[ // 数据库类型 'type' => 'mysql', // 服务器地址 'hostname' => '', / ...

  10. shellcode加密与解密

    // Encoder.cpp : Defines the entry point for the console application.// #include "stdafx.h" ...