厨师食谱中是否遵循一系列步骤
Is there a sequence of steps followed in chef recipes
在我的食谱中添加了以下内容:
directory '/opt/test/scripts' do
owner 'root'
group 'root'
mode '0755'
action :create
recursive true
not_if 'grep /opt/test'
end
下载文件并更改权限:
uri=URI.parse('https://repo.test2.io/BwIaTHE0ohsUts74LYZMzrt/pair.sh')
response = Net::HTTP.get_response(uri)
File.write('/opt/test/scripts/pair.sh', response.body)
File = File.new( "/opt/test/scripts/pair.sh", "w" ).chmod( 0755 )
这看起来很奇怪,因为它正在尝试下载文件,而不是创建需要下载文件的目录。
它尝试将文件下载到 /opt 目录,但由于该目录不可用,所以执行过程失败...
观察到错误
/var/chef/cache/cookbooks/ill/recipes/default.rb
中的配方编译错误
错误号::ENOENT
没有这样的文件或目录@rb_sysopen - /opt/test/scripts/pair.sh
是否有 CHEF 实现的控制机制,或者是否有办法让 CHEF 理解应该先创建目录然后下载?
谢谢
Chef 使用 https://coderanger.net/two-pass/ 中详述的 two-pass 执行模型,但基本上首先 Ruby 作为菜谱的代码是 运行,"compile" 向下到资源,然后评估资源。因此,在其中混合使用资源 DSL 和普通 Ruby 意味着它们不会按照您期望的顺序执行(因为 directory
资源只是排队,而不是 运行)。也就是说,您在这里想要的是使用 remote_file
资源而不是您的手动代码,但在更一般的情况下,您可以使用 ruby_block
资源来延迟 运行 一些代码直到收敛时间。
在我的食谱中添加了以下内容:
directory '/opt/test/scripts' do
owner 'root'
group 'root'
mode '0755'
action :create
recursive true
not_if 'grep /opt/test'
end
下载文件并更改权限:
uri=URI.parse('https://repo.test2.io/BwIaTHE0ohsUts74LYZMzrt/pair.sh')
response = Net::HTTP.get_response(uri)
File.write('/opt/test/scripts/pair.sh', response.body)
File = File.new( "/opt/test/scripts/pair.sh", "w" ).chmod( 0755 )
这看起来很奇怪,因为它正在尝试下载文件,而不是创建需要下载文件的目录。
它尝试将文件下载到 /opt 目录,但由于该目录不可用,所以执行过程失败...
观察到错误
/var/chef/cache/cookbooks/ill/recipes/default.rb
中的配方编译错误错误号::ENOENT
没有这样的文件或目录@rb_sysopen - /opt/test/scripts/pair.sh
是否有 CHEF 实现的控制机制,或者是否有办法让 CHEF 理解应该先创建目录然后下载?
谢谢
Chef 使用 https://coderanger.net/two-pass/ 中详述的 two-pass 执行模型,但基本上首先 Ruby 作为菜谱的代码是 运行,"compile" 向下到资源,然后评估资源。因此,在其中混合使用资源 DSL 和普通 Ruby 意味着它们不会按照您期望的顺序执行(因为 directory
资源只是排队,而不是 运行)。也就是说,您在这里想要的是使用 remote_file
资源而不是您的手动代码,但在更一般的情况下,您可以使用 ruby_block
资源来延迟 运行 一些代码直到收敛时间。