[ chusiang@kalug ~ ] $ cat .profile
# Author: 凍仁翔 / chusiang.lai (at) gmail.com
# Blog: http://note.drx.tw
# Modified: 2016-05-31 16:30
關於凍仁翔
• 4 年年以上 IT 經驗。
• 現職 DrSays IT ⼯工程師。
• Ansible 實戰講堂 4e. 學員。
• 於 Ansible Galaxy 分享 Roles:
• php7 (php-fpm)
• switch-apt-mirror
• vim-and-vi-mode
• zabbix-agent
• CVE-2016-3714
2
坐穩囉
要開始了了!
3
Outline
I. 現代 IT ⼈人是什什麼?
4
Outline
I. 現代 IT ⼈人是什什麼?
II. 導入⾃自動化組態的好處是什什麼?
5
Outline
I. 現代 IT ⼈人是什什麼?
II. 導入⾃自動化組態的好處是什什麼?
III. Ansible 是什什麼?
6
Outline
I. 現代 IT ⼈人是什什麼?
II. 導入⾃自動化組態的好處是什什麼?
III. Ansible 是什什麼?
IV. 怎麼部署 Ansible 環境?
7
Outline
I. 現代 IT ⼈人是什什麼?
II. 導入⾃自動化組態的好處是什什麼?
III. Ansible 是什什麼?
IV. 怎麼部署 Ansible 環境?
V. 怎麼操作 Ansible?
8
Outline
I. 現代 IT ⼈人是什什麼?
II. 導入⾃自動化組態的好處是什什麼?
III. Ansible 是什什麼?
IV. 怎麼部署 Ansible 環境?
V. 怎麼操作 Ansible?
VI. Q & A
9
Ⅰ. 現代 IT ⼈人是什什麼?
10
DevOps
現代 IT ⼈人是什什麼?
11
以前的 IT ⼈人 現代的 IT ⼈人
從裝機到架站 需耗費數⼩小時 (hr) 不⽤用 30 分 (min)
上班
每天敲敲指令、裝裝機器,
常常忘了了改過什什麼
寫 code 當總統

寫 code 管機器
下班 寫不完的⼯工作⽇日記
幫⾃自⼰己寫⼯工具 

(為了了提早下班)
Ⅱ. 導入⾃自動化組態的好處是什什麼?
12
※ 註:組態 = Configuration management (CM)
導入 Ansible ⾃自動化組態,
我們除了了可以減少服務中斷
時間、測試基礎建設、降低
意外風險,更更可以讓開發、
測試和正式環境無縫接軌。
圖片來來源 - Ansible as Automation Glue
13
"⼯工⼈人" 組態 ⾃自動化組態
重複組態的⼈人⼒力力成本 ⾼高 低
⼈人為失誤風險 ⾼高 低
可測試性 難 易易
模組化 難 易易
提早下班 難 易易
導入⾃自動化組態的好處是什什麼?
14
Ⅲ. Ansible 是什什麼?
15
Ansible 取名⾃自知名⼩小說

《安德的遊戲》,是
虛構的超光速通訊裝置。
有了了它我們就可以像 Ender

指揮戰艦般的操控伺服器。
電影海海報 - https://goo.gl/4xftZT
16
Ansible 是近年年來來知名度不
斷上升的 DevOps ⾃自動化
軟體,雖然⾃自 2013 年年創立⾄至
今不到 3 年年,但由於其採⽤用

無代理理程式的架構,部署
靈活,程式碼易易讀,因⽽而
迅速成為受矚⽬目的 DevOps
⼯工具。
iThome - http://goo.gl/yJbWtz
17
Ansible 是什什麼?
• 與 Puppet, Salt, Chef 並列列其四的⾃自動化組態設定⼯工具
(Infrastructure as Code),其簡單易易⽤用的特性讓⼈人⼀一⽤用就
愛上,在 DevOps 界也佔有⼀一席之地。
• 使⽤用 Push 架構,只需 Python 和 SSH 即可操作,不⽤用額
外裝 Angent。



• Python 陣營的組態設定⼯工具。
18
Ⅳ. 怎麼部署 Ansible 環境?
19
觀念念、安裝、設定
Ansible 是怎麼運作的?
透過 inventory 定義 Managed node,並藉由 SSH 與 Python 進⾏行行溝通。
20
怎麼安裝 Ansible?
• 只需在 Control Machine 安裝 Ansible;Managed node
則要有 Python 2.5+ 和 SSH。
21
# Debian & Ubuntu (apt).
$ sudo apt-get install ansible
# Mac OS X (homebrew).
$ brew install ansible
# Python (pip).
$ sudo pip install ansible
怎麼設定 Ansible?
• 藉由 ansible.cfg 來來設定 inventory (host file) 檔案路路徑、
Managed node (被控端) 使⽤用者名稱、SSH ⾦金金鑰 … 等。
22
$ vim ansible.cfg
[defaults]
# 指定 inventory 檔案路路徑。
hostfile = hosts
# 遠端使⽤用者名稱
remote_user = vagrant
#private_key_file = ~/.ssh/id_rsa
# host_key_checking: 不詢問加入 ssh ⾦金金鑰
host_key_checking = False
inventory 是什什麼?
• 主要⽤用來來定義 Managed node (被控端) 主機位址與群組,
也可⽤用來來設定 ssh 連線資訊。
23
$ vim hosts
# ansible_ssh_host: 遠端 SSH 主機位址。
# ansible_ssh_port: 遠端 SSH 埠⼝口 (Port)。
# ansible_ssh_user: 遠端 SSH 使⽤用者名稱。
# ansible_ssh_private_key_file: 本機 SSH 私鑰檔路路徑。
# ansible_ssh_pass: 遠端 SSH 密碼 (建議改⽤用私鑰)。
[dev]
ansible-demo.local ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222
[test]
ansible-test.local ansible_ssh_host=10.10.1.1 ansible_ssh_user=adeliae
[prod]
ansible-prod.local ansible_ssh_host=demo.drx.tw ansible_ssh_port=22
Ⅴ. 怎麼操作 Ansible?
24
Ad-Hoc command, Playbook* (Module, Galaxy), Ansible Tower
Ad-Hoc
command
and
25
Playbook
Ad-Hoc command 是什什麼?
• 簡短 (臨臨時性) 的指令,與⼀一般的 command line 操作模式
雷同,⼀一次只透過⼀一⾏行行指令進⾏行行操作。
26
# ⼀一般的 command line
$ ping ansible-demo.local
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.037 ms
--- localhost ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.037/0.037/0.037/0.000 ms
$ echo Hello World
Hello World
Ad-Hoc command 是什什麼?
• Ansible -m 後的各項參參數請參參考官⽅方⽂文件 -

Module Index。
27
# ansible <主機名稱> -m <各項參參數>
$ ansible all -m ping
ansible-demo.local | SUCCESS => {
"changed": false,
"ping": "pong"
}
$ ansible all -m command -a "echo Hello World"
ansible-demo.local | SUCCESS | rc=0 >>
Hello World
Playbooks 是什什麼?
• ⼀一鍵部署的強⼤大武器,比 Shell
Script 更更具結構化的腳本語
⾔言。
• 使⽤用 YAML 格式,寫 code 就
如同寫⽂文件,簡單易易讀。
• 可使⽤用 Jinja2 (template 系統)
表達式,並⽀支援變數、判斷式

、迴圈 ... 等語法。
Baby Playbook Onesie - http://goo.gl/GKJvXn
28
Playbooks 是什什麼?
• ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。
• 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。

























29
$ vim example.yml
---
- name: This is a Super-basic playbook.
hosts: all
tasks:
- name: Hello World
command: echo "Hello World"
- name: Install Vim & Emacs
become: yes
apt: name={{ item }} state=present
with_items:
- vim
- emacs
# 去去,emacs 走。
- name: use vi-mode in readline
become: yes
lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Playbooks 是什什麼?
• ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。
• 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。

























30
$ vim example.yml
---
- name: This is a Super-basic playbook.
hosts: all
tasks:
- name: Hello World
command: echo "Hello World"
- name: Install Vim & Emacs
become: yes
apt: name={{ item }} state=present
with_items:
- vim
- emacs
# 去去,emacs 走。
- name: use vi-mode in readline
become: yes
lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Play
Playbooks 是什什麼?
• ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。
• 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。

























31
$ vim example.yml
---
- name: This is a Super-basic playbook.
hosts: all
tasks:
- name: Hello World
command: echo "Hello World"
- name: Install Vim & Emacs
become: yes
apt: name={{ item }} state=present
with_items:
- vim
- emacs
# 去去,emacs 走。
- name: use vi-mode in readline
become: yes
lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Task 1
Task 2
Task 3
Playbooks 是什什麼?
• ⼀一份 Playbook 可以有多個 Play 和 多個 Tasks。
• 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。

























32
$ vim example.yml
---
- name: This is a Super-basic playbook.
hosts: all
tasks:
- name: Hello World
command: echo "Hello World"
- name: Install Vim & Emacs
become: yes
apt: name={{ item }} state=present
with_items:
- vim
- emacs
# 去去,emacs 走。
- name: use vi-mode in readline
become: yes
lineinfile: dest=/etc/inputrc line="set editing-mode vi"
Module
Playbooks 是什什麼?
• 執⾏行行 example.yml playbook。
33
$ ansible-playbook example.yml
PLAY [This is a Super-basic playbook.] *****************************************
TASK [setup] *******************************************************************
ok: [ansible-demo.local]
TASK [Hello World] *************************************************************
changed: [ansible-demo.local]
TASK [Install Vim & Emacs] *****************************************************
changed: [ansible-demo.local] => (item=[u'vim', u'emacs'])
TASK [use vi-mode in readline] *************************************************
changed: [ansible-demo.local]
PLAY RECAP *********************************************************************
ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0
Playbooks 是什什麼?
• 執⾏行行 example.yml playbook。
34
$ ansible-playbook example.yml
PLAY [This is a Super-basic playbook.] *****************************************
TASK [setup] *******************************************************************
ok: [ansible-demo.local]
TASK [Hello World] *************************************************************
changed: [ansible-demo.local]
TASK [Install Vim & Emacs] *****************************************************
changed: [ansible-demo.local] => (item=[u'vim', u'emacs'])
TASK [use vi-mode in readline] *************************************************
changed: [ansible-demo.local]
PLAY RECAP *********************************************************************
ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0
Setup
總結 (Recap)
火 ⼒力力 展 ⽰示
Live Demo
35
http://s.drx.tw/ansible1.kalug
https://youtu.be/L4UDVP1lJQQ
Module
38
http://docs.ansible.com/ansible/list_of_commands_modules.html
Docs » commands Modules
有 yes 就⼀一定要⽤用
Galaxy
42
https://galaxy.ansible.com
⾶飛向宇宙,浩瀚無垠!
– 巴斯光年年 (Debian Buzz)
46
參參考⽂文獻
• Ansible Docs - http://docs.ansible.com/ansible/intro_installation.html
• 《Ansible: Up and Running》- https://www.ansible.com/ansible-book
• 七分鐘掌握 Ansible 核⼼心觀念念 (7:15) | Software Architecture School - http://goo.gl/nhykzE
• Ansible 實戰講堂 - http://get.soft-arch.net/ansible/
• 電腦界的隱喻:組態管理理 | 軟體架構・絮語 - http://school.soft-arch.net/blog/90699/
metaphor-in-cm
• 淺談 Ansible by sakana / Max - https://goo.gl/e9RwhE
• 「Ansible ⾃自動化組態管理理實戰講堂」與「⾃自我實現」| 凍仁的筆記 - http://goo.gl/5gs1q9
• 現代 IT ⼈人⼀一定要知道的 Ansible ⾃自動化組態技巧 | 凍仁的筆記 - http://goo.gl/daAtVi
47
Free
圖片來來源
• Blasts Off Space Rocket From Cosmodrom In The Clouds, Polygonal Stock
Illustration | dreamstime - http://goo.gl/6FAuiQ
• 國家地理理雜誌 - http://www.ngtaiwan.com
• Using cloud-init and uvtool to initialize cloud instances | Rui - https://goo.gl/CbdvTH
• Books icon (PSD) | GraphicsFuel - http://www.graphicsfuel.com/2012/07/books-
icon-psd/
• Avatar, business, company, group, manager, people, users icon | Icon search engine
- https://goo.gl/Hm6ScX
• A Galaxy Just Appeared Out of Nowhere - http://chirpnews.com/2016/04/17/new-
galaxy-appeared/
48
⼯工商服務
49
50
http://萍⽔水相逢.tw
DevOps Taiwan
https://www.facebook.com/groups/DevOpsTaiwan/
https://devopstaiwan.slack.com/
https://gitter.im/DevOpsTW/
http://www.vim.tw
http://coscup.org
http://mopcon.org
Q & A
嚴禁拍打餵食
55
E N D

現代 IT 人一定要知道的 Ansible 自動化組態技巧

  • 1.
    [ chusiang@kalug ~] $ cat .profile # Author: 凍仁翔 / chusiang.lai (at) gmail.com # Blog: http://note.drx.tw # Modified: 2016-05-31 16:30
  • 2.
    關於凍仁翔 • 4 年年以上IT 經驗。 • 現職 DrSays IT ⼯工程師。 • Ansible 實戰講堂 4e. 學員。 • 於 Ansible Galaxy 分享 Roles: • php7 (php-fpm) • switch-apt-mirror • vim-and-vi-mode • zabbix-agent • CVE-2016-3714 2
  • 3.
  • 4.
    Outline I. 現代 IT⼈人是什什麼? 4
  • 5.
    Outline I. 現代 IT⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? 5
  • 6.
    Outline I. 現代 IT⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? 6
  • 7.
    Outline I. 現代 IT⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? IV. 怎麼部署 Ansible 環境? 7
  • 8.
    Outline I. 現代 IT⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? IV. 怎麼部署 Ansible 環境? V. 怎麼操作 Ansible? 8
  • 9.
    Outline I. 現代 IT⼈人是什什麼? II. 導入⾃自動化組態的好處是什什麼? III. Ansible 是什什麼? IV. 怎麼部署 Ansible 環境? V. 怎麼操作 Ansible? VI. Q & A 9
  • 10.
    Ⅰ. 現代 IT⼈人是什什麼? 10 DevOps
  • 11.
    現代 IT ⼈人是什什麼? 11 以前的IT ⼈人 現代的 IT ⼈人 從裝機到架站 需耗費數⼩小時 (hr) 不⽤用 30 分 (min) 上班 每天敲敲指令、裝裝機器, 常常忘了了改過什什麼 寫 code 當總統 寫 code 管機器 下班 寫不完的⼯工作⽇日記 幫⾃自⼰己寫⼯工具 (為了了提早下班)
  • 12.
  • 13.
  • 14.
    "⼯工⼈人" 組態 ⾃自動化組態 重複組態的⼈人⼒力力成本⾼高 低 ⼈人為失誤風險 ⾼高 低 可測試性 難 易易 模組化 難 易易 提早下班 難 易易 導入⾃自動化組態的好處是什什麼? 14
  • 15.
  • 16.
  • 17.
    Ansible 是近年年來來知名度不 斷上升的 DevOps⾃自動化 軟體,雖然⾃自 2013 年年創立⾄至 今不到 3 年年,但由於其採⽤用
 無代理理程式的架構,部署 靈活,程式碼易易讀,因⽽而 迅速成為受矚⽬目的 DevOps ⼯工具。 iThome - http://goo.gl/yJbWtz 17
  • 18.
    Ansible 是什什麼? • 與Puppet, Salt, Chef 並列列其四的⾃自動化組態設定⼯工具 (Infrastructure as Code),其簡單易易⽤用的特性讓⼈人⼀一⽤用就 愛上,在 DevOps 界也佔有⼀一席之地。 • 使⽤用 Push 架構,只需 Python 和 SSH 即可操作,不⽤用額 外裝 Angent。
 
 • Python 陣營的組態設定⼯工具。 18
  • 19.
    Ⅳ. 怎麼部署 Ansible環境? 19 觀念念、安裝、設定
  • 20.
    Ansible 是怎麼運作的? 透過 inventory定義 Managed node,並藉由 SSH 與 Python 進⾏行行溝通。 20
  • 21.
    怎麼安裝 Ansible? • 只需在Control Machine 安裝 Ansible;Managed node 則要有 Python 2.5+ 和 SSH。 21 # Debian & Ubuntu (apt). $ sudo apt-get install ansible # Mac OS X (homebrew). $ brew install ansible # Python (pip). $ sudo pip install ansible
  • 22.
    怎麼設定 Ansible? • 藉由ansible.cfg 來來設定 inventory (host file) 檔案路路徑、 Managed node (被控端) 使⽤用者名稱、SSH ⾦金金鑰 … 等。 22 $ vim ansible.cfg [defaults] # 指定 inventory 檔案路路徑。 hostfile = hosts # 遠端使⽤用者名稱 remote_user = vagrant #private_key_file = ~/.ssh/id_rsa # host_key_checking: 不詢問加入 ssh ⾦金金鑰 host_key_checking = False
  • 23.
    inventory 是什什麼? • 主要⽤用來來定義Managed node (被控端) 主機位址與群組, 也可⽤用來來設定 ssh 連線資訊。 23 $ vim hosts # ansible_ssh_host: 遠端 SSH 主機位址。 # ansible_ssh_port: 遠端 SSH 埠⼝口 (Port)。 # ansible_ssh_user: 遠端 SSH 使⽤用者名稱。 # ansible_ssh_private_key_file: 本機 SSH 私鑰檔路路徑。 # ansible_ssh_pass: 遠端 SSH 密碼 (建議改⽤用私鑰)。 [dev] ansible-demo.local ansible_ssh_host=127.0.0.1 ansible_ssh_port=2222 [test] ansible-test.local ansible_ssh_host=10.10.1.1 ansible_ssh_user=adeliae [prod] ansible-prod.local ansible_ssh_host=demo.drx.tw ansible_ssh_port=22
  • 24.
    Ⅴ. 怎麼操作 Ansible? 24 Ad-Hoccommand, Playbook* (Module, Galaxy), Ansible Tower
  • 25.
  • 26.
    Ad-Hoc command 是什什麼? •簡短 (臨臨時性) 的指令,與⼀一般的 command line 操作模式 雷同,⼀一次只透過⼀一⾏行行指令進⾏行行操作。 26 # ⼀一般的 command line $ ping ansible-demo.local PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.037 ms --- localhost ping statistics --- 1 packets transmitted, 1 packets received, 0.0% packet loss round-trip min/avg/max/stddev = 0.037/0.037/0.037/0.000 ms $ echo Hello World Hello World
  • 27.
    Ad-Hoc command 是什什麼? •Ansible -m 後的各項參參數請參參考官⽅方⽂文件 -
 Module Index。 27 # ansible <主機名稱> -m <各項參參數> $ ansible all -m ping ansible-demo.local | SUCCESS => { "changed": false, "ping": "pong" } $ ansible all -m command -a "echo Hello World" ansible-demo.local | SUCCESS | rc=0 >> Hello World
  • 28.
    Playbooks 是什什麼? • ⼀一鍵部署的強⼤大武器,比Shell Script 更更具結構化的腳本語 ⾔言。 • 使⽤用 YAML 格式,寫 code 就 如同寫⽂文件,簡單易易讀。 • 可使⽤用 Jinja2 (template 系統) 表達式,並⽀支援變數、判斷式
 、迴圈 ... 等語法。 Baby Playbook Onesie - http://goo.gl/GKJvXn 28
  • 29.
    Playbooks 是什什麼? • ⼀一份Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 29 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi"
  • 30.
    Playbooks 是什什麼? • ⼀一份Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 30 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi" Play
  • 31.
    Playbooks 是什什麼? • ⼀一份Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 31 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi" Task 1 Task 2 Task 3
  • 32.
    Playbooks 是什什麼? • ⼀一份Playbook 可以有多個 Play 和 多個 Tasks。 • 此例例⽤用到了了 Play*1, Task*3 和 Module*3 (command, apt, lineinfile)。
 
 
 
 
 
 
 
 
 
 
 
 
 32 $ vim example.yml --- - name: This is a Super-basic playbook. hosts: all tasks: - name: Hello World command: echo "Hello World" - name: Install Vim & Emacs become: yes apt: name={{ item }} state=present with_items: - vim - emacs # 去去,emacs 走。 - name: use vi-mode in readline become: yes lineinfile: dest=/etc/inputrc line="set editing-mode vi" Module
  • 33.
    Playbooks 是什什麼? • 執⾏行行example.yml playbook。 33 $ ansible-playbook example.yml PLAY [This is a Super-basic playbook.] ***************************************** TASK [setup] ******************************************************************* ok: [ansible-demo.local] TASK [Hello World] ************************************************************* changed: [ansible-demo.local] TASK [Install Vim & Emacs] ***************************************************** changed: [ansible-demo.local] => (item=[u'vim', u'emacs']) TASK [use vi-mode in readline] ************************************************* changed: [ansible-demo.local] PLAY RECAP ********************************************************************* ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0
  • 34.
    Playbooks 是什什麼? • 執⾏行行example.yml playbook。 34 $ ansible-playbook example.yml PLAY [This is a Super-basic playbook.] ***************************************** TASK [setup] ******************************************************************* ok: [ansible-demo.local] TASK [Hello World] ************************************************************* changed: [ansible-demo.local] TASK [Install Vim & Emacs] ***************************************************** changed: [ansible-demo.local] => (item=[u'vim', u'emacs']) TASK [use vi-mode in readline] ************************************************* changed: [ansible-demo.local] PLAY RECAP ********************************************************************* ansible-demo.local : ok=4 changed=3 unreachable=0 failed=0 Setup 總結 (Recap)
  • 35.
    火 ⼒力力 展⽰示 Live Demo 35
  • 36.
  • 37.
  • 38.
  • 39.
  • 41.
    Docs » commandsModules 有 yes 就⼀一定要⽤用
  • 42.
  • 43.
  • 46.
  • 47.
    參參考⽂文獻 • Ansible Docs- http://docs.ansible.com/ansible/intro_installation.html • 《Ansible: Up and Running》- https://www.ansible.com/ansible-book • 七分鐘掌握 Ansible 核⼼心觀念念 (7:15) | Software Architecture School - http://goo.gl/nhykzE • Ansible 實戰講堂 - http://get.soft-arch.net/ansible/ • 電腦界的隱喻:組態管理理 | 軟體架構・絮語 - http://school.soft-arch.net/blog/90699/ metaphor-in-cm • 淺談 Ansible by sakana / Max - https://goo.gl/e9RwhE • 「Ansible ⾃自動化組態管理理實戰講堂」與「⾃自我實現」| 凍仁的筆記 - http://goo.gl/5gs1q9 • 現代 IT ⼈人⼀一定要知道的 Ansible ⾃自動化組態技巧 | 凍仁的筆記 - http://goo.gl/daAtVi 47 Free
  • 48.
    圖片來來源 • Blasts OffSpace Rocket From Cosmodrom In The Clouds, Polygonal Stock Illustration | dreamstime - http://goo.gl/6FAuiQ • 國家地理理雜誌 - http://www.ngtaiwan.com • Using cloud-init and uvtool to initialize cloud instances | Rui - https://goo.gl/CbdvTH • Books icon (PSD) | GraphicsFuel - http://www.graphicsfuel.com/2012/07/books- icon-psd/ • Avatar, business, company, group, manager, people, users icon | Icon search engine - https://goo.gl/Hm6ScX • A Galaxy Just Appeared Out of Nowhere - http://chirpnews.com/2016/04/17/new- galaxy-appeared/ 48
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.

Editor's Notes

  • #4 40 分鐘講完投影片的不可能任務要開始了!
  • #5 小小帶過本次主題。
  • #6 小小帶過本次主題。
  • #7 小小帶過本次主題。
  • #8 小小帶過本次主題。
  • #9 小小帶過本次主題。
  • #10 小小帶過本次 6 個主題。詢問現場程度,以勘酌分配比例。 (約停頓 1 分鐘)
  • #11 從開發、測試、部署、維運、監控、系統優化各個階段都得參與的人。
  • #13 可以提早下班。
  • #14 Ansible as Automation Glue - https://www.ansible.com/blog/ansible-automation-glue
  • #15 導入自動化組態可以降低重複組態的人力成本、降低人為失誤風險、增進可測試性、將工作模組化、以及提高提早下班的可能性。
  • #16 Ansible 主要的隱喻是演戲。所以,在 Ansible 劇場中,策劃好的動作及姿勢叫做 play,集合起來就是 playbook(劇本)。人生就是戲,演不完的戲;在舞台上,每一台主機扮演一個或多個 role(角色),甚至還有天外飛來一筆的空降角色 —— 來自 galaxy(銀河系)。 http://school.soft-arch.net/blog/90699/metaphor-in-cm 自由軟體?要是沒人維護了還可以自己改喔!
  • #17 戰爭遊戲,又名安德的遊戲 (Ender's Game),是 "奧森·斯科特·卡德" 最著名的科幻小說,曾在 2013 年於大銀幕上映。 https://zh.wikipedia.org/zh-tw/安德的游戏 https://en.wikipedia.org/wiki/Ender%27s_Game
  • #19 Ansible 與 Salt 同為 Python 陣營,而 Puppet, Salt 則是 Ruby。 身為 Python 的愛好者會選 Ansible 也是應該的啊!
  • #20 說了這麼多,要怎麼 setup Ansible 的環境呢?
  • #21 Ansible 是透過 inventory 來定義 Managed node,並藉由 ssh 與 Python 來溝通的。由上張圖可以看出只要每台機器都有 Python 跟 ssh 基本上就可以運作了,當然主控端需要安裝 Ansible。
  • #22 只需在 Control Machine 安裝 Ansible;Managed node 則要滿足 Python 2.5 以上和開通 SSH 的條件。 Ansible 最新的版本為 v2.1。
  • #23 我們可以藉由 ansible.cfg 來設定 inventory 的位置、被控端的相關設定。
  • #24 inventory 就字面上有 "詳細目錄"、"完整清單" 的意思。在 Ansible 是用來定義被控端的主機位址、群組還有 ssh 連線資訊。
  • #25 接下來凍仁會介紹 Ad-Hoc command, Playbook, Module, Galaxy,但不會講到 Tower。Tower 是 Ansible 公司主推的加值服務,是個可以用網頁來執行 Ansible,有圖有表的服務。
  • #26 首先我們先來了解 Ad-hoc command 與 Playbook。如果今天只能記住一件事的話,我希望會是大家可以知道 Ansible 就是神在 Playbook!
  • #27 可以看到底下為一般的 command line。一個是 ping 一個是 echo。 Ad hoc 是拉丁文常用短語中的一個短語。這個短語的意思是「特設的、特定目的的(地)、即席的、臨時的、將就的、專案的」。這個短語通常用來形容一些特殊的、不能用於其它方面的的,為一個特定的問題、任務而專門設定的解決方案。這個詞彙須與a priori區分。 https://zh.wikipedia.org/wiki/Ad_hoc
  • #28 大家可以看到底下的 ad-hoc command 範例,同樣是做 ping 跟 echo 兩件事。 all 代表對所有的主機執行,而 -m ping 則是使用 ping 這個模組 (module)。
  • #29 Jinja / 神社 / http://jinja.pocoo.org/docs/dev/
  • #33 lineinfile 這個 Module 很特別的地方是,如果 inputrc 裡已經有 set editing-mode vi 的話,它就會跳會不執行,基於時間因素凍仁在此就不多加說明了。
  • #34 這邊是剛剛那份 playbook 的執行結果。 除了一個 Play 三個 Tasks 外還多了一些東西。
  • #35 TASK [setup] 會確認有哪些 managed node 會執行此 playbook。 最後會有總結 (recap) 告訴我們有哪些 tasks 通過,哪些失敗。
  • #38 * 首先是火力展示。 再來是 source code review。 最後會藉由混合播放的方式來摸擬同步執行的感覺。
  • #40 簡介一下文件 (Document) 怎麼看。 進到 Module Index 後點選 Commands Modules。 點選 command。
  • #41 簡介一下文件 (Document) 怎麼看。 進到 Module Index 後點選 Commands Modules。 點選 command。
  • #42 進到 command 文件後,跳過上述簡介,因為重點在下方。
  • #43 可以看到 Option 的表格中有列出必需要使用的參數,可以看到 free_form 為 yes。
  • #44 Galaxy 是官方架設的共享 Roles 網站。
  • #45 進到 Galaxy 的網站後,可在右上角的 Browser Roles 找到數不完的角色。
  • #46 可使用多個關鍵字搜尋。
  • #47 進入之後可以看到支援的作業系統、版本 … 等資訊。 php7 (php-fpm) 是個同時支援 Ubuntu, Debian 和 CentOS 三大 OS 的 php7 role,也是凍仁的第一個撰寫的 role,剛剛上台前看到的下載數是 118。 - https://galaxy.ansible.com/chusiang/php7/
  • #48 在了解 Ansible 自動化組態技巧後,我們除了使用官方的 Module 外,更可以藉由探索 Galaxy 來擴充實力。 讓我們一起… 「飛向宇由,浩瀚無垠!」
  • #49 本次只是初步介紹 Ansible,如果想快速入門建議可以花錢小錢上一下
  • #52 萍水相逢是我家老婆大人創立的個人品牌,提供婚禮佈置、微景觀和花藝設計等服務。如果想送禮物給女伴不知送什麼?也請聯繫我們。
  • #53 DevOps Taiwan
  • #54 若大家對 Vim 有興趣也可以加入 Vim Taiwan 社群。
  • #55 今年 COSCUP 會在 08 月 20, 21,請大家拭目以待。
  • #56 今年 MOPCON 會在 10 月 29, 30,請大家拭目以待。
  • #58 今天的簡報就到此為止,謝謝大家的參與。
  • #59 回顧
  • #60 回顧