Ansible之角色详解
Ansible之角色详解
王先森ansible角色概念
角色(roles)是ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook。
roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
我理解的就是把多个节点都会用到的功能将其定义成模块,以后谁用到就调用该模块即可,而ansible中它有一个特有名称,即角色(rolers)
官方文档:https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html
角色目录规划
官方的目录结构,必须这样定义!
1 | [root@ansible /etc/ansible/roles]# tree |
创建项目目录
因为每台服务器都需要创建用户组,用户,安装服务等,所以我们可以将这些相同的任务单独创建一个init初始化角色。
创建角色目录
1 | cd /etc/ansible/roles/ |
编写系统基础环境角色剧本
配置yum源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18vim init/tasks/yum.yml
#01. 配置yum源
- name: "01_configure_yum_repos"
yum_repository:
name: base
description: base yum repo
baseurl:
- http://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck: no
- name: 02_configure_yum_Repos
yum_repository:
name: epel
description: epel yum repo
baseurl:
- https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck: no
enabled: yes安装常用软件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16vim init/tasks/install.yml
#2. 安装常用软件
- name: 03_install_packages all
yum:
name: "{{ packages }}"
vars:
packages:
- lrzsz
- ntpdate
- lsof
- iftop
- iotop
- tree
- vim
- net-tools
- bash-completion创建数据目录和脚本目录
1
2
3
4
5
6
7
8
9
10
11vim init/tasks/datadir.yml
# 3. 创建数据目录和脚本目录
- name: 04_create dir
file:
path: "{{ item }}"
state: directory
mode: 0755
loop:
- /data
- /server/script创建时间同步定时任务
1
2
3
4
5
6
7vim init/tasks/ntpdate.yml
#4.创建时间同步定时任务
- name: 05_cron_ntpdate
cron:
name: Time_Update
minute: "*/5"
job: /sbin/ntpdate time1.aliyun.com拷贝优化后的ssh配置文件
1 | vim init/tasks/ssh.yml |
- 添加环境变量
1
2
3
4
5
6
7
8
9
10
11vim init/tasks/profile.yml
#6. 添加环境变量
- name: 07_profile
lineinfile:
dest: /etc/profile
regexp: "{{ item.name }}"
line: "{{ item.profile }}"
backup: yes
loop:
- { name: '^export PS1=', profile: 'export PS1="[\[\e[1;35m\]\u\[\e[0;32m\]@\[\e[00;32m\]\H\[\e[00m\]\[\e[01;31m\] \w\[\e[00m\]]\$"'}
- { name: 'HISTTIMEFORMAT', profile: 'HISTTIMEFORMAT="%F %T `whoami` "' } - 内核参数优化
1 | vim init/tasks/sysctl.yml |
- 整合到main.yml
1
2
3
4
5
6
7
8
9vim init/tasks/main.yml
- name: Centos init server
- include_tasks: yum.yml
- include_tasks: install.yml
- include_tasks: datadir.yml
- include_tasks: ntpdate.yml
- include_tasks: ssh.yml
- include_tasks: profile.yml
- include_tasks: sysctl.yml
编写jinja模板文件
1 | vim /etc/ansible/roles/init/templates/sshd_config.j2 |
编写handlers文件
1 | vim /etc/ansible/roles/init/handlers/main.yml |
拷贝sysctl.conf.default
1 | cat > /etc/ansible/roles/init/files/sysctl.conf.default <<EOF |
定义playbook
【注意】:要在roles目录同级创建playbook。
1 | vim /etc/ansible/init.yaml |
当然也可以把这些内容写入同一个playbook中。playbook的名字可以自定义。
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果