Learn Chef Rally 學習筆記 part5 — 上傳 cookbook 至 Chef server
本文記錄 Learn Chef Rally 以下章節的學習歷程:
- Track — Infrastructure Automation > Manage a node with Chef server > Upload a cookbook to Chef server
- Track — Infrastructure Automation > Manage a node with Chef server > Get a node to bootstrap
[Upload a cookbook to Chef server]
這個章節要把 cookbook 傳上 Chef server,一開始說明除了用 git 做 cookbooks 的版本控制之外,同時在 Chef server 上維護一份副本可以帶來以下好處:
- 每一個 node 都可以方便取用這些 cookbooks
- 版本化的機制可以讓不同的 nodes 關聯到不同版本的 cookbook,你可以在準備好的時候才推出新的 configuration policies。
不知道我對第 2 點這樣理解是否正確,而且我覺得第 2 點的第 2 句,講得有點模糊,可能要晚點才能體會他確切要講什麼。
1. 從 GitHub 複製 learn_chef_httpd cookbook
之前的章節 (記錄在此文章) 我們在本機上撰寫 cookbook,這次我們直接從官方提供的 GitHub repository 複製下來。
一般來說我們會在工作站撰寫 cookbook,但之前的範例是寫在 test server 上。這裡 (為了避免讓讀者覺得被耍了所以) 準備一份程式碼給大家 clone。
在上一章節的 knife 設定檔 knife.rb
裡有一行
cookbook_path ["#{current_dir}/../cookbooks"]
因為 knife.rb
所在路徑是 ~/learn-chef/.chef
,所以這個 cookbook_path
表達的路徑就是 ~/lear-chef/cookbooks
這個目錄。因為我們要先建立這個目錄然後 cd
進去:
$ mkdir ~/learn-chef/cookbooks
$ cd ~/learn-chef/cookbooks
再來就是把官方提供的 learn_chef_httpd.git git clone
下來:
$ git clone https://github.com/learn-chef/learn_chef_httpd.git
Cloning into 'learn_chef_httpd'...
remote: Counting objects: 93, done.
remote: Total 93 (delta 0), reused 0 (delta 0), pack-reused 93
Unpacking objects: 100% (93/93), done.
資訊:Chef Supermarket 是一個可以讓大家分享 cookbooks 的地方。之後的 modules 會再提到關於 community cookbooks 的事。
2. 上傳 cookbook 到 Chef server
在實務上,將 cookbook 上傳到 Chef server 之前應該要做一些測試確保 cookbook 會正確運作,但之後的 modules 才會教。
現在先直接下指令把 cookbook 傳上 server,在 ~/learn-chef/
底下的任一一個目錄都可以 (因為 knife
指令的運作模式類似 git
,若所在目錄沒有 .chef/
的話,會往上找直到找到該目錄底下有 .chef
的目錄為止):
$ knife cookbook upload learn_chef_httpd
Uploading learn_chef_httpd [0.1.0]
Uploaded 1 cookbook.
這樣就成功上傳了,我們也可以接著用 knife cookbook list
來確認:
$ knife cookbook list
learn_chef_httpd 0.1.0
測驗
True or False: Chef server acts as a complete replacement for version control systems such as Git.
- True.
2. False.
True or False: The knife cookbook upload
command uploads cookbooks to the Chef server.
- True.
2. False.
Which command lists which cookbooks are on the Chef server?
chef cookbook list
knife cookbook list
knife cookbook --list
答題是 2, 1, 2。
[Get a node to bootstrap]
要點:任何一台被 Chef server 所管理的機器就叫做一個 node
這個章節就是請你開一台符合 Chef 需求的 node 起來。
因為開機器是基本動作所以這個章節的大部分內容會簡單帶過。
1. 開機器
請開一台 RHEL 7 或 CentOS 7 起來,雲端機器或 VM 皆可,但請不要自己去光華裝一台或搬一台。
請確保你的機器具備以下特性:
- 可用
root
登入或具有sudo
權限 - 具可解析的 IP
- 可以連上 Internet
- 有開啟 22, 80, 443 這幾個 ports
接下來需要以下資訊:
- 機器的 hostname 或 IP
- 具 root 或
sudo
權限的帳密或 private key file 路徑
3. SSH 連線進去
我是用 AWS 的 CentOS 7,所以連線的指令會長這樣:
$ ssh -i {pem_file_path} centos@{IP_address}
4. 確認網路連線
這邊範例是去抓 http://www.cnn.com,但這個網址已經被 302 轉址掉了所以不會吐 200:
$ curl -I http://www.cnn.com | grep HTTP/1.1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
HTTP/1.1 302 Found
好啦這 http code 是 200 還是 302 一點都不重要,重點是連得出去就好。
5. 關閉連線
就是 exit
。
測驗
In Chef terms, what is a node?
- Any system that is a part of your infrastructure.
- Any system that is managed by Chef.
- Any system that can be managed by Chef.
True or False: Port 23 (Telnet) must be open for the bootstrap process to succeed.
- True.
- False.
答案是 2, 2。