aws_docker_utils 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,31 @@
1
+ require "./utils"
2
+ require "./docker_compose/client"
3
+ require "./s3/client"
4
+
5
+ module Collectors
6
+ class ToS3
7
+
8
+ def initialize(opts={})
9
+ @bucket_name = opts[:bucket_name]
10
+ @db_name = opts[:db_name]
11
+ @task_name = opts[:task] || "file"
12
+ @container_name = opts[:container_name]
13
+
14
+ @file_name = "#{`date '+#{@task_name}_%y-%m-%d_%H-%M'`.chop}.sql"
15
+ end
16
+
17
+ def push
18
+ DockerCompose::Client.new(container_name: @container_name, cmd: "pg_dump -U postgres -O #{@db_name} > #{@file_name}").exec
19
+ file_name = Utils.compress(@file_name)
20
+
21
+ s3 = S3::Client.new(file_name: file_name, bucket_name: @bucket_name)
22
+ if s3.put(file_name)
23
+ Utils.rm(file_name)
24
+ puts "Pushed to S3."
25
+ else
26
+ puts "Unable to do the job."
27
+ end
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,14 @@
1
+ module DockerCompose
2
+ class Client
3
+
4
+ def initialize(opts={})
5
+ @container_name = opts[:container_name]
6
+ @cmd = opts[:cmd]
7
+ end
8
+
9
+ def exec
10
+ `docker exec $(docker ps -q --filter 'name=#{@container_name}') #{@cmd}`
11
+ end
12
+
13
+ end
14
+ end
data/lib/s3/client.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'yaml'
2
+ require 'aws-sdk'
3
+
4
+ module S3
5
+ class Client
6
+
7
+ DEFAULT_REGION = "us-east-1"
8
+
9
+ def initialize(opts={})
10
+ @bucket_name = opts[:bucket_name]
11
+
12
+ config = YAML.load(File.read(File.join(File.dirname(__FILE__), "credentials.yml")))
13
+ client = Aws::S3::Client.new(
14
+ region: (config["region"] || DEFAULT_REGION),
15
+ access_key_id: config["access_key"],
16
+ secret_access_key: config["secret_key"]
17
+ )
18
+ @s3 = Aws::S3::Resource.new(client: client)
19
+ end
20
+
21
+ def put(file_path)
22
+ raise "Please set bucket name with constructor." if @bucket_name.nil?
23
+
24
+ bucket = create_bucket(@bucket_name)
25
+ obj = bucket.object(File.basename(file_path))
26
+
27
+ if obj.upload_file(file_path)
28
+ return true
29
+ else
30
+ puts "could not upload file #{@file_path} to S3."
31
+ end
32
+
33
+ false
34
+ end
35
+
36
+ private
37
+
38
+ def create_bucket(bucket_name)
39
+ bucket = @s3.bucket(bucket_name)
40
+ unless bucket.exists?
41
+ puts 'Bucket does not exist. Creating...'
42
+ bucket.create
43
+ puts 'Done.'
44
+ end
45
+ bucket
46
+ end
47
+
48
+ end
49
+ end
data/lib/utils.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Utils
2
+
3
+ extend self
4
+
5
+ def rm(file_path)
6
+ `rm -f #{file_path.gsub(".tar.gz", '')}`
7
+ `rm -f #{file_path}`
8
+ end
9
+
10
+ def compress(source)
11
+ `tar -pcvzf #{source}.tar.gz #{source}`
12
+ "#{source}.tar.gz"
13
+ end
14
+
15
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aws_docker_utils
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bogdan Kulbida
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-04-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: aws-sdk
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Utils package for working with AWS and Docker.
31
+ email: bkulbida@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - lib/s3/client.rb
37
+ - lib/utils.rb
38
+ - lib/collectors/to_s3.rb
39
+ - lib/docker_compose/client.rb
40
+ homepage: http://rubygems.org/gems/aws_docker_utils
41
+ licenses:
42
+ - MIT
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ! '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 1.8.23.2
62
+ signing_key:
63
+ specification_version: 3
64
+ summary: Utils package for working with AWS and Docker.
65
+ test_files: []