Commit 32b629703f3007f641b273bb723502be3268802d
Committed by
Earth Ugat

1 parent
ec6c0fc7
Bump to v0.2.0
Showing
5 changed files
with
90 additions
and
2 deletions
@@ -2,6 +2,8 @@ | @@ -2,6 +2,8 @@ | ||
2 | 2 | ||
3 | Installs a script that backs up one or more directories into an S3 bucket. Also sets up the cronjob to regularly run said script. | 3 | Installs a script that backs up one or more directories into an S3 bucket. Also sets up the cronjob to regularly run said script. |
4 | 4 | ||
5 | +There is also a definition `aws_tar_extract` to recover those backup files and unpack them. | ||
6 | + | ||
5 | ## Supported Platforms | 7 | ## Supported Platforms |
6 | 8 | ||
7 | Ubuntu 14.04 | 9 | Ubuntu 14.04 |
@@ -61,6 +63,19 @@ Include `backup-file2s3` in your node's `run_list`: | @@ -61,6 +63,19 @@ Include `backup-file2s3` in your node's `run_list`: | ||
61 | } | 63 | } |
62 | ``` | 64 | ``` |
63 | 65 | ||
66 | +### aws_tar_extract | ||
67 | + | ||
68 | +The following example will get `mydir.tar.gz` from the provided S3 region and bucket and unpack it into the `/opt/src`. | ||
69 | + | ||
70 | +```ruby | ||
71 | +aws_tar_extract 'mydir' do | ||
72 | + region 'us-east-1' | ||
73 | + bucket 'my-bucket' | ||
74 | + target_dir '/opt/src' | ||
75 | + creates '/ops/src/mydir/index.html' | ||
76 | +end | ||
77 | +``` | ||
78 | + | ||
64 | ## License and Authors | 79 | ## License and Authors |
65 | 80 | ||
66 | Author:: Earth U. (<sysadmin@chromedia.com>) | 81 | Author:: Earth U. (<sysadmin@chromedia.com>) |
definitions/aws_tar_extract.rb
0 → 100644
1 | +# | ||
2 | +# Author:: Earth U (<sysadmin@chromedia.com>) | ||
3 | +# Cookbook Name:: backup-file2s3 | ||
4 | +# Definition :: aws_tar_extract | ||
5 | +# | ||
6 | +# Copyright 2016, Chromedia Far East, Inc. | ||
7 | +# | ||
8 | +# Licensed under the Apache License, Version 2.0 (the "License"); | ||
9 | +# you may not use this file except in compliance with the License. | ||
10 | +# You may obtain a copy of the License at | ||
11 | +# | ||
12 | +# http://www.apache.org/licenses/LICENSE-2.0 | ||
13 | +# | ||
14 | +# Unless required by applicable law or agreed to in writing, software | ||
15 | +# distributed under the License is distributed on an "AS IS" BASIS, | ||
16 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
17 | +# See the License for the specific language governing permissions and | ||
18 | +# limitations under the License. | ||
19 | +# | ||
20 | + | ||
21 | +# Gets a tarball from AWS S3, then unpack it into a directory. | ||
22 | +# Parameters (all mandatory): | ||
23 | +# :name | :file => The name of the backup tarball, without the extension | ||
24 | +# :region => AWS region | ||
25 | +# :bucket => AWS bucket | ||
26 | +# :target_dir => Where the tarball is to be unpacked. If not | ||
27 | +# exists, it will be created | ||
28 | +# :creates => A file path used for idempotency | ||
29 | + | ||
30 | +define :aws_tar_extract, | ||
31 | + :file => nil, # default is params[:name] | ||
32 | + :region => 'us-east-1', | ||
33 | + :bucket => nil, | ||
34 | + :target_dir => nil, | ||
35 | + :creates => nil do | ||
36 | + file = params[:file] || params[:name] | ||
37 | + | ||
38 | + tmp_dir = ::File.join(Chef::Config[:file_cache_path], 'backups') | ||
39 | + filetgz = "#{tmp_dir}/#{file}.tar.gz" | ||
40 | + | ||
41 | + include_recipe 'awscli' | ||
42 | + include_recipe 'tar' | ||
43 | + | ||
44 | + [ tmp_dir, params[:target_dir] ].each do |ndir| | ||
45 | + directory ndir do | ||
46 | + recursive true | ||
47 | + end | ||
48 | + end | ||
49 | + | ||
50 | + unless ::File.exist?(params[:creates]) | ||
51 | + awscli_s3_file filetgz do | ||
52 | + region params[:region] | ||
53 | + bucket params[:bucket] | ||
54 | + key "#{file}.tar.gz" | ||
55 | + end | ||
56 | + | ||
57 | + tar_extract filetgz do | ||
58 | + action :extract_local | ||
59 | + target_dir params[:target_dir] | ||
60 | + creates params[:creates] | ||
61 | + end | ||
62 | + end | ||
63 | +end |
@@ -4,9 +4,10 @@ maintainer_email 'sysadmin@chromedia.com' | @@ -4,9 +4,10 @@ maintainer_email 'sysadmin@chromedia.com' | ||
4 | license 'Apache License' | 4 | license 'Apache License' |
5 | description 'Creates a script to backup directories into an S3 bucket.' | 5 | description 'Creates a script to backup directories into an S3 bucket.' |
6 | long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) | 6 | long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) |
7 | -version '0.1.0' | 7 | +version '0.2.0' |
8 | 8 | ||
9 | depends 'awscli', '~> 1.0.1' | 9 | depends 'awscli', '~> 1.0.1' |
10 | depends 'cron', '~> 1.7.4' | 10 | depends 'cron', '~> 1.7.4' |
11 | +depends 'tar', '~> 0.7.0' | ||
11 | 12 | ||
12 | supports 'ubuntu', '>= 14.04' | 13 | supports 'ubuntu', '>= 14.04' |
@@ -6,6 +6,10 @@ | @@ -6,6 +6,10 @@ | ||
6 | 6 | ||
7 | set -e | 7 | set -e |
8 | 8 | ||
9 | +suffix=.backup_file_to_s3 | ||
10 | +[ -f /tmp/*"$suffix" ] && exit 200 | ||
11 | +tmp_file=$( mktemp --suffix "$suffix" ) | ||
12 | + | ||
9 | log_dir=<%= @log_dir %> | 13 | log_dir=<%= @log_dir %> |
10 | if [[ ! -d "$log_dir" ]] ; then | 14 | if [[ ! -d "$log_dir" ]] ; then |
11 | mkdir -p "$log_dir" | 15 | mkdir -p "$log_dir" |
@@ -98,8 +102,9 @@ for dirx in "${tar_dirs[@]}" ; do | @@ -98,8 +102,9 @@ for dirx in "${tar_dirs[@]}" ; do | ||
98 | tar_dir "$dirx" | 102 | tar_dir "$dirx" |
99 | upload_to_s3 "$dirx" | 103 | upload_to_s3 "$dirx" |
100 | else | 104 | else |
101 | - echo "$(date) : WARNING : Directory ${dirx} does not exist" | 105 | + echo "$(date) : WARNING : Directory ${dirx} does not exist. Skipping." |
102 | fi | 106 | fi |
103 | done | 107 | done |
104 | 108 | ||
109 | +rm "$tmp_file" | ||
105 | echo "$(date) : Done" | 110 | echo "$(date) : Done" |