2012-04-02 26 views
3

我正尝试在厨师中使用python解释器。下面是我的无知尝试,没有奏效。在Python中完成下面的正确方法是什么?如何在厨师中使用python解释器

script "install_something" do 
    interpreter "python" 
    user "root" 
    cwd "/tmp" 
    code <<-EOH 
    import boto 
    f = open('test.txt','r') 
    f.write('adfadf') 
    f.close() 
    EOH 
    not_if {File.exists?("/tmp/test.txt")} 
end 


[Mon, 02 Apr 2012 15:20:35 +0000] ERROR: Chef::Exceptions::ShellCommandFailed: script[install_something] (rtb_server::default line 101) had an error: Chef::Exceptions::ShellCommandFailed: Expected process to exit with [0], but received '1' 
---- Begin output of "python" "/tmp/chef-script20120402-26069-3d6hob-0" ---- 
STDOUT: 
STDERR: File "/tmp/chef-script20120402-26069-3d6hob-0", line 1 
    import boto 
    ^
IndentationError: unexpected indent 
---- End output of "python" "/tmp/chef-script20120402-26069-3d6hob-0" ---- 
Ran "python" "/tmp/chef-script20120402-26069-3d6hob-0" returned 1 

回答

9

code <<-EOH 
    import boto 
    f = open('test.txt','r') 
    f.write('adfadf') 
    f.close() 
    EOH 

的内容传递给逐字解释,这是说,包括领先的缩进。由于缩进形成了Python语法的一部分,因此您的脚本(在<<-EOH/EOH之间)不是有效的python。

这种情况下的解决方案是删除<<-EOH/EOH区块中的缩进。