2016-11-03 12 views
0

ディレクトリを作成し、同じレシピで新しく作成したディレクトリにファイルをコピーする必要がありますもう1つはコピー用です)。しかし、私がそれをやっているときに、ファイルをコピーする必要があるレシピの2番目の部分は、エラーメッセージを出すことに失敗しています:ディレクトリは存在しません。それが最初のステップ に作成されますので、それがディレクトリとしてコンパイル時に失敗していることをその決定的なエラーから がない、あなたは属性として格納されたディレクトリパスを持っているようなものを想定しシェフ:同じレシピでディレクトリを作成した後、そのディレクトリを参照/実行する方法

dir="/ibmlib" 
directory '/ibmlib' do 
    owner 'root' 
    group 'root' 
    mode '0777' 
    action :create 
end 

li = 'add file' 
clrlog1 = Chef::Util::FileEdit.new('/ibmlib') 
clrlog1.insert_line_if_no_match(/#{li}/, li) 
clrlog1.write_file 
+0

コードをお知らせください。 – StephenKing

+0

@StephenKing DIR = "/ ibmlib" ディレクトリ '/ ibmlib' 所有者 'ルート' グループ 'ルート' モード '0777' のアクションを実行します。 エンドを作成 李= clrlog1を 'ファイルを追加' = Chef :: Util :: FileEdit.new( '/ ibmlib') clrlog1.insert_line_if_no_match(/#{li} /、li) clrlog1.write_file – Dave

+0

ディレクトリまたはファイルにしますか? Rubyコードを['ruby_block'](https://docs.chef.io/resource_ruby_block.html)リソース内にラップする必要があります。さもなければ、それは "早すぎる"実行されます。 – StephenKing

答えて

1

を教えてください:リソースが呼び出される順序は、ここに不可欠であることを心に留めておく

directory node['attribute']['new_path'] do 
    recursive true 
end 

execute 'copy' do 
    command "cp #{node['attribute']['old_path']}/* #{node['attribute']['new_path']}/." 
end 

してください、あなたはこれらを通知する他のリソースを持っている場合、それらが実行されるように要求されたとき、持つものを持っているような(順番に目を離しません遅延実行)。

directory node['attribute']['new_path'] do 
    recursive true 
    notifies :run, 'execute[copy]', :immediate 
end 

execute 'copy' do 
    command "cp #{node['attribute']['old_path']}/* #{node['attribute']['new_path']}/." 
    action :nothing 
end 
0

を、それが脆性レシピコードになりので、あなたが本当にのインラインファイルの編集を避けるべきであるコメントで述べたように:ちょうどあなたもこれを試みることができるために必ずする

。あなたがそれをしなければならない場合は、line料理本を使用してください。これは、あなたが示したコードのリソース指向のバージョンを提供するため、Chef-yのものでうまくいきます。

関連する問題