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