Jak przenosić / kopiować pliki lokalnie z Chef
Nie natknąłem się jeszcze na zasób Chef, który będzie kopiował / przenosił pliki lokalnie. Na przykład, Chcę pobrać Jetty hightide i rozpakować go. Po zakończeniu skopiuj wszystkie pliki do określonego folderu, w ten sposób:
# mv /var/tmp/jetty-hightide-7.4.5.v20110725/* /opt/jetty/
BTW, jettyhightide po rozpakowaniu daje Ci folder, a w nim znajdują się pozostałe pliki. Stąd {[1] } jest bezużyteczny, ponieważ utworzy katalog /opt/jetty/jetty-hightide-7.4.5.v20110725/*
, podczas gdy to, czego naprawdę chcę, to /opt/jetty/*
. Dlatego szukam lokalnej kopii / przeprowadzki zasób w kuchni.
8 answers
Jak skopiować pojedynczy plik
Pierwsza droga
Używam instrukcji file
do skopiowania pliku (sprawdzenie w czasie kompilacji)
file "/etc/init.d/someService" do
owner 'root'
group 'root'
mode 0755
content ::File.open("/home/someService").read
action :create
end
Tutaj:
-
"/etc/init.d/someService"
- plik docelowy, -
"/home/someService"
- plik źródłowy
Możesz także zawinąć ::File.open("/home/someService").read
w lazy
blok
...
lazy { ::File.open("/home/someService").read }
...
Druga droga
User remote_file
statement (run-time check)
remote_file "Copy service file" do
path "/etc/init.d/someService"
source "file:///home/someService"
owner 'root'
group 'root'
mode 0755
end
Third way
Możesz również użyć shell / batch
Dla-każdego katalogu
Dir[ "/some/directory/resources/**/*" ].each do |curr_path|
file "/some/target/dir/#{Pathname.new(curr_path).basename}" do
owner 'root'
group 'root'
mode 0755
content lazy { IO.read(curr_path, mode: 'rb').read }
action :create
end if File.file?(curr_path)
directory "/some/target/dir/#{File.dirname(curr_path)}" do
path curr_path
owner 'root'
group 'root'
mode 0755
action :create
end if File.directory?(curr_path)
end
To to tylko pomysł, ponieważ ścieżki podrzędne w tym przykładzie nie są obsługiwane poprawnie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-01 08:08:53
Mam go działa za pomocą bash
zasobów jak poniżej:
bash "install_jettyhightide" do
code <<-EOL
unzip /var/tmp/jetty-hightide-7.4.5.v20110725.zip -d /opt/jetty/
mv /opt/jetty/jetty-hightide-7.4.5.v20110725/* /opt/jetty/
cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty
update-rc.d jetty defaults
EOL
end
Ale naprawdę liczyłam na kucharza. kopiowanie / przenoszenie plików lokalnie byłoby najbardziej ogólnym zadaniem, jakie sysadmin będzie musiał wykonać.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 10:38:24
Wiem, że na to pytanie już udzielono odpowiedzi i omówiono, ale oto metoda, której używam podczas tworzenia plików.
- najpierw Dołącz plik w folderze pliki/domyślne książki kucharskiej
- Następnie w swoim przepisie użyj zasobu
cookbook_file
Np:
cookbook_file "/server/path/to/file.ext" do
source "filename.ext"
owner "root"
group "root"
mode 00600
action :create_if_missing
end
Z dokumentacji kucharza: http://docs.opscode.com/resource_cookbook_file.html
Zasób cookbook_file służy do przesyłania plików z podkatalog z files / katalog w książce kucharskiej do określonego ścieżka, która znajduje się na gospodarzu uruchomiony kucharz-klient lub kucharz-solo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-17 21:45:37
Możesz spróbować książki kucharskiej. Spowoduje to wyodrębnienie pliku, a następnie zauważysz zasób execute
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 17:32:03
Poza tym, jak to zrobiłeś i zaakceptowałeś, jeśli chcesz uruchomić tylko jedną komendę, tak jak początkowo prosiłeś (Kopiuj lub przenieś), a nie uruchomić blok poleceń, możesz to zrobić za pomocą zasobu execute:
execute "copy_core" do
command "mv /var/tmp/jetty-hightide-7.4.5.v20110725 /opt/jetty"
user "root"
end
Może to pomoże komuś spojrzeć na to w przyszłości.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-23 10:42:42
Użyłbym czegoś takiego jak poniżej (zauważ "binread"), ponieważ działałoby to dla plików tekstowych i binarnych. użycie "read" przyniosłoby zaskakujące rezultaty w przypadku plików binarnych, szczególnie jeśli używasz systemów unix i windows.
file destination do
content IO.binread(source)
action :create
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-20 06:50:04
Aby skopiować pliki lokalnie w CHEF
file "C:/Users/Administrator/chef/1.xml"
do ---> tar content lazy
{
IO.read("C:/Users/Administrator/chef-repo/cookbooks/2.xml")
} -->src
action :create
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-21 10:36:24
Jeśli twój przepis jest już powiązany z systemem Windows, możesz użyć wbudowanych skryptów PowerShell, takich jak:
# Copy files from "C:/foo/lib" to "C:/foo"
powershell_script "copy_lib" do
code <<-EOH
$ErrorActionPreference = "Stop"
Get-ChildItem -Path "C:/foo/lib" -File | Foreach-Object {
Copy-Item -Path $_.Fullname -Destination "C:/foo" -Force
}
EOH
end
# Delete "C:/foo/lib" folder
powershell_script "delete_lib" do
code <<-EOH
$ErrorActionPreference = "Stop"
Remove-Item -Path "C:/foo/lib" -Recurse
EOH
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 18:56:30