2012-11-23 13 views

risposta

9

Usa ruby_block e dentro uso :: File.Rename (src, dst). Il framework Chef non ha la rinomina del file (o almeno non lo era fino a 0.10.18).

Solo un esempio:

ruby_block "Rename file" do 
    block do 
    ::File.rename(new_resource.src,new_resource.dst) 
    end 
end 
+2

Mi stavo solo chiedendo ... Questo è idivotente? Voglio dire ... Cosa succede quando questo viene eseguito una seconda volta e 'new_resource.src' non esiste più? – cassianoleal

+1

Fallirà. Questo è solo un esempio. Dovresti assicurarti per i file dal disco. – Sacx

+1

non ti basta mettere una guardia? come in 'only_if {File.exists? (new_resource.src)}' –

1

Un'altra opzione se avete bisogno di rinominare più file. Controlla una delle risorse per sapere se è già stata eseguita.

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 
Problemi correlati