2017-06-12 175 views
1

說明這裏是我的木偶代碼:的木偶代碼

file { 'copy_files': 
    path => "/data/files", 
    source => "puppet:///modules/mymodule/repo", 
    recurse => true; 
    } 
    file {'chmod_script': 
    path => "/data/files/inner_folder/script", 
    ensure => 'present', 
    mode => "+x" 
    } 

我要的是複製我的文件夾(「回購」),然後讓一個可執行腳本。但是,通過上面的代碼,腳本中的所有內容都被清除(腳本只是空文件)。沒有那個額外的資源('chmod_script')文件的內容是預期的(沒有被擦除)。所以我在這裏做錯了什麼?我認爲這可能是因爲第二個資源('chmod_Script')在早些時候執行,但文檔說「Puppet按照他們在清單中聲明的​​順序應用資源。」。那麼有人可以解釋我應該是什麼樣子?

編輯 我已經決定使用這個腳本:

file { 'copy_files': 
    path => "/data/files", 
    source => "puppet:///modules/mymodule/repo", 
    recurse => true; 
    } 
    file {'chmod_script': 
    path => "/data/files/inner_folder/script", 
    source => "puppet:///modules/mymodule/repo/inner_folder/script", 
    ensure => 'present', 
    mode => "+x" 
    } 

所以在更新模式,我複製內容一次。

+0

如果第二資源首先被執行,那麼從邏輯腳本就不會是空的。無論如何,這裏阻力最小的路徑是腳本可以在源代碼中執行。 –

+0

感謝您的回答。是的,我想過讓它在源代碼中可執行。但想知道爲什麼我的解決方案不能按預期工作。另外,如果第二個資源被首先執行,那麼它會創建空的可執行文件(就像它發生在我的情況),或者我錯了嗎? –

+0

偉大的問題。我計算出來並在@peterSchiza下面回答。 –

回答

1

您似乎遇到了無證行爲。

當你運行puppet agent -t時,Puppet Agent會請求Puppet Master編譯一個目錄,並且所有的事情都是平等的,因爲你詢問了排序,它根據你在清單中的寫法來命令一切(假設你擁有Puppet 4或比2014年初更新的Puppet 3版本)。接下來,如果您通過recurse要求Puppet鏡像遠程目錄,Puppet實際上會修補已編譯的目錄併爲遠程目錄中的每個文件添加資源。 (並且Puppet繼續履行艙單的訂單。)

但是,這裏有一個問題。不允許重複資源,所以如果編譯的目錄已經包含與通過recurse添加的文件重疊的文件資源,Puppet會決定保留哪一個。如果目錄已經通過特定聲明包含文件資源,則目錄中已有的文件將獲勝。

所以,你的情況,木偶不知道任何有關 inner_folder/script遠程內容,並且您還沒有指定任何內容,因此木偶只是創建一個空文件。

(此外,看一看在Bug 2296討論,以瞭解其他相關的邊緣情況下的行爲。)

我與馬特Schuchard同意,最好的辦法在這裏,給您的要求,只是在遠程目錄中設置可執行標誌(+x)。

此外,然而,你還需要使用source_permissions => usedoc):

file { 'copy_files': 
    path => "/data/files", 
    source => "puppet:///modules/mymodule/repo", 
    source_permissions => use, 
    recurse => true, 
    } 
+0

不幸的是,它不起作用。我已經改變了遠程文件(+ x)​​的模式,但它沒有在客戶端運行木偶腳本之後有任何想法該怎麼辦?或者我做錯了什麼? –

+0

@peterSchiza,你不是做錯了。我只是對它進行了測試,可悲的是,正如你所說,它不起作用。這使我們只能在這裏遇到不好的選擇,我更新了這篇文章。實際上,我的建議不是使用'recurse => true',而是尋找解決此問題的另一種方法。 –

+0

感謝您的回覆。我決定使用另一種方法,並將其包含在我的第一篇文章中(不知道它是否比你的更好)。另外,如何在不使用'recurse => true'的情況下完成複製目錄? –