Azuretechie
Azuretechie

Reputation: 103

How to unzip tar.Z file through CHEF cookbooks

I'm using a Chef hosted server, a workstation and nodes and have run cookbooks on the nodes to install Java, update hosts file. I'm not able to find a reference in sites to unzip tar files. Could you please help me out here or direct to some site which has the information.

Thanks in advance.

Upvotes: 9

Views: 25516

Answers (4)

kalyani chaudhari
kalyani chaudhari

Reputation: 7849

Below chef resource works absolutely fine

execute "Extract tar file" do
  command "tar -xzvf #{Chef::Config['file_cache_path']}/temp.tgz -C #{Chef::Config['file_cache_path']}/temp"
  action :run
end

'temp.tgz' archive file will get extracted into 'temp' dir

path for '#{Chef::Config['file_cache_path']}' would be like /root/.chef/local-mode-cache/cache/ on linux distributions.

Upvotes: 0

Ravi Teja
Ravi Teja

Reputation: 11

Firstly the package 'tar' needs to be installed and then we can use chef's execute resource to run the tar command. You could use the following snippet.

package 'tar'
execute "extract tar" do
 command 'tar -xf #{tarPath} -C #{installPath}'
end 

Upvotes: 0

Draco Ater
Draco Ater

Reputation: 21226

Since Chef Client 15.0 there is a archive_file resource built-in. It supports tar, gzip, bzip, and zip.

archive_file 'Precompiled.zip' do
  path '/tmp/Precompiled.zip'
  destination '/srv/files'
end

Upvotes: 3

Arthur Maltson
Arthur Maltson

Reputation: 6120

There's actually nothing built into Chef for doing extracting a tar file. You have two options, either you can use the execute resource to shell out and untar or use some community cookbook like the tar cookbook that have custom resources defined for extracting tars.

In the execute resource example it might look something like

execute 'extract_some_tar' do
  command 'tar xzvf somefile.tar.gz'
  cwd '/directory/of/tar/here'
  not_if { File.exists?("/file/contained/in/tar/here") }
end

Whereas the third party tar cookbook definitely reads nicer

tar_package 'http://pgfoundry.org/frs/download.php/1446/pgpool-3.4.1.tar.gz' do
  prefix '/usr/local'
  creates '/usr/local/bin/pgpool'
end

Upvotes: 16

Related Questions