Команда mktemp в Chef

Кто-нибудь знает, есть ли у Chef ресурс, похожий на команду mktemp в Linux?

По сути, я ищу способ удаленно загрузить файл и сохранить его в / tmp, но я хочу, чтобы он сохранялся в уникальном имени файла.

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 в качестве имени файла назначения я хочу иметь безопасное уникальное имя файла. Помимо использования случайной даты и времени, есть ли официальный ресурс, делающий это в Chef? Мне интересно, есть ли у шеф-повара ресурс, который может генерировать UUID

Спасибо


person Nam Nguyen    schedule 20.03.2015    source источник
comment
Не могли бы вы объяснить немного больше вашего варианта использования? Я с трудом понимаю, как получить идемпотент с помощью mktemp, но у ruby ​​есть эквивалентный IIRC. Немного подробнее о том, чего вы пытаетесь достичь, и мы можем дать лучший совет.   -  person Tensibai    schedule 23.03.2015
comment
Я хотел бы загрузить zip-файл из Интернета, сохранить его локально во временной папке с уникальным именем (например: /tmp/abc123234141234.zip), а затем запустить команду unzip, чтобы распаковать его (например: unzip /tmp/abc123234141234.zip ).   -  person Nam Nguyen    schedule 23.03.2015
comment
Чего я не понимаю, так это желания использовать уникальное имя, не являющееся именем загруженного файла или выбранным именем. Взгляните на кулинарную книгу Ark, которая позаботится о загрузке и распаковке, я думаю, она должна удовлетворить ваши потребности. (извините, сейчас нет ссылки)   -  person Tensibai    schedule 23.03.2015


Ответы (1)


Чтобы точно ответить на ваш вопрос (создание временного файла):

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