Ansible是一个自动化运维工具
,可以实现系统配置、软件部署,以及更多更加高级复杂的任务,比如持续集成/持续部署、零宕机滚动更新等。
Ansible的核心目标是简单易用,提供一整套机制简化难度,特别是复杂任务的编排和批量化管理
基于ssh协议,不需要安装服务或者客户端
使用yaml标记语言,语法简单高效,配置即代码
内置大量模块,封装简化常用命令和任务
playbook和roles提供强大的编排能力
使用python实现并且开源,易扩展、可定制
ansible localhost -m fetch -a "src=/etc/fstab dest=/tmp/fstab"
# ad-hoc模式(点对点模式),用于批量执行简单命令
# localhost ——要管理的主机,定义在清单文件中
# fetch ——引用模块
# "src=/etc/fstab dest=/tmp/fstab" ——模块参数
ansible-playbook -i hosts playbook.yml
# playbook模式(剧本模式),是ansible主要的执行任务的方式
# hosts ——指定清单文件
# playbook.yml ——ansible playbook
用来配置管理的主机IP信息,默认路径:/etc/ansible/hosts
# Ex 1: Ungrouped hosts, specify before any group headers.
## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10
# Ex 2: A collection of hosts belonging to the 'webservers' group
## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110
# If you have multiple hosts following a pattern you can specify
# them like this:
## www[001:006].example.com
[webservers]
# 已配置ssh互信
10.10.160.41
# 主机 端口号 用户名 密码
10.10.160.42 ansible_port=22 ansible_user=root ansible_ssh_pass=cljslrl0620
Ansible封装的基本功能单元
# 查看所有模块
ansible-doc -l
# 查看某个模块详情
ansible-doc -s fetch
command # 远程执行命令
shell # 远程执行命令,经过系统shell,例如:/bin/sh
script # 远程执行本地脚本
setup # 获取主机的基本信息
file # 文件操作,创建、删除、修改
copy # 拷贝文件
find # 查找文件
replace # 替换文件中的字符串
blockinfile # 操作文件中的一段文本
lineinfile # 操作某行中的一段文本
user # 管理用户
group # 管理组
yum_repository # 管理yum仓库
yum # 通过yum管理软件包
cron # 管理远程的定时任务
service # 管理远程主机服务
playbook是ansible实现配置、部署、编排的载体,是一个YAML格式的文本文件,通过编写playbook来实现业务逻辑
ansible-playbook test.yml # 执行playbook
ansible-playbook --syntax-check test.yml # 检查playbook中yaml语法
# playbook由多个play组成,每个play以“---"标记开始
---
- hosts: webservers # 定义执行任务的主机
vars: # 定义变量
http_port: 80
max_clients: 200
remote_user: root # 定义用户
tasks: # 每个play对应多个task
- name: ensure apache is at the latest version # 每个task通过调用模块,执行最基本的任务
yum: pkg=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running
service: name=httpd state=started
handlers: # 可调用任务,在task执行后可通过notify调用它
- name: restart apache
service: name=httpd state=restarted
官方文档参考
官方文档参考
官方文档参考
当业务逻辑复杂后就需要使用include和roles
ansible提供的引用其他play或者task的机制,用于实现功能模块的重用
ansible定义的的目录组织方式,用于层次性结构化的组织playbook
- name: this is a play at the top level of a file
hosts: all
remote_user: root
tasks:
- include: foo.yml # 引用其他task
- include: webservers.yml # 引用其他play
roles通过分别将变量(vars)、文件(files)、任务(tasks)、模板(templates)及处理器(handlers)放置于单独的目录中,实现对playbook便捷的复用
# 一个典型的Roles目录结构:
hosts # 清单文件
site.yml # playbook
group_vars/ # 存放全局变量
roles/
webservers/ # 角色的项目名称
files/ # 用于存放文件
templates/ # 用于存放jinja2模板
tasks/ # 定义任务的playbook集合
handlers/ # 定义处理器
vars/ # 定义变量
defaults/ # 定义默认变量
# site.yml内容如下:
---
- hosts: webservers
roles: # 调用roles目录下的webservers项目
- webservers
# 执行playbook
ansible-playbook -i host site.yml
通过查看经典示例来学习规范的Roles目录组织结构
Ansible Tower为Ansible带来了Web服务、权限管理等功能,使其更加方便易用
Ansible Tower官方链接
想了解Ansible扩展开发的内容可以看下一篇
官方文档
中文官方文档
Ansible经典示例
所有模块说明