内容纲要
什么是 Ansible ?
- 是一种 IT 自动化工具
- 依赖现有的操作系统的凭证来访问控制远程机器
- 简单易用、安全可靠
Ansible 可以完成哪些任务?
- 系统配置
- 开发软件
- 编排高级的 IT 任务(持续集成等)
Ansible 的优点
- 轻量级
- 易学习
- 操作灵活
- 无客户端
- 推送式
- Module 丰富
- 商业化支持(Tower)
Ansible 的缺点
- 效率低(串行执行)
- 易挂起
与其他类似项目对比
| 项目 | 客户端 | 通信方式 | Web 页面 | 效率 | 易用 | 实现语言 | API | 开源社区 |
|---|---|---|---|---|---|---|---|---|
| Ansible | 无 | ssh | 有(Tower) | 低 | 高 | Python | 有 | 40.8 K |
| Puppet | 有 | socket | 有 | 一般 | 低 | Ruby | 有 | 5.6 K |
| Chef | 有 | ssh | 有 | 一般 | 高 | Python | 有 | 6.1 K |
| Salt | 有 | RabbitMQ | 有 | 高 | 高 | Python | 有 | 10.5 K |
使用
安装
- Mac:
pip install ansible
配置
- Host 配置:
/etc/ansible/hosts- 配置项: Inventory | Inventory 中文
- ssh 配置:
ssh-copy-id -i .ssh/[公钥文件] [用户]@[远程主机]
Ad-Hoc & Playbook
- 类似
shell&shell script,但 Playbook 更加强大 - Playbook 是对 Ad-Hoc 的编排
- Ad-Hoc 适合简单快速的任务
- Playbook 适合复杂异步的任务
- Playbook 解决 shell script 的编写复杂、操作繁琐、跨平台问题
Ad-Hoc
语法
ansible [远程主机 | 分组] -m [模块] -a '模块参数'
Playbook
什么是 Playbook ?
- 由 YAML 编写
- 算是一门编程语言
- 命令集合
功能
- 声明配置
- 编排复杂任务
- 控制任务执行
语法
- 变量(Inventory & Playbook)
- vars
- 流程控制
- 循环
- with_items
- with_nested (嵌套)
- 判断
- when [true, false, not]
基本结构
- host: 被操作的机器
- remote_user: 登录机器的用户
- tasks: 需要执行的任务
注意 ↓
如果语句以 "{" 开头,需要用**引号**包起来
例子
$ vim test.yml
---
- hosts: 192.168.1.111 // 指定主机
remote_user: root // 指定在被管理的主机上执行任务的用户
tasks: // 任务列表
- name: disable selinux // 任务名
command: '/sbin/setenforce 0' // 调用command模块 执行关闭防火墙命令
- name: start nginx // 任务名
service: name=nginx state=started // 调用service模块 开启 nginx 服务
$ ansible-playbook test.yml