2016-01-20 102 views
0

我想通過版本控制來設置我們的環境。我們的shell腳本散佈在不同的服務器上。我不知道從哪裏開始組織它對其進行版本控制。但是,我們也使用puppet進行配置管理,這也應該有版本控制。我有以下2個問題,我不是很確定,如果他們可能至少:腳本和傀儡的版本控制

  1. 有沒有辦法來對劇本留下他們的位置不管他們現在是正確的,因爲大多數腳本是服務器版本控制具體。
  2. 是否有任何常見的解決方案來使用puppet模塊和shell腳本的版本控制,或者將腳本放在puppet中,並且僅將版本控制puppet。

在此先感謝。

回答

1

TL;博士:

  1. 有沒有辦法對他們留在爲所欲爲現在是正確的,因爲大多數腳本是服務器的特定位置的腳本版本控制?
  2. 是否有任何常見的解決方案來使用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', 
    } 
} 

這是更冪等,它是平臺獨立的。

這個重構從這裏繼續。