2012-03-01 49 views
7

我正在從模塊安裝軟件包(在此特定情況下爲Nginx),並且希望包含模塊外部的配置文件,即從頂級files目錄並行到頂級manifests目錄。我沒有看到任何方式來源文件,但沒有將其包含在模塊中,或者在我當前的指向絕對本地路徑的Vagrant環境中。從模塊外部採購木偶文件

Puppet是否允許從模塊外部獲取文件,如文檔中所述?

回答

3

如果我正確理解你的問題,你可以。 在你的模塊這樣

file { '/path/to/file': 
    ensure => present, 
    source => [ 
       "puppet:///files/${fqdn}/path/to/file", 
       "puppet:///files/${hostgroup}/path/to/file", 
       "puppet:///files/${domain}/path/to/file", 
       "puppet:///files/global/path/to/file", 
    ], 
} 

一個簡單的代碼將做的工作。 /path/to/file將使用位於「文件」Puppet共享中的文件來源。 (在上例中,它在4個不同的位置搜索)。

更新也許你在談論一個目錄來存放未通過木偶文件服務器共享文件(看http://docs.puppetlabs.com/guides/file_serving.html),在這種情況下,你不能,我認爲,流浪或沒有,但您可以添加它到您的Puppet文件服務器來做到這一點。我認爲這是最好的(也許是唯一的)方法。

1

如果您有多個Vagrant虛擬機,您可以將文件存儲在您的Vagrant項目目錄(包含您的VagrantFile)中。 此目錄通常可用於創建時虛擬機內所有虛擬機/流浪虛擬機。

如果你希望你的計算機上的其他目錄提供給您的虛擬機只需添加以下到您的VagrantFile

# see http://docs.vagrantup.com/v1/docs/config/vm/share_folder.html 
config.vm.share_folder "v-packages", "/vagrant_packages", "../../dpkg" 

然後用木偶中的文件,你可以簡單地把它們當作本地文件到虛擬機

# bad example, bub basically use 'source => 'file:///vagrant/foo/bar' 
file { '/opt/cassandra': 
    ensure => directory, 
    replace => true, 
    purge => true, 
    recurse => true, 
    source => 'file:///vagrant/conf/dist/apache-cassandra-1.2.0', 
} 

如果你只使用本地puppet清單/模塊,這可能只是明智的做法。

0

可能爲時已晚,以幫助bennylope,但對於其他人碰到這個問題誰發生,因爲我想出來爲自己以前做...

包括像這樣的東西在你的Vagrantfile ...

GUEST_PROVISIONER_CONFDIR = "/example/destination/path" 
HOST_PROVISIONER_CONFDIR = "/example/source/path" 
config.vm.synced_folder HOST_PROVISIONER_CONFIDIR, GUEST_PROVISIONER_CONFDIR 
puppet.options = "--fileserverconfig='#{GUEST_PROVISIONER_CONFDIR}/fileserver.conf'" 

然後確保/ example/source/path包含引用的fileserver.conf文件。它應該是這個樣子......

[foo] 
    path /example/destination/path 
    allow * 

現在,假設例如-file.txt的存在/例子/來源/路徑,下面將在您的工作清單:

source => "puppet:///foo/example-file.txt", 

參見:

  1. Puppet configuration reference entry for fileserverconfig
  2. Serving Files From Custom Mount Points