Лучший способ переименовать файл с помощью шеф-повара

Как я могу переименовать файл с шеф-поваром?

В документе шеф-повара я нашел только:

  • Создайте
  • create_if_missing
  • Удалить
  • трогать

person Rusty Robot    schedule 23.11.2012    source источник


Ответы (2)


Используйте ruby_block и внутри используйте ::File.Rename(src,dst). Фреймворк Chef не имеет переименования файлов (по крайней мере, не было до 0.10.18).

Просто пример:

ruby_block "Rename file" do
  block do
    ::File.rename(new_resource.src,new_resource.dst)
  end
end
person Sacx    schedule 23.11.2012
comment
Мне просто интересно... Это идемпотент? Я имею в виду... Что произойдет, если это запустится во второй раз и new_resource.src больше не будет существовать? - person cassianoleal; 03.06.2013
comment
Это не удастся. Это всего лишь пример. Вы должны быть уверены в файлах с диска. - person Sacx; 06.06.2013
comment
не могли бы вы просто поставить охрану? как в only_if { File.exists?(new_resource.src)} - person JL Peyret; 28.04.2016

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

ruby_block "Rename file" do
  block do
    ::Dir.glob("*/*.src").each {|i| File.rename(i, i.gsub(/(.*).src/,'\\1.dst'))};
  end
  not_if {File.exists?("new_resource.dst")}
end
person kamal079    schedule 07.07.2015