almost 3 years ago

Saltstack 將 state 分為七層,由上至下分別是:

  • Overstate
  • HighState
  • SLS

  • High Data
  • Low State
  • Low Chunk
  • Function Call

上半部是使用者編寫的腳本,下半部是 Saltstack 執行時所產生的資料結構。

SLS (SalT State)

使用者編寫 script 的最小單位。

Saltstack 提供了許多種 renderer,可以依照自己喜歡的方式去編寫。官網上的例子都是使用 YAML

High Data

將 SLS 檔案組合完後,經過第一次編譯,所形成的資料結構。本身是一個 OrderedDict

Low State

High Data 會再經過第二次編譯產生一個裝著 Low Chunk 的 Ordered List。這個 List 的 Order,僅表示 Saltstack 去評估 (evaluate) 的順序,但未必是最終的執行順序。執行順序會受到 Requisite Statements 影響

Low Chunk

以資料結構來描述 Function Call 時,最簡單、基本的呈現。是一個 dict。裡面的 key 包含了:

  • state
  • function
  • name
  • parameters

Function Call

Saltstack 執行工作的最小單位。每個 SLS 定義的 State 最後都會被分解為一個個 Function Call。

Highstate

SLS 定義的是一連串想要執行的工作。HighState 則讓你可以將機器分組,運用不同的 SLS 進行佈署。

Overstate

Overstate 讓你以一個節奏制定你的佈署流程,就是所謂的 System Orchestration。

簡單的說 SLS 是一台(群)機器的安裝流程,而 Overstate 就是一整個系統的佈署流程。

參考資料

官方文件
  1. State System Layers
  2. Understanding State Ordering
  3. Ordering States
 
about 3 years ago

簡單紀錄有使用到的 Jenkins Plugins。因為 Jenkins 外掛實在太多了,而且設定完就不太需要理會。如果沒記下來下次就要在重新 google。

持續更新中...

Google Login Plugin

使用 Google Account 作為 oAuth

Slack Notification

在工作完成時,發出 Slack 訊息。

Multiple SCMs Plugin

允許在同一個 Job 抓取多個 source code 來源。在做整合測試時,會用上。

Jabber Plugin

可以在工作完成時發通知到 google talk。

後台設定
  1. Server - talk.google.com
  2. Port - 5223
  3. 關閉 SASL

Copy Artifact Plugin

可以從別的 Job 複製成品。可以用來設計 Pipe (|) 概念的連續工作。

Docker Plugin

利用 Docker 建立的 container 來當作 slave 。需要自行製作屬於自己的 docker slave

Multi-Branch Project Plugin

讓一個 Project 同時維護數個 Branch

相關資料

Intégration continue avec Jenkins et Docker | Philippe Pepiot

2014-02-17 Update

  • 新增 Google Login Plugin, Slack Notification
  • 更新 Docker Plugin

2015-08-27 Update

  • 新增 Multi-Branch Project Plugin
 
about 3 years ago

下例是一個監聽客製化事件的 upstart scrpit 的例子。

description "Test Event Emit"

start on test_event DATA=GO
stop on runlevel [!2345]

script
logger -t "[Test Event]" $DATA
end script

要觸發這個 script 只需要透過

initctl emit test_event DATA=GO
 
about 3 years ago

因為 Vagrant 1.6 的釋出,加強了對 Windows Guest 的支援。所以,我試著使用 packer-windows 製作 Windows 8 的 Vagrant Box.

製作過程中,為了要讓 vagrant rdp 能順利使用,需要將 Windows Remote Desktop 打開。簡單的 Google 一下,找到了利用 Powershell 設定的方法。

enable-rdp.bat
# 打開遠端桌面連線 
powershell -Command "set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name 'fDenyTSConnections' -Value 0"

# 關閉僅接受驗證的使用者
powershell -Command "set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name 'UserAuthentication' -Value 0"

# 從防火牆打開 3389 的 PORT
powershell -Command "New-NetFirewallRule -DisplayName 'Allow RDP' -LocalPort 3389 -Protocol TCP -Action Allow"
 
about 3 years ago

自製離線版 Package Repository 區分為三個步驟:

  1. 下載套件 DEB
  2. 建立 Package Repository
  3. 設定 Source list

下載套件 DEB

下載想要離線安裝的套件有許多方式,下面列出 2 種:

  1. 直接下載目標套件

    $ apt-get download pkg_name
    
    • 缺點: 不會自動下載相依套件 (Dependancies)
  2. 以模擬安裝的方式下載。

    $ apt-get --download-only -o Dir::Cache::archives=/path/to/archive/ install pkg_name
    
    • 優點: 是會自動尋找相依
    • 缺點: 是如果系統已經裝過的套件就會被自動忽略 (與安裝的行為相同)

建立 Package Repository

首先,先進入你收集套件的資料夾。應該會看到一大堆的 DEB 檔。這時,從下方選一種方式建立 Repository:

  1. dpkg-scanpackages

    $ dpkg-scanpackages . | gzip -9c > Packages.gz
    
  2. apt-ftparchive

    $ apt-ftparchive packages ./ > Packages
    

設定 Source list

/etc/apt/ 新增一個 local.list 內容如下:

deb file:///path/to/package/repo/ ./

使用

在 apt 加上額外的參數,限定來源,就可以使用自己的 Repo 了。

$ apt-get -o Dir::Etc::sourcelist=/etc/apt/local.list  -o Dir::Etc::sourceparts=" " update
$ apt-get -o Dir::Etc::sourcelist=/etc/apt/local.list  -o Dir::Etc::sourceparts=" " install pkg_name