奔跑吧 Ansible : 探索自動化配置與部署捷徑, 2/e (Ansible : Up and Running : Automating Configuration Management and Deployment the Easy Way, 2/e) 奔跑吧Ansible(第2版):探索自动化配置与部署捷径

洛林·霍克斯坦 (Lorin Hochstein), 勒內·莫澤 (René Moser)

立即出貨

買這商品的人也買了...

商品描述

Ansible是近年來急速發展的開源配置管理工具。在Ansible之前,行業中已經有很多開源配置管理工具了,特別是大名鼎鼎的Puppet,簡直是配置管理工具中的超級巨星。然而,Ansible依靠它的簡單易用、“零依賴”以及弱抽象獲得了無數開發者和運維工程師的青睞。遺憾的是,除了官方文檔外,Ansible相關的優秀文檔鳳毛麟角,而本書恰恰就是為了緩解這一問題而編寫的。作者在本書中演示瞭如何使用Ansible管理接近真實生產環境的案例。既展現了Ansible的強大功能,又能夠幫助讀者快速入門與上手,本書非常適合作為官方文檔的補充或者搭配閱讀。特別值得一提的是,本書第2版還增加了管理Windows服務器和網絡設備方面的章節,並重新編寫了Docker相關章節,及時地對第1版中的不足進行了改進。

目錄大綱

序. .................................... xxiii
第 2版前言. .......................... xxv
第 1版前言. ........................ xxvii
第 1章  簡介........................... 1
關于版本的說明 .................... 2 
Ansible的優勢 ...................... 2 
Ansible如何運作 .................. 3 
Ansible的精妙設計賞析 ....... 4
易讀的語法.................... 4
遠程主機無須安裝依賴 . 5
基于推送模式 ................ 5
使用 Ansible管理小規模環境 ................................... 6
內置模塊 ....................... 6
非常輕量的抽象層 ........ 7 
Ansible太過于簡單了嗎 ....... 8
需要哪些基礎知識 ................ 8
哪些內容不會涉及 ................ 9
安裝 Ansible ....................... 10
建立一臺用于測試的服務器 ........................................... 11
使用 Vagrant來創建測試服務器 ............................. 11
將測試服務器的信息配置在 Ansible中 .................. 14 
使用 ansible.cfg文件來簡化配置 ............................ 16
展望 .................................... 19

第 2章  playbook:一切的開始. 20
一些準備工作 ..................... 20
一個簡單的 playbook .......... 21
定義 Nginx的配置文件 ........................................... 23
創建一個定制的首頁 ... 24
創建一個 webservers群組 ....................................... 25
運行這個 playbook .............. 25 
YAML格式的 playbook ...... 27
文件起始 ..................... 27
注釋 ............................. 27
字符串 ......................... 27
布爾型 ......................... 28
列表 ............................. 28
字典 ............................. 28
分行 ............................. 29
剖析 playbook ..................... 30 
play.............................. 31 
task .............................. 32
模塊 ............................. 33
將它們整合在一起 ...... 34
執行 Ansible后發生變化了嗎?跟蹤主機狀態 .............. 35
來點更酷炫的:添加 TLS支持 ...................................... 35
生成 TLS證書 ............. 36
變量 ............................. 37
生成 Nginx配置模板 .. 39 
handler ......................... 41
運行 playbook.............. 42

第 3章  使用 inventory描述你的服務器................................... 44 
inventory文件..................... 44
準備工作:創建多臺 Vagrant虛擬機 ............................. 45 
inventory 行為參數 ............. 48 
ansible_connection ...... 49 
ansible_shell_type ....... 49 
ansible_python_interpreter ....................................... 49 
ansible_*_interpreter ... 49
改變行為參數的默認值 ........................................... 50
群組 .................................... 50
范例:部署一個 Django應用.................................. 51
別名和端口.................. 54
群組的群組.................. 54
為主機編號(寵物還是公牛 ) ................................. 55
在 inventory內部的主機和組變量 .................................. 55
在各自文件中的主機和組變量 ....................................... 57
動態 inventory..................... 59
動態 inventory腳本接口 ......................................... 60
編寫動態 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
查看與某臺服務器關聯的所有 fact ......................... 75
查看 fact子集 .............. 75
任何模塊都可以返回 fact ........................................ 77
本地 fact ...................... 77
使用 set_fact定義新變量 .... 79
內置變量 ............................. 79 
hostvars ....................... 80 
inventory_hostname ..... 80 
groups .......................... 81
在命令行設置變量 .............. 81
優先級 ................................. 82

第 5章  引入測試應用:Mezzanine. ....................................... 84
為什么向生產環境部署軟件是一件復雜的事 ................. 84 
PostgreSQL:數據庫 ... 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
任務中的復雜參數:稍微跑個題 .................................. 103
配置數據庫 ....................... 106
從模板生成 local_settings.py文件 ................................ 107
運行 django-manage命令 . 110
在應用環境中運行定制的 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
用于部署數據庫的 database role ................................... 130
用于部署 Mezzanine的 mezzanine role ........................ 132
使用 ansible-galaxy創建 role文件與目錄 .................... 137
從屬 role ........................... 138 
Ansible Galaxy.................. 139 
Web界面 ................... 139
命令行工具................ 139
將你自己的 role發布到 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
更復雜的循環 ................... 155 
with_  .................. 156 
with_fileglob ............. 156 
with_dict .................... 157
將循環結構用作 lookup插件 ................................ 158
循環控制 ........................... 158
設置變量名稱 ............ 158
為輸出增加標簽 ........ 160
 include .............................. 161
動態引用 ................... 162 
role include ................ 162 
block ................................. 164
利用 block進行異常處理 .. 164
使用 Vault加密敏感數據 .. 168

第 9章  自定義host、run和 handler. ...................................170
通過模式匹配指定主機..... 170
限制運行的主機 ................ 171
在控制主機上運行 task ..... 171
在涉及的主機以外的機器上運行 task .......................... 172
逐臺主機運行 ................... 173
一次運行一批主機 ............ 174
只執行一次 ....................... 175
運行策略 ........................... 175 
策略 ................. 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 
one 插件 .............. 195 
selective 插件 ............ 195 
skippy插件................ 195
其他插件 ........................... 195 
foreman插件 ............. 196 
hipchat插件 .............. 196 
jabber插件 ................ 197 
junit插件 ................... 197 
log_plays插件 ........... 198 
logentries插件........... 198 
logstash插件 ............. 198 
插件 ................... 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
異步執行并發任務 ............ 211

第 12章  自定制模塊..............213
范例:檢測遠程服務器是否可達 .................................. 213
使用 script模塊而不是自己寫模塊 ............................... 213
實現 can_reach模塊.......... 214
在哪里放置自定制模塊..... 214 
Ansible如何調用模塊 ....... 215
用參數生成一個獨立的 Python腳本(只限于 Python模塊) ............................ 215
將模塊復制到服務器 . 215
在服務器上創建一個參數文件(只限于非 Python模塊) ................................. 215
調用模塊 ................... 216
期望輸出 ........................... 216 
Ansible的輸出變量 ... 217
用 Python實現模塊 .......... 217
解析參數 ................... 219
獲取參數的值 ............ 220
導入 AnsibleModule輔助類 .................................. 220
參數選項 ................... 221 
AnsibleModule的初始化參數 ............................... 223
返回成功或失敗 ........ 227
調用外部命令 ............ 227
檢查模式 (演習模式 ) ........................................... 229
文檔化你的模塊 ................ 230
調試模塊 ........................... 231
使用 Bash實現模塊 .......... 233
指定 Bash的解釋器路徑... 234
示例模塊 ........................... 235

第 13章  Vagrant................236 
Vagrant的便捷配置選項 ... 236
端口轉發和私有 IP地址 ....................................... 236 
代理轉發 ................... 238 
Ansible置備器 .................. 238
置備器何時運行 ................ 239
由 Vagrant生成 inventory . 239
并行配置 ........................... 240
指定群組 ........................... 241 
Ansible本地置備器 .......... 242

第 14章  Amazon.EC2. ........244
術語 .................................. 246
實例 ........................... 246 
Amazon 系統鏡像 ..... 246
標簽 ........................... 247
指定認證憑據 ................... 247
環境變量 ................... 248
配置文件 ................... 248
必要條件: Boto Python 庫 ........................................... 249
動態 inventory................... 249 
inventory 緩存 ........... 251
其他配置項................ 252
自動生成群組 ............ 252
使用標簽定義動態群組..... 253
把標簽應用到現有資源 ......................................... 253
更好聽的群組名 ........ 254 
EC2 Virtual Private Cloud和 EC2 Classic ..................... 255
配置 ansible.cfg 支持使用 EC2 ..................................... 256
啟動新的實例 ................... 256 
EC2 密鑰對 ....................... 258
創建新的密鑰 ............ 258
上傳已有密鑰 ............ 260
安全組 ............................... 260
允許的 IP 地址 .......... 261
安全組端口................ 262
獲取最新的 AMI ............... 262 
向群組中添加一個新的實例 ......................................... 264
等待服務器啟動 ................ 266
創建實例的冪等性方法..... 267
全部加在一起 ................... 267
指定 Virtual Private Cloud  270
動態 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
創建 Docker鏡像 ...... 297
本地運行 ................... 301
發布鏡像到 registry ... 302
將容器部署到生產環境 ......................................... 303 

第 16章  調試 Ansible.playbook. ........................................304
人類可讀的錯誤信息 ........ 304
調試 SSH問題 .................. 305 
debug模塊 ........................ 307 
playbook調試器 ............... 307 
assert模塊 ......................... 309
在執行前檢查你的 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
網絡模塊現狀 ................... 327
所支持的網絡供應商列表 . 328
網絡設備的準備工作 ........ 328
支持 SSH身份驗證 ... 329
模塊如何工作 ................... 331
我們的第一個 playbook .... 332
網絡模塊中的 inventory和變量.................................... 333 
本地連接 ................... 335
連接配置 ................... 335
身份驗證變量 ............ 336
保存配置 ................... 336
使用文件中的配置 ............ 338
模板,模板,模板 ............ 341
收集 fact ............................ 344
結論 .................................. 345

第 19章  Ansible.Tower:Ansible企業版. ............................346
訂閱模式 ........................... 347
試用 Ansible Tower ... 347 
Ansible Tower能解決什么問題 .................................... 348
訪問控制 ................... 348
項目管理 ................... 349 
inventory管理 ........... 350
按作業模板運行作業 . 351 
RESTful API ..................... 354 
Ansible Tower的命令行 ... 354
安裝 ........................... 355
創建用戶 ................... 355
運行作業 ................... 357
以終為始 ........................... 358
附錄A  SSH.......................359
附錄B  在 EC2認證中使用 IAM.role.....................................369
術語表................................373
參考文獻..............................379