aws_tar_extract.rb 1.88 KB
#
# 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