私はシェフの初心者です。クックブックのfiles/default
ディレクトリ内のディレクトリを別の場所にコピーする方法があるかどうか誰かにアドバイスできますか。
例えば。 a.txt
ディレクトリにb.txt
とfiles/
のファイルがあるディレクトリ構造があります。cookbook_name/files/default/folder-name/[a.txt,b.txt]
。両方のファイルを/home/user/work/somelocation/folder-name/[a.txt,b.txt]
の場所にします
私は次のように cookbook_file リソースを試しました:
cookbook_file '/home/user/work/somelocation/' do
source ['folder-name']
mode "0644"
action :create
end
そして
cookbook_file '/home/user/work/somelocation/' do
source ['folder-name/a.txt',''folder-name/b.txt'']
mode "0644"
action :create
end
ループして任意のディレクトリ間でファイルをコピーする他の方法を知っていますが、cookbook_fileがcookbookのfiles/default
ディレクトリ内の標準フォルダからファイルを処理する方法と同様のディレクトリを処理するより洗練された方法があるかどうかを知りたいです。
remote_directoryを使用すると、ディレクトリ全体を選択した場所にコピーできます。例えば:
remote_directory "/etc/some_target_directory" do
source 'local_directory' # <-- this is your directory in files/default/local_directory
files_owner 'root'
files_group 'root'
files_mode '0750'
action :create
recursive true
end
クックブックに含まれているすべてのファイルをコピーする「良い/クリーンな」方法はありません。
複数のファイルを作成するために、単純なRubyロジックを適用して、これらのファイルをループすることができます。
['a.txt', 'b.txt'].each do |file|
cookbook_file "/home/user/work/somelocation/#{file}" do
source "folder-name/#{file}"
mode "0644"
end
end
これにより、複数のcookbook_file
リソースが作成されます( @ jamesgaddum が話していること)。
P.S. default/
のfiles/default/
部分は、Chefバージョンがいくつかあるためオプションです。
cookbook_file
がチェックサムを使用して既存のファイルと新しいファイルを比較するのとは異なり、それぞれに一意のcookbook_file
リソースが必要です。
私は同様の問題に直面しており、ATMは私が持っている解決策に近いものです。レシピでは、run_context.cookbook_collection[<cookbook-name>].file_filenames
は、<cookbook>/files
の下にあるすべてのファイルの宛先に完全なパスを持つ配列です。
たとえば、次のようなディレクトリの設定では、次のようになります。
files/
default/
foo.txt
bar.txt
baz/foo.txt
次のようなディレクトリを返します
[
"/opt/kitchen/cache/cookbooks/cookbook/files/default/foo.txt",
"/opt/kitchen/cache/cookbooks/cookbook/files/default/bar.txt",
"/opt/kitchen/cache/cookbooks/cookbook/files/default/baz/foo.txt"
]
しかし、これは私にはあまり役に立ちません