2014-02-11 121 views
13

我用SaltStack弄溼了自己的腳。我已經完成了我的第一個狀態(一個靜態配置的Vim安裝程序),我正在開發第二個狀態。Saltstack for「configure make install」

不幸的是,沒有Ubuntu應用程序包,我希望我的狀態安裝。我將不得不自己構建應用程序。使用Salt進行「configure-make-install」類型安裝有沒有「最佳實踐」?或者我應該只使用cmd?

特別是,如果我是做手工,我會做線沿線的東西:

wget -c http://example.com/foo-3.4.3.tar.gz 
tar xzf foo-3.4.3.tar.gz 
cd foo-3.4.3 
./configure --prefix=$PREFIX && make && make install 
+0

也https://github.com/SS-archive/salt-states/blob/master/small/ruby-1.9.2/init.sls – Paolo

回答

21

有狀態模塊抽象的前兩行,如果你想。

但你也可以只運行在目標僕從(S)的命令。

install-foo: 
    cmd.run: 
    - name: | 
     cd /tmp 
     wget -c http://example.com/foo-3.4.3.tar.gz 
     tar xzf foo-3.4.3.tar.gz 
     cd foo-3.4.3 
     ./configure --prefix=/usr/local 
     make 
     make install 
    - cwd: /tmp 
    - shell: /bin/bash 
    - timeout: 300 
    - unless: test -x /usr/local/bin/foo 

只要確保包括unless參數使腳本冪等。

另外,分配一個bash腳本到minion並執行。見: How can I execute multiple commands using Salt Stack?

至於best practice?我建議使用fpm來創建.deb或.rpm包並安裝它。至少,將這個tarball複製到salt master,並且不要依賴外部資源在三年後出現在那裏。

+0

關於外部資源的好處。我可能會在主服務器上設置一個nginx服務器來鏡像我需要的資源。感謝您的建議! – nomen

+2

您的除非條款不會按照您的預期工作。它應該是一個純粹的字符串輸入,而不是一個列表。它目前總是返回true。 –

+0

已修復。感謝@TavisRudd –

9

我們假設foo-3.4.3.tar.gz被簽入GitHub。下面是你可能在你的國家文件中追求一種方法:

git: 
    pkg.installed 

https://github.com/nomen/foo.git: 
    git.latest: 
    - rev: master 
    - target: /tmp/foo 
    - user: nomen 
    - require: 
     - pkg: git 

foo_deployed: 
    cmd.run: 
    - cwd: /tmp/foo 
    - user: nomen 
    - name: | 
     ./configure --prefix=/usr/local 
     make 
     make install 
    - require: 
     - git: https://github.com/nomen/foo.git 

您的配置prefix位置可以作爲salt pillar傳遞。如果構建過程更復雜,則可以考慮編寫一個custom state

相關問題