web-dev-qa-db-ja.com

Chefクックブック-クックブックのファイル/デフォルトの場所から新しい場所に完全なディレクトリをコピーします

私はシェフの初心者です。クックブックのfiles/defaultディレクトリ内のディレクトリを別の場所にコピーする方法があるかどうか誰かにアドバイスできますか。

例えば。 a.txtディレクトリにb.txtfiles/のファイルがあるディレクトリ構造があります。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ディレクトリ内の標準フォルダからファイルを処理する方法と同様のディレクトリを処理するより洗練された方法があるかどうかを知りたいです。

7
Web evangelist

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           

さらに読む: https://docs.chef.io/resource_remote_directory.html

15
Tim Brandes

クックブックに含まれているすべてのファイルをコピーする「良い/クリーンな」方法はありません。

複数のファイルを作成するために、単純な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バージョンがいくつかあるためオプションです。

2
StephenKing

cookbook_fileがチェックサムを使用して既存のファイルと新しいファイルを比較するのとは異なり、それぞれに一意のcookbook_fileリソースが必要です。

1
jamesgaddum

私は同様の問題に直面しており、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"
]

しかし、これは私にはあまり役に立ちません

0
theist