2017-04-22 169 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