aws_tar_extract.rb
1.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#
# Author:: Earth U (<sysadmin@chromedia.com>)
# Cookbook Name:: backup-file2s3
# Definition :: aws_tar_extract
#
# Copyright 2016, Chromedia Far East, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Gets a tarball from AWS S3, then unpack it into a directory.
# Parameters (all mandatory):
# :name | :file => The name of the backup tarball, without the extension
# :region => AWS region
# :bucket => AWS bucket
# :target_dir => Where the tarball is to be unpacked. If not
# exists, it will be created
# :creates => A file path used for idempotency
define :aws_tar_extract,
:file => nil, # default is params[:name]
:region => 'us-east-1',
:bucket => nil,
:target_dir => nil,
:creates => nil do
file = params[:file] || params[:name]
tmp_dir = ::File.join(Chef::Config[:file_cache_path], 'backups')
filetgz = "#{tmp_dir}/#{file}.tar.gz"
include_recipe 'awscli'
include_recipe 'tar'
[ tmp_dir, params[:target_dir] ].each do |ndir|
directory ndir do
recursive true
end
end
unless ::File.exist?(params[:creates])
awscli_s3_file filetgz do
region params[:region]
bucket params[:bucket]
key "#{file}.tar.gz"
end
tar_extract filetgz do
action :extract_local
target_dir params[:target_dir]
creates params[:creates]
end
end
end