SaltStack中的檔案伺服器

yinchuan發表於2013-05-28

參考連結: 原文Salt File Server, 官網文件cp模組

在配置管理系統中,從中心伺服器想客戶端推送檔案是很基本的需求。SaltStack使用內建的ZeroMQ伺服器做為檔案伺服器。 檔案伺服器主要用來在state系統中推送檔案到客戶端,也可以用於其他檔案的傳輸。

cp模組

客戶端對檔案伺服器的操作都在cp模組中。Salt State系統,Salt-cp都用到了cp模組。

環境

因為檔案伺服器是為Salt state系統服務,所以也支援環境的概念。master的配置檔案中定義各環境的路徑,檔案的路徑基於指定環境的根目錄(參見下面的例子)。

常見用法

get_file

cp.get_file用來從master下載檔案到客戶端,語法如下:

# salt '*' cp.get_file salt://vimrc /etc/vimrc

其中vimrcmaster上的實際路徑要看環境中定義的根目錄,假設在master中有如下定義:

file_roots:
  base:
    - /srv/salt/

那麼vimrc的實際路徑就是/srv/salt/vimrc,這樣做的好處是,可以滿足state系統中環境的概念。

源路徑和目標路徑中都可以使用模板,如下:

# salt '*' cp.get_file "salt://{{grains.os}}/vimrc" /etc/vimrc template=jinja

這個例子中,將下載與客戶端作業系統名字相同的目錄下的檔案。

對於大檔案,cp.get_file支援gzip壓縮,在引數中指定gzip的壓縮級別,如下:

# salt '*' cp.get_file salt://vimrc /etc/vimrc gzip=5

其中,1代表作小壓縮,9代表最大壓縮。

cp.get_file預設不在客戶端上建立目錄,如果客戶端上沒有這個目錄了,檔案拷貝將失敗,可以指定makedirs=True來建立目錄:

# salt '*' cp.get_file salt://vimrc /etc/vim/vimrc makedirs=True

在這個例子中,如果``/etc/vim不存在,將會建立此目錄。

get_dir

cp.get_dir可以從master下載整個目錄,語法如下:

# salt '*' cp.get_dir salt://etc/apache2 /etc

cp.get_dir也支援模板和壓縮:

# salt '*' cp.get_dir salt://etc/{{pillar.webserver}} /etc gzip=5 template=jinja

get_url

cp.get_url可以從一個URL地址下載檔案,URL可以是msater上的路徑(salt://),也可以是http網址。

salt '*' cp.get_url salt://my/file /tmp/mine
salt '*' cp.get_url http://www.slashdot.org /tmp/index.html

get_template

cp.get_template可以在檔案下載之前用模板引擎處理。

salt '*' cp.get_template salt://path/to/template /minion/dest

push

cp.push可以從客戶端傳檔案到master上,處於很明顯的安全考慮,預設沒有啟用此功能,如果你需要的話可以參考文件,很方便的開啟。

相關文章