2017-04-22 135 views
0

我正在使用腳本從用戶收集生成規格信息,然後使用刀克隆和建立一個虛擬機規範。 CHEF然後將一些shell腳本複製到配置節點,然後使用「ssh ssh」執行這些腳本。CHEF /刀 - 運行shell腳本

這工作得很好:

template '/path/to/filename.sh' do 
    source 'filename.sh.erb' 
    mode 755 
end 

這不:

cookbook_file '/path/to/filename.sh' do 
    source 'filename.sh' 
    mode 755 
end 

的filename.sh.erb和filename.sh的內容是相同的。該錯誤消息我得到的是如下:

DEMO-CCM2.t3fca.com慶典:/tmp/C3_Component_Install.sh:/斌/慶典^ M:壞的解釋:沒有這樣的文件或目錄

這兩個文件的最頂端看起來是這樣的:

#!/bin/bash 

如果我去了主機和嘗試手動運行該腳本,下面所有的工作就好了:

  • SHç 3_Component_Install.sh
  • /斌/慶典C3_Component_Install.sh
  • 在/ usr /斌/慶典C3_Component_Install.sh
  • /tmp/C3_Component_Install.sh

所以我不知道什麼是錯。預先感謝您的幫助。

回答

0

您正在使用Windows換行符保存文件,在處理期間修復模板時爲其重新創建了cookbook_file。如果你使用Unix換行符保存,它將是相同的。

+0

我在Windows上使用Atom,使用Vagrant實例將文件保存到共享目錄中,因此我可以從Vagrant實例(CentOS 7)中執行Chef代碼。你是說如果不是通過Atom保存文件,而是將文本複製到我的剪貼板中,然後將其粘貼到我的終端仿真器中的'nano'(文本編輯器)中,並放入Vagrant實例中,這不會解決我的問題?有沒有辦法解決我的問題,除了在Linux中本地執行所有文本編輯?或者是堅持使用模板方法的唯一解決方案?有關模板如何修復此問題?謝謝。 – Dan

+0

Atom默認包含行結束選擇器插件AFAIK,請參閱https://github.com/atom/line-ending-selector獲取屏幕截圖。製作那個'LF'。 – coderanger