我想通過版本控制來設置我們的環境。我們的shell腳本散佈在不同的服務器上。我不知道從哪裏開始組織它對其進行版本控制。但是,我們也使用puppet進行配置管理,這也應該有版本控制。我有以下2個問題,我不是很確定,如果他們可能至少:腳本和傀儡的版本控制
- 有沒有辦法來對劇本留下他們的位置不管他們現在是正確的,因爲大多數腳本是服務器版本控制具體。
- 是否有任何常見的解決方案來使用puppet模塊和shell腳本的版本控制,或者將腳本放在puppet中,並且僅將版本控制puppet。
在此先感謝。
我想通過版本控制來設置我們的環境。我們的shell腳本散佈在不同的服務器上。我不知道從哪裏開始組織它對其進行版本控制。但是,我們也使用puppet進行配置管理,這也應該有版本控制。我有以下2個問題,我不是很確定,如果他們可能至少:腳本和傀儡的版本控制
在此先感謝。
TL;博士:
- 有沒有辦法對他們留在爲所欲爲現在是正確的,因爲大多數腳本是服務器的特定位置的腳本版本控制?
- 是否有任何常見的解決方案來使用puppet模塊和shell腳本的版本控制,或者將腳本放在puppet中,並且僅將版本控制puppet。
如果你寫你的木偶代碼來處理你的要求,這是可能的,但不必要的。
通常,當你開始使用配置管理工具,如Puppet,,你正在做的是擺脫管理腳本。 Puppet是一種不用編寫任何腳本就可以運行命令的方法,並且可以抽象出運行到Puppet並讓它處理它的實際步驟。
使用Puppet來運行現有腳本通常是一種臨時情形,您希望最終重構爲使用Puppet exec,然後使用更多冪等Puppet模塊和清單,直到最終所有需求均由本機Puppet代碼滿足,從而對變更進行管理純粹由傀儡。
對於爲什麼要做到這一點的更多信息,請參見該問題:https://serverfault.com/questions/504070/why-use-chef-puppet-over-shell-scripts
因此,舉例來說,假設你開始了一個腳本,如果你是一個網絡服務器安裝一個軟件包:
Note: Steps simplified for examples, code might not actually work
腳本示例:
#/bin/bash
if $HOSTNAME='webserver.example'
yum install nginx
fi
,這是位於/var/tmp/install_nginx.sh
首先,你可以用木偶運行:
exec {'/var/tmp/install_nginx.sh':}
然而,我們如何讓這個腳本有擺在首位?你可以把它放在版本控制的地方,但是你怎麼設置它呢?
即使你得到這個工作,這有點煩瑣:如果Web服務器的名稱發生變化,如果你想在多臺服務器上使用它,該怎麼辦?
然後,你可以用木偶本身創建腳本:
$webserver_host = 'webserver.example'
$nginx_install_script = "if $HOSTNAME=${webserver.example}
yum install nginx
fi"
exec {'Install Nginx':
command => $nginx_install_script
}
那麼接下來,如果你需要改變Web服務器的名稱,你可以只改變變量。
但這仍然不是冪等的。木偶有采取了很多的工作,出了事情原生類型(Documented here或者你可以寫你自己的)
所以,你可以更改代碼,使其好多了:
$webserver_host = 'webserver.example'
if $::fqdn == webserver_host {
package {'nginx':
ensure => 'present',
}
}
這是更冪等,它是平臺獨立的。
這個重構從這裏繼續。