Ansible是近年來(lái)急速發(fā)展的開源配置管理工具。在Ansible之前,行業(yè)中已經(jīng)有很多開源配置管理工具了,特別是大名鼎鼎的Puppet,簡(jiǎn)直是配置管理工具中的超級(jí)巨星。然而,Ansible依靠它的簡(jiǎn)單易用、“零依賴”以及弱抽象獲得了無(wú)數(shù)開發(fā)者和運(yùn)維工程師的青睞。遺憾的是,除了官方文檔外,Ansible相關(guān)的優(yōu)秀文檔鳳毛麟角,而本書恰恰就是為了緩解這一問(wèn)題而編寫的。作者在本書中演示了如何使用Ansible管理接近真實(shí)生產(chǎn)環(huán)境的案例。既展現(xiàn)了Ansible的強(qiáng)大功能,又能夠幫助讀者快速入門與上手,本書非常適合作為官方文檔的補(bǔ)充或者搭配閱讀。特別值得一提的是,本書第2版還增加了管理Windows服務(wù)器和網(wǎng)絡(luò)設(shè)備方面的章節(jié),并重新編寫了Docker相關(guān)章節(jié),及時(shí)地對(duì)第1版中的不足進(jìn)行了改進(jìn)。
Lorin Hochstein 從小在魁北克蒙特利爾長(zhǎng)大,除了偶爾會(huì)說(shuō)“閉上燈”這種話之外,從他的口音中你絕對(duì)猜不出他是加拿大人。他正在回歸學(xué)術(shù)界:他已經(jīng)在內(nèi)布拉斯加林肯大學(xué)作為終身教職計(jì)算機(jī)科學(xué)與應(yīng)用的副教授任教2 年。此外,他還曾作為計(jì)算機(jī)科學(xué)家在南加州大學(xué)信息科學(xué)院工作4 年。他在麥吉爾大學(xué)取得了計(jì)算機(jī)工程學(xué)學(xué)士學(xué)位,在波士頓大學(xué)取得了電子工程學(xué)的碩士學(xué)位,并在馬里蘭大學(xué)帕克分校取得了計(jì)算機(jī)科學(xué)的博士學(xué)位。他現(xiàn)在在Netflix 的Chaos 工程團(tuán)隊(duì)任職高級(jí)軟件工程師。RenéMoser 與妻子和三個(gè)孩子一起定居在瑞士。他獲得了IT 專業(yè)的高等教育文憑。在IT 領(lǐng)域中,他喜歡以簡(jiǎn)單的方式實(shí)現(xiàn)需求并不斷擴(kuò)展。他沉浸于開源社區(qū)已超過(guò)15 年,他是Ansible 核心貢獻(xiàn)者和40 多個(gè)Ansible 模塊的作者,以及Apache CloudStack 項(xiàng)目管理委員會(huì)成員及Committer。他目前在SWISS TXT 任職系統(tǒng)工程師。
主譯人員曾于新浪任職技術(shù)總監(jiān),負(fù)責(zé)私有云平臺(tái)研發(fā)與運(yùn)維并支撐新浪微博從零至上市高速發(fā)展的過(guò)程。后于華為任職技術(shù)專家,致力于提升華為公有云運(yùn)維能力。2016年加入貝殼找房前身鏈家網(wǎng),并一直致力于打造基于ansible的自動(dòng)化平臺(tái)。
序. .................................... xxiii
第 2版前言. .......................... xxv
第 1版前言. ........................ xxvii
第 1章 簡(jiǎn)介........................... 1
關(guān)于版本的說(shuō)明 .................... 2
Ansible的優(yōu)勢(shì) ...................... 2
Ansible如何運(yùn)作 .................. 3
Ansible的精妙設(shè)計(jì)賞析 ....... 4
易讀的語(yǔ)法.................... 4
遠(yuǎn)程主機(jī)無(wú)須安裝依賴 . 5
基于推送模式 ................ 5
使用 Ansible管理小規(guī)模環(huán)境 ................................... 6
內(nèi)置模塊 ....................... 6
非常輕量的抽象層 ........ 7
Ansible太過(guò)于簡(jiǎn)單了嗎 ....... 8
需要哪些基礎(chǔ)知識(shí) ................ 8
哪些內(nèi)容不會(huì)涉及 ................ 9
安裝 Ansible ....................... 10
建立一臺(tái)用于測(cè)試的服務(wù)器 ........................................... 11
使用 Vagrant來(lái)創(chuàng)建測(cè)試服務(wù)器 ............................. 11
將測(cè)試服務(wù)器的信息配置在 Ansible中 .................. 14
使用 ansible.cfg文件來(lái)簡(jiǎn)化配置 ............................ 16
展望 .................................... 19
第 2章 playbook:一切的開始. 20
一些準(zhǔn)備工作 ..................... 20
一個(gè)簡(jiǎn)單的 playbook .......... 21
定義 Nginx的配置文件 ........................................... 23
創(chuàng)建一個(gè)定制的首頁(yè) ... 24
創(chuàng)建一個(gè) webservers群組 ....................................... 25
運(yùn)行這個(gè) playbook .............. 25
YAML格式的 playbook ...... 27
文件起始 ..................... 27
注釋 ............................. 27
字符串 ......................... 27
布爾型 ......................... 28
列表 ............................. 28
字典 ............................. 28
分行 ............................. 29
剖析 playbook ..................... 30
play.............................. 31
task .............................. 32
模塊 ............................. 33
將它們整合在一起 ...... 34
執(zhí)行 Ansible后發(fā)生變化了嗎?跟蹤主機(jī)狀態(tài) .............. 35
來(lái)點(diǎn)更酷炫的:添加 TLS支持 ...................................... 35
生成 TLS證書 ............. 36
變量 ............................. 37
生成 Nginx配置模板 .. 39
handler ......................... 41
運(yùn)行 playbook.............. 42
第 3章 使用 inventory描述你的服務(wù)器................................... 44
inventory文件..................... 44
準(zhǔn)備工作:創(chuàng)建多臺(tái) Vagrant虛擬機(jī) ............................. 45
inventory 行為參數(shù) ............. 48
ansible_connection ...... 49
ansible_shell_type ....... 49
ansible_python_interpreter ....................................... 49
ansible_*_interpreter ... 49
改變行為參數(shù)的默認(rèn)值 ........................................... 50
群組 .................................... 50
范例:部署一個(gè) Django應(yīng)用.................................. 51
別名和端口.................. 54
群組的群組.................. 54
為主機(jī)編號(hào)(寵物還是公牛 ) ................................. 55
在 inventory內(nèi)部的主機(jī)和組變量 .................................. 55
在各自文件中的主機(jī)和組變量 ....................................... 57
動(dòng)態(tài) inventory..................... 59
動(dòng)態(tài) inventory腳本接口 ......................................... 60
編寫動(dòng)態(tài) inventory腳本 ......................................... 61
預(yù)裝 inventory腳本 ..... 65
將 inventory分割到多個(gè)文件 ......................................... 65
使用 add_host和 group_by在運(yùn)行時(shí)添加條目 ............... 65
add_host ...................... 65
group_by ..................... 67
第 4章 變量與 fact................ 69
在 playbook中定義變量 ..... 69
檢查變量的值 ..................... 70
registering 變量 ................... 70
fact ...................................... 74
查看與某臺(tái)服務(wù)器關(guān)聯(lián)的所有 fact ......................... 75
查看 fact子集 .............. 75
任何模塊都可以返回 fact ........................................ 77
本地 fact ...................... 77
使用 set_fact定義新變量 .... 79
內(nèi)置變量 ............................. 79
hostvars ....................... 80
inventory_hostname ..... 80
groups .......................... 81
在命令行設(shè)置變量 .............. 81
優(yōu)先級(jí) ................................. 82
第 5章 引入測(cè)試應(yīng)用:Mezzanine. ....................................... 84
為什么向生產(chǎn)環(huán)境部署軟件是一件復(fù)雜的事 ................. 84
PostgreSQL:數(shù)據(jù)庫(kù) ... 88
Gunicorn:應(yīng)用服務(wù)器 ........................................... 88
Nginx:Web服務(wù)器 .... 89
Supervisor:進(jìn)程管理器 ......................................... 90
第 6章 使用 Ansible部署 Mezzanine....................................91
列出 playbook中的 task...... 91
組織要部署的文件 .............. 92
變量和秘密變量 .................. 93
使用迭代(with_items)安裝多個(gè)軟件包 ...................... 95
向任務(wù)中添加 Become語(yǔ)句 96
更新 apt緩存 ...................... 97
使用 Git獲取項(xiàng)目源碼 ....... 98
將 Mezzanine和其他軟件包安裝到 virtualenv中 ......... 100
任務(wù)中的復(fù)雜參數(shù):稍微跑個(gè)題 .................................. 103
配置數(shù)據(jù)庫(kù) ....................... 106
從模板生成 local_settings.py文件 ................................ 107
運(yùn)行 django-manage命令 . 110
在應(yīng)用環(huán)境中運(yùn)行定制的 Python腳本 ..........................111
設(shè)置服務(wù)配置文件 .... 114
啟用 Nginx配置文件 ........ 117
安裝 TLS證書 .................. 117
安裝 Twitter計(jì)劃任務(wù)....... 119
playbook全文 ................... 119
在 Vagrant虛擬機(jī)上運(yùn)行 playbook ............................... 123
故障排查 ........................... 124
無(wú)法拉取 Git倉(cāng)庫(kù)代碼 .......................................... 124
192.168.33.10.xip.io地址不可達(dá) ........................... 124
錯(cuò)誤的請(qǐng)求(400) .... 125
將 Mezzanine部署到多臺(tái)主機(jī) ..................................... 125
第 7章 role:擴(kuò)展你的 playbook........................................126
role的基本構(gòu)成 ................ 126
范例: database和 mezzanine role ................................ 127
在你的 playbook中使用 role ........................................ 127
pre-tasks和 post-tasks ....... 129
用于部署數(shù)據(jù)庫(kù)的 database role ................................... 130
用于部署 Mezzanine的 mezzanine role ........................ 132
使用 ansible-galaxy創(chuàng)建 role文件與目錄 .................... 137
從屬 role ........................... 138
Ansible Galaxy.................. 139
Web界面 ................... 139
命令行工具................ 139
將你自己的 role發(fā)布到 Galaxy............................. 140
第 8章 復(fù)雜的 playbook....... 141
處理不良行為的命令: changed_when和 failed_when . 141
過(guò)濾器 ............................... 145
默認(rèn)過(guò)濾器................ 145
用于注冊(cè)變量的過(guò)濾器 ......................................... 145
應(yīng)用于文件路徑的過(guò)濾器 ..................................... 146
編寫你自己的過(guò)濾器 . 147
lookup ............................... 148
file ............................. 149
pipe............................ 150
env ............................. 150
password.................... 150
template ..................... 151
csvfile ........................ 151
dnstxt ......................... 152
redis_kv ..................... 153
etcd ............................ 154
編寫你自己的 lookup插件 .................................... 155
更復(fù)雜的循環(huán) ................... 155
with_lines .................. 156
with_fileglob ............. 156
with_dict .................... 157
將循環(huán)結(jié)構(gòu)用作 lookup插件 ................................ 158
循環(huán)控制 ........................... 158
設(shè)置變量名稱 ............ 158
為輸出增加標(biāo)簽 ........ 160
include .............................. 161
動(dòng)態(tài)引用 ................... 162
role include ................ 162
block ................................. 164
利用 block進(jìn)行異常處理 .. 164
使用 Vault加密敏感數(shù)據(jù) .. 168
第 9章 自定義host、run和 handler. ...................................170
通過(guò)模式匹配指定主機(jī)..... 170
限制運(yùn)行的主機(jī) ................ 171
在控制主機(jī)上運(yùn)行 task ..... 171
在涉及的主機(jī)以外的機(jī)器上運(yùn)行 task .......................... 172
逐臺(tái)主機(jī)運(yùn)行 ................... 173
一次運(yùn)行一批主機(jī) ............ 174
只執(zhí)行一次 ....................... 175
運(yùn)行策略 ........................... 175
linear策略 ................. 176
free策略 .................... 177
高級(jí) handler...................... 179
Pre和 Post task中的 handler ................................. 179
flush handler .............. 180
handlers listen ............ 182
手動(dòng)采集 fact .................... 188
從主機(jī)獲取 IP地址 .......... 189
第 10章 回調(diào)插件. ................ 191
stdout插件 ........................ 191
actionable 插件 .......... 192
debug插件 ................ 192
dense插件 ................. 193
json插件 ................... 193
minimal插件 ............. 194
oneline插件 .............. 195
selective 插件 ............ 195
skippy插件................ 195
其他插件 ........................... 195
foreman插件 ............. 196
hipchat插件 .............. 196
jabber插件 ................ 197
junit插件 ................... 197
log_plays插件 ........... 198
logentries插件........... 198
logstash插件 ............. 198
mail插件 ................... 199
osx_say插件 ............. 199
profile_tasks插件 ...... 199
slack插件 .................. 200
timer插件 .................. 200
第 11章 讓 Ansible快到飛起..201
SSH多路復(fù)用以及長(zhǎng)連接保持 ..................................... 201
手動(dòng)啟動(dòng) SSH多路復(fù)用 ........................................ 202
Ansible中的 SSH多路復(fù)用配置........................... 203
流水線 ............................... 205
啟用流水線................ 205
將主機(jī)配置為支持流水線 ..................................... 205
fact緩存............................ 207
JSON文件作為 fact緩存后端 ............................... 208
Redis作為 fact緩存后端 ...................................... 209
Memcached作為 fact緩存后端 ............................. 209
并行 .................................. 210
異步執(zhí)行并發(fā)任務(wù) ............ 211
第 12章 自定制模塊..............213
范例:檢測(cè)遠(yuǎn)程服務(wù)器是否可達(dá) .................................. 213
使用 script模塊而不是自己寫模塊 ............................... 213
實(shí)現(xiàn) can_reach模塊.......... 214
在哪里放置自定制模塊..... 214
Ansible如何調(diào)用模塊 ....... 215
用參數(shù)生成一個(gè)獨(dú)立的 Python腳本(只限于 Python模塊) ............................ 215
將模塊復(fù)制到服務(wù)器 . 215
在服務(wù)器上創(chuàng)建一個(gè)參數(shù)文件(只限于非 Python模塊) ................................. 215
調(diào)用模塊 ................... 216
期望輸出 ........................... 216
Ansible的輸出變量 ... 217
用 Python實(shí)現(xiàn)模塊 .......... 217
解析參數(shù) ................... 219
獲取參數(shù)的值 ............ 220
導(dǎo)入 AnsibleModule輔助類 .................................. 220
參數(shù)選項(xiàng) ................... 221
AnsibleModule的初始化參數(shù) ............................... 223
返回成功或失敗 ........ 227
調(diào)用外部命令 ............ 227
檢查模式 (演習(xí)模式 ) ........................................... 229
文檔化你的模塊 ................ 230
調(diào)試模塊 ........................... 231
使用 Bash實(shí)現(xiàn)模塊 .......... 233
指定 Bash的解釋器路徑... 234
示例模塊 ........................... 235
第 13章 Vagrant................236
Vagrant的便捷配置選項(xiàng) ... 236
端口轉(zhuǎn)發(fā)和私有 IP地址 ....................................... 236
代理轉(zhuǎn)發(fā) ................... 238
Ansible置備器 .................. 238
置備器何時(shí)運(yùn)行 ................ 239
由 Vagrant生成 inventory . 239
并行配置 ........................... 240
指定群組 ........................... 241
Ansible本地置備器 .......... 242
第 14章 Amazon.EC2. ........244
術(shù)語(yǔ) .................................. 246
實(shí)例 ........................... 246
Amazon 系統(tǒng)鏡像 ..... 246
標(biāo)簽 ........................... 247
指定認(rèn)證憑據(jù) ................... 247
環(huán)境變量 ................... 248
配置文件 ................... 248
必要條件: Boto Python 庫(kù) ........................................... 249
動(dòng)態(tài) inventory................... 249
inventory 緩存 ........... 251
其他配置項(xiàng)................ 252
自動(dòng)生成群組 ............ 252
使用標(biāo)簽定義動(dòng)態(tài)群組..... 253
把標(biāo)簽應(yīng)用到現(xiàn)有資源 ......................................... 253
更好聽的群組名 ........ 254
EC2 Virtual Private Cloud和 EC2 Classic ..................... 255
配置 ansible.cfg 支持使用 EC2 ..................................... 256
啟動(dòng)新的實(shí)例 ................... 256
EC2 密鑰對(duì) ....................... 258
創(chuàng)建新的密鑰 ............ 258
上傳已有密鑰 ............ 260
安全組 ............................... 260
允許的 IP 地址 .......... 261
安全組端口................ 262
獲取最新的 AMI ............... 262
向群組中添加一個(gè)新的實(shí)例 ......................................... 264
等待服務(wù)器啟動(dòng) ................ 266
創(chuàng)建實(shí)例的冪等性方法..... 267
全部加在一起 ................... 267
指定 Virtual Private Cloud 270
動(dòng)態(tài) inventory和 VPC .......................................... 274
構(gòu)建 AMI .......................... 274
使用 ec2_ami模塊 .... 274
使用 Packer ............... 275
其他模塊 ........................... 279
第 15章 Docker.................280
Docker與 Ansible配合案例 ......................................... 281
Docker應(yīng)用的生命周期 .... 282
樣例應(yīng)用: Ghost .............. 283
連接到 Docker Daemon..... 283
在本地機(jī)器上運(yùn)行容器..... 283
從 Dockerfile 構(gòu)建鏡像 ..... 284
在本機(jī)上對(duì)多個(gè)容器進(jìn)行編排 ..................................... 286
推送鏡像到 Docker registry .......................................... 287
查詢本地鏡像 ................... 289
部署 Docker化的應(yīng)用 ...... 291
后端: Postgres .......... 291
前端 ........................... 292
前端: Ghost .............. 293
前端: Nginx ............. 293
清除容器 ................... 294
直連容器 ................... 294
Ansible Container .............. 296
Conductor .................. 296
創(chuàng)建 Docker鏡像 ...... 297
本地運(yùn)行 ................... 301
發(fā)布鏡像到 registry ... 302
將容器部署到生產(chǎn)環(huán)境 ......................................... 303
第 16章 調(diào)試 Ansible.playbook. ........................................304
人類可讀的錯(cuò)誤信息 ........ 304
調(diào)試 SSH問(wèn)題 .................. 305
debug模塊 ........................ 307
playbook調(diào)試器 ............... 307
assert模塊 ......................... 309
在執(zhí)行前檢查你的 playbook ......................................... 311
語(yǔ)法檢查 ................... 311
列出 host ................... 311
列出 task .................... 312
檢測(cè)模式 ................... 312
顯示文件變化 ............ 313
限制指定的 task運(yùn)行 ........ 313
step ............................ 313
start-at-task ................ 314
tags ............................ 314
第 17章 管理 Windows主機(jī)..316
連接到 Windows ............... 316
PowerShell ........................ 317
Windows 模塊 ................... 320
第一個(gè) playbook ............... 320
升級(jí) Windows ................... 321
添加本地用戶 ................... 323
結(jié)論 .................................. 326
第 18章 使用 Ansible管理網(wǎng)絡(luò)設(shè)備......................................327
網(wǎng)絡(luò)模塊現(xiàn)狀 ................... 327
所支持的網(wǎng)絡(luò)供應(yīng)商列表 . 328
網(wǎng)絡(luò)設(shè)備的準(zhǔn)備工作 ........ 328
支持 SSH身份驗(yàn)證 ... 329
模塊如何工作 ................... 331
我們的第一個(gè) playbook .... 332
網(wǎng)絡(luò)模塊中的 inventory和變量.................................... 333
本地連接 ................... 335
連接配置 ................... 335
身份驗(yàn)證變量 ............ 336
保存配置 ................... 336
使用文件中的配置 ............ 338
模板,模板,模板 ............ 341
收集 fact ............................ 344
結(jié)論 .................................. 345
第 19章 Ansible.Tower:Ansible企業(yè)版. ............................346
訂閱模式 ........................... 347
試用 Ansible Tower ... 347
Ansible Tower能解決什么問(wèn)題 .................................... 348
訪問(wèn)控制 ................... 348
項(xiàng)目管理 ................... 349
inventory管理 ........... 350
按作業(yè)模板運(yùn)行作業(yè) . 351
RESTful API ..................... 354
Ansible Tower的命令行 ... 354
安裝 ........................... 355
創(chuàng)建用戶 ................... 355
運(yùn)行作業(yè) ................... 357
以終為始 ........................... 358
附錄A SSH.......................359
附錄B 在 EC2認(rèn)證中使用 IAM.role.....................................369
術(shù)語(yǔ)表................................373
參考文獻(xiàn)..............................379