Chef中的mktemp命令

时间:2015-03-20 18:04:52

标签: vagrant chef chef-recipe chef-solo

有没有人知道Chef是否在linux上有一个类似mktemp命令的资源?

基本上,我正在寻找一种远程下载文件并将其保存在/ tmp下的方法,但我想将它保存为uniq文件名

remote_file "/tmp/ec2-ami-tools.zip" do
  source "http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools-1.5.6.zip"
  action :create
end

而不是使用/tmp/ec2-ami-tools.zip作为目标文件名,我希望有一个安全的uniq文件名。除了使用日期时间随机,是否在Chef中有官方资源?我想知道Chef是否有可以生成UUID的资源

由于

1 个答案:

答案 0 :(得分:0)

准确回答您的问题(创建临时文件):

require 'tempfile'

mydest = Tempfile.new('ec2-ami-tools.zip')

remote_file mydest do 
  source "http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools-1.5.6.zip"
  action :create
  notifies :run,"execute[unzip #{mydest}", :immediately
end
execute "unzip #{mydest}" do
  action :nothing
end

高度不鼓励这样做,因为在每次运行时,文件将被下载并解压缩(Tempfile将更改),而不会对配方进行任何幂等性。


ark cookbook可以帮助您解决此问题。

它有一个LighWeight资源提供程序,完全针对这个目标,下载一个tarball,提取它,然后在那之后做一些事情。

来自方舟自述文件:

  

此示例将ivy.tar.gz复制到/var/cache/chef/ivy-2.2.0.tar.gz,   将其内容解压缩到/usr/local/ivy-2.2.0/ - 剥离前导   目录和符号链接/ usr / local / ivy到/usr/local/ivy-2.2.0

 # install Apache Ivy dependency resolution tool
 ark "ivy" do
   url 'http://someurl.example.com/ivy.tar.gz'
   version '2.2.0'
   checksum '89ba5fde0c596db388c3bbd265b63007a9cc3df3a8e6d79a46780c1a39408cb5'
   action :install
 end

根据你的例子,我会做这样的事情:

ark 'ec2-ami-tools' do
  url 'http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools-1.5.6.zip'
  version '1.5.6'
  action :install
end

校验和将避免调用Web服务器以查看文件是否已更改,因为磁盘上的zip校验和将与资源校验和进行比较,如果匹配则将在此时停止。

ckecksum是文件的sha256sum