需要明確的是,我並不是要求使用 saltstack 的「最佳方法」。就我所知,使用 saltstack 的方法有很多,適合你的是有效的。我的問題特別是關於找到的最佳實踐文件頁面這裡。
首先我將向您展示我目前的環境是什麼樣的
(這不是特定於我的環境。我以前見過這個問題,但從未在 stackexchange.com 上見過,通常在鹽堆IRC)
第一次閱讀 saltstack 文件後,我嘗試實現自己的環境,但我很困惑如何透過使用不同的套件部署多個項目來完成我想要的任務。這是我的第一次嘗試。
我有三個不同的專案需要部署,稱為
項目1,項目2, 和項目3。
/etc/鹽/主控
file_roots:
base:
- /srv/salt
project1:
- /srv/salt/project1
project2:
- /srv/salt/project2
project3:
- /srv/salt/project3
#I have three projects that I need to deploy to, and each has a dev, qa, and prod machine.
nodegroups:
group-project1: 'L@dev-project1,qa-project1,prod-project1'
group-project2: 'L@dev-project2,qa-project2,prod-project2'
group-project3: 'L@dev-project3,qa-project3,prod-project3'
/srv/salt/top.sls
project1:
'group-project1':
- match: nodegroup
- oraclejava
- tomcat
- iptables-persistent
- postgresql
- apache
project2:
'group-project2':
- snort
- pulledpork
- barnyard
- snorby
- apache
- mysql
project3:
'group-project3':
- match: nodegroup
- oraclejava
- tomcat
- iptables-persistent
- postgresql
- apache
/srv/salt 內部的文件結構
/srv/salt 的內容
/srv/salt/project1, project2, project3, top.sls
/srv/salt/project1 的內容
/srv/salt/project1/oraclejava, tomcat, iptables-persistent, postgresql, ges, apache
/srv/salt/project2 的內容
/srv/salt/project2/snort, pulledpork, barnyard, snorby, apache, mysql
/srv/salt/project3 的內容
/srv/salt/project3/oraclejava, tomcat, iptables-persistent, postgresql, ges, apache
我不喜歡這個設定的地方
- 重複文件
如果我的專案有共同的套件,例如所有三個專案都有 apache,那麼我必須在其資料夾內的每個專案都有一個 apache 目錄。這並不可怕,因為 apache 的配置不一樣,但我不認為我正在利用 saltstack 允許的組織。
- 不易閱讀
正如您所看到的,這個設定有點難以閱讀。/etc/salt/master
每次我想要新增與特定專案關聯的 Minion 時, 我都必須在檔案中的節點群組中編輯我的 group-projectx 。
Saltstack最佳實踐
我的問題是,我將如何實施提到的最佳實踐政策這裡,在上面指定的環境。我知道有很多方法可以做到這一點,但我真的想以一種更容易理解的方式來做到這一點,並且不需要每次我有一個帶有apache 的伺服器時都創建一個新的apache目錄。
任何幫助表示讚賞。
編輯1
我收到的一些建議(並非透過 superuser.com)是一起擺脫節點群組,只需在 top.sls 檔案中指定哪些 Minions 與哪個狀態一致,使用與我在中使用的相同格式/etc/salt/master文件(L@dev-project1、qa-project1、prod-project1)。
另外,有人建議我也許我應該為每個專案使用不同的 salt-master。這是有道理的,我喜歡這個答案,但我認為對於沒有大量空間用於虛擬機器或實體機的人來說,這可能會很困難。
答案1
我直接在頂部文件中處理每個伺服器類型的不同應用程式配置。
# per server hostname : ie.
base:
'websrv*':
- oraclejava
- tomcat
- iptables-persistent
- postgresql
- apache
'monsrv*':
- snort
- pulledpork
- barnyard
- snorby
- apache
- mysql
如果您的 Minions 命名不允許您根據正規表示式對它們進行分類,您可以對 Grain 執行相同的操作。
# per server grains : ie.
base:
'G@role:websrv': # or even a custom grain like 'G@project:1'
- oraclejava
- tomcat
- iptables-persistent
- postgresql
- apache
'G@role:monitoring': # or even a custom grain like 'G@project:1'
- snort
- pulledpork
- barnyard
- snorby
- apache
- mysql
然後我對我的支柱數據執行相同的操作,允許我將不同的支柱分配給某些主機,以便這是我在Salt 中唯一的重複數據,具有相同的支柱鍵但不同的值來根據需要配置我的環境。然後我可以說一個 apache 狀態,其中特定於環境的任何內容都以我的支柱中的值呈現。
在你的支柱中,你可以有例如:
/top.sls
/apache /
| init.sls
| project1.sls
| project2.sls
| project3.sls