Learn Chef Rally 學習筆記 part5 — 上傳 cookbook 至 Chef server

Luyo
verybuy-dev
Published in
6 min readAug 16, 2017

本文記錄 Learn Chef Rally 以下章節的學習歷程:

[Upload a cookbook to Chef server]

這個章節要把 cookbook 傳上 Chef server,一開始說明除了用 git 做 cookbooks 的版本控制之外,同時在 Chef server 上維護一份副本可以帶來以下好處:

  1. 每一個 node 都可以方便取用這些 cookbooks
  2. 版本化的機制可以讓不同的 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.

  1. True.

2. False.

True or False: The knife cookbook upload command uploads cookbooks to the Chef server.

  1. True.

2. False.

Which command lists which cookbooks are on the Chef server?

  1. chef cookbook list
  2. knife cookbook list
  3. knife cookbook --list

答題是 2, 1, 2。

[Get a node to bootstrap]

要點:任何一台被 Chef server 所管理的機器就叫做一個 node

這個章節就是請你開一台符合 Chef 需求的 node 起來。

因為開機器是基本動作所以這個章節的大部分內容會簡單帶過。

1. 開機器

請開一台 RHEL 7 或 CentOS 7 起來,雲端機器或 VM 皆可,但請不要自己去光華裝一台或搬一台。

請確保你的機器具備以下特性:

  1. 可用 root 登入或具有 sudo 權限
  2. 具可解析的 IP
  3. 可以連上 Internet
  4. 有開啟 22, 80, 443 這幾個 ports

接下來需要以下資訊:

  1. 機器的 hostname 或 IP
  2. 具 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?

  1. Any system that is a part of your infrastructure.
  2. Any system that is managed by Chef.
  3. Any system that can be managed by Chef.

True or False: Port 23 (Telnet) must be open for the bootstrap process to succeed.

  1. True.
  2. False.

答案是 2, 2。

--

--