標題寫的很清楚啦,
今天就寫一個 hello world 的 playbook,
作為部署我們應用程式的暖身
當初剛學的時候,
糾結 Ansible 的 directory 架構長怎樣,
糾結非常久,
糾結的點是那些參數 a.k.a vars,
到底是怎麼在 playbook 間傳遞的?
沒有顯式的寫 import,
到底是怎麼引用的?
非常困擾…
老是覺得網路上教學都沒有把這種最簡單的事情交待一下 T^T
後來我參考官網的 layout終於學會了,
總之看到這篇的你,
如果也糾結 playbook 不知道該怎麼組織才是最優解,
先照著做就對了
.
├── ansible.cfg
├── inventory
├── main.yml
└── roles
└── hello_world
├── tasks
│ └── main.yml
└── vars
└── main.yml
稍微解釋一下,ansible.cfg
就是寫關於這包 ansible 的 config,
長得像這樣
[defaults]
inventory = ./inventory
roles_path = ./roles
host_key_checking = False
host_key_checking
應該要開 True
,
但為了防呆,
萬一卡在有些機器沒有先 ssh 過,
接受 remote host key,
這樣 playbook 就會卡住,
正常來說,
比較妥當的方法還是全部機器手動用 ssh retrieve 過一遍
再來是 inventory
,
這邊要記得 ansible_
prefix 的這些變數,
要 align 你 ~/.ssh/config
的設定,
你的 inventory
有兩種寫法 yaml 或是 ini,
先示範 yaml 格式
all:
hosts:
staging:
ansible_host: ubuntu-staging-env
ansible_user: ubuntu
ansible_ssh_private_key_file: ~/.ssh/my_private_key
要切記:
後面是有一個半形空格的,可以用一些 linting 的 tool 來檢查
再來示範 ini 格式
[all]
staging ansible_host=ubuntu-staging-env ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/my_private_key
不知道你各位喜歡哪一種,
我一開始是 ini 派,後來變成 yaml 派,
也沒什麼特別原因,
可能 yaml 用習慣了,排版比較舒服,
對照一下我們的 ~/.ssh/config
應該長怎樣
Host ubuntu-staging-env
Hostname xx.xx.xx.xx
User ubuntu
IdentityFile ~/.ssh/my_private_key
最後我們測試一下 ssh 和 inventory 這些是否正常
ansible -m ping all
今天先這樣,結果又沒來得及寫完預期進度 orz...