Чтобы точно ответить на ваш вопрос (создание временного файла):
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
Я настоятельно не рекомендую делать это, так как при каждом запуске файл будет загружаться и распаковываться (временный файл будет меняться) без какой-либо идемпотентности рецепта.
В этом случае вам может помочь поваренная книга ark.
У него есть LighWeight Resource Provider, предназначенный именно для этой цели, загружающий архив, распаковывающий его и, возможно, делающий что-то после этого.
Пример из ковчега README:
Этот пример копирует 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
Контрольная сумма позволит избежать вызова веб-сервера, чтобы узнать, изменился ли файл, поскольку контрольная сумма zip на диске будет сравниваться с контрольной суммой ресурса, и если они совпадают, она остановится на этом этапе.
Контрольная сумма — это sha256sum
файла.
person
Tensibai
schedule
24.03.2015
mktemp
, но у ruby есть эквивалентный IIRC. Немного подробнее о том, чего вы пытаетесь достичь, и мы можем дать лучший совет. - person Tensibai   schedule 23.03.2015