内容简介
第1章 概述
关于版本的说明
Ansible的优点
Ansible如何运作
Ansible的精妙设计有哪些
易读的语法
远程主机无须安装任何依赖
基于推送模式
Ansible管理小规模集群
内置模块
非常轻量的抽象层
Ansible太过于简单了吗
我需要具备哪些基础知识
哪些内容不会涉及
安装Ansible
建立一台用于测试的服务器
使用Vagrant来创建测试服务器
将测试服务器的信息配置在Ansible中
使用ansible.cfg文件来简化配置
继续前进
第2章 playbook:一切的开端
一些准备工作
一个简单的playbook
指定一个nginx配置文件
创建一个定制的首页
创建一个webservers群组
运行这个playbook
playbook是YAML格式的
文件的起始
注释
字符串
布尔型
列表
字典
折行
剖析playbook
play
task
模块
将它们整合在一起
执行Ansible后发生变化了吗?跟踪主机状态
来点更酷炫的:添加TLS支持
生成TLS证书
变量
生成nginx配置模板
handler
运行playbook
第3章 inventory:描述你的服务器
inventory文件
准备工作:创建多台Vagrant虚拟机
inventory行为参数
ansible_connection
ansible_shell_type
ansible_python_interpreter
ansible_*_interpreter
改变行为参数的默认值
群组
范例:部署一个Django应用
别名和端口
群组嵌套
编号主机(宠物vs公牛)
主机与群组变量:在inventory 内部
主机和群组变量:在各自的文件中
动态inventory
动态inventory脚本的接口
编写动态inventory脚本
预装的inventory脚本
将inventory分割到多个文件中
使用add_host和group_by在运行时添加条目
add_host
group_by
第4章 变量与fact
在playbook 中定义变量
查看变量的值
注册变量
fact
查看与某台服务器关联的所有fact
查看fact子集
任何模块都可以返回fact
本地fact
使用set fact定义新变量
内置变量
hostvars
inventory_hostname
groups
在命令行设置变量
优先级
第5章 初识Mezzanine:我们的测试应用
为什么向生产环境部署软件是一件复杂的事
PostgreSQL:数据库
Gunicon:应用服务器
nginx:Web服务器
Supervisor:进程管理器
第6章 使用Ansible部署Mezzanine
列出playbook中的task
组织要部署的文件
变量与私密变量
使用迭代(with_items)安装多个软件包
向task中添加sudo语句
更新apt缓存
使用Git来Check Out项目源码
将Mezzanine和其他软件包安装到virtualenv中
task中的复杂参数:稍微跑个题
创建数据库和数据库用户
从模板生成local_settingspy文件
运行django-manage命令
在应用环境中运行自定义的Python脚本
设置服务的配置文件
启用nginx配置文件
安装TLS证书
安装Twitter计划任务
playbook全文
在Vagrant虚拟机上运行playbook
将Mezzanine部署到多台主机
第7章 复杂playbook
在控制主机上运行task
在涉及的主机以外的机器上运行task
手动采集fact
逐台主机运行
只执行一次
处理不利行为命令:changed_when和failed_when
从主机获取IP地址
使用Vault加密敏感数据
通过模式匹配指定主机
限定某些主机运行
过滤器
default过滤器
用于注册变量的过滤器
应用于文件路径的过滤器
编写你自己的过滤器
lookup
file
pipe
env
password
template
csvfile
dnstxt
redis_kv
etcd
编写你自己的lookup插件
更复杂的循环
with_lines
with_fileglob
with_dict
将循环结构用作lookup插件
第8章 role:扩展你的playbook
role的基本构成
范例:Database和Mezzanine role
在你的playbook中使用role
PreTask和PostTask
用于部署数据库的“database”role
用于部署Mezzanine的“mezzanine”role
使用ansible-galaxy创建role文件与目录
从属role
Ansible Galaxy
Web界面
命令行工具
向Galaxy贡献你自己编写的role
第9章 让Ansible快到飞起
SSH Multiplexing与ControlPersist
手动启用SSH Multiplexing
Ansible 中的SSH Multiplexing选项
pipelining
启用pipelining
将主机配置为支持pipelining
fact缓存
JSON文件fact缓存后端
Redis fact缓存后端
Memcached fact缓存后端
并行性
加速模式
火球模式
第10章 自定义模块
范例:检测远程服务器是否可达
使用script模块替代编写自己的模块
模块形式的can reach
自定义模块该放到哪里
Ansible如何调用模块
生成带有参数的独立Python脚本(仅限Python模块)
将模块复制到远程主机
在远程主机上创建参数文件(仅限非Python模块)
调用模块
预期的输出
Ansible预期的输出变量
使用Python来实现模块
解析参数
访问参数
导入AnsibleModule辅助类
参数选项
AnsibleModule的初始化参数
返回成功或失败
调用外部命令
检测模式(dry run)
文档化你的模块
调试你的模块
使用Bash实现模块
为Bash指定替代的位置
范例模块
第11章 Vagrant
便捷的Vagrant配置项
端口转发和私有IP地址
启用agent forwarding
Ansible置备器
置备器何时运行
由Vagrant生成inventory
并行配置
指定群组
第12章 Amazon EC2
术语
实例
Amazon系统镜像
标签
指定认证凭据
环境变量
配置文件
必要条件:Boto Python库
动态inventory
inventory缓存
其他配置项
自动生成群组
使用标签定义动态群组
把标签应用到现有资源
更好听的群组名
EC2 Virtual PrivateCloud(VPC)和EC2 Classic
配置ansiblecfg支持使用EC2
启动新的实例
EC2密钥对
创建新的密钥
上传已有密钥
安全组
允许的IP地址
安全组端口
获取最新的AMI
向群组中添加一个新的实例
等待服务器启动
创建实例的幂等性方法
全部加在一起
指定Virtual Private Cloud
动态inventory和VPC
构建AMI
使用ec2_ami模块
使用Packer
其他模块
第13章 Docker
Docker与Ansible配合案例
Docker应用的生命周期
容器化我们的Mezzanine应用
使用Ansible创建Docker镜像
Mezzanine
其他的容器镜像
Postgres
Memcached
Nginx
certs
构建镜像
部署Docker化的应用
启动数据库容器
获取数据库容器的IP地址和映射端口
等待数据库启动
初始化数据库
启动Memcached容器
启动Mezzanine容器
启动证书容器
启动Nginx容器
完整的playbook
第14章 调试Ansible playbook
调试SSH问题
debug模块
assert模块
在执行前检查你的playbook
语法检查
列出主机
列出task
检测模式
diff(显示文件差异)
限制特定的task运行
step
start-at-task
tags
继续向前
附录A SSH
附录B 默认设置
附录C 为EC2证书使用IAM role
术语
参考文献
索引