minimal_pipeline 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6eaf266f815ca727fe704016dc2ad619545fbca0b3cb774aab3db46c20ca8dd7
4
- data.tar.gz: 1e8a90f058f182b34ccb92f5145b3b5b71e5cae8cb7358c7fe5c9ccc8c84ad43
3
+ metadata.gz: e76400b44e1460894c1aae21f2867d60117808e7153b8e161eaafb628baa0020
4
+ data.tar.gz: a3a6c7f83608687e40abd6ac5d8a8f7b25d8f62c01486c101f18203db864b6b4
5
5
  SHA512:
6
- metadata.gz: '086cb9195512feeffbcac3a404ada0ff6c7e5e13c8ae4cdfb2e47c67ea7f2350d81b8323c610e769f11e39460bccc8d3ef403659b97137b11b5b8bf29c86c084'
7
- data.tar.gz: 388961e2667f2395d563aac94459c987451e5ca8c380b37b6100b01ac012f8e629a62afda359a65803132f0a7c4a1bcb0b156f50c511893cd32b3ca44d4c5afb
6
+ metadata.gz: 5e047416e23ad0e5971a63128e79c409a738130c80150c0fecb8f38177a1fb18346045a0d3753c3c836d7f81d16a1a1cc8541ff9e1ccb8f15302acb2ca4973fe
7
+ data.tar.gz: 20c2103990e6f3294b12d0443ed5bc664c430d0c60d9aedcc5c19e5511745c9b4f7ab2c81551ba3271272f256c90f1d80dc15722a0f9ea27c39ac8a5bf7b0bb7
@@ -49,6 +49,7 @@ class MinimalPipeline
49
49
  @client = Aws::CloudFormation::Client.new(region: region)
50
50
  @wait_max_attempts = wait_max_attempts
51
51
  @wait_delay = wait_delay
52
+ @outputs = {}
52
53
  end
53
54
 
54
55
  # Converts a parameter Hash into a CloudFormation friendly structure
@@ -69,16 +70,29 @@ class MinimalPipeline
69
70
  # @param output [String] The name of the output to fetch the value of
70
71
  # @return [String] The value of the output for the CloudFormation stack
71
72
  def stack_output(stack, output)
72
- resp = @client.describe_stacks(stack_name: stack)
73
+ outputs = stack_outputs(stack)
74
+ message = "#{stack.upcase} stack does not have a(n) '#{output}' output!"
75
+ raise message unless outputs.key?(output)
73
76
 
74
- raise "#{stack.upcase} stack does not exist!" if resp.stacks.empty?
77
+ outputs[output]
78
+ end
79
+
80
+ # Retrieves all CloudFormation stack outputs
81
+ #
82
+ # @param stack [String] The name of the CloudFormation stack
83
+ # @return [Hash] Key value pairs of stack outputs
84
+ def stack_outputs(stack)
85
+ response = @client.describe_stacks(stack_name: stack)
86
+ raise "#{stack.upcase} stack does not exist!" if response.stacks.empty?
75
87
 
76
- resp.stacks.first.outputs.each do |stack_output|
77
- zero_output = stack_output.output_key.casecmp(output).zero?
78
- return stack_output.output_value if zero_output
88
+ @outputs[stack] ||= {}
89
+ if @outputs[stack].empty?
90
+ response.stacks.first.outputs.each do |output|
91
+ @outputs[stack][output.output_key] = output.output_value
92
+ end
79
93
  end
80
94
 
81
- raise "#{stack.upcase} stack does not have a(n) '#{output}' output!"
95
+ @outputs[stack]
82
96
  end
83
97
 
84
98
  # Creates or Updates a CloudFormation stack. Checks to see if the stack
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zip'
4
+ require 'aws-sdk'
5
+
6
+ class MinimalPipeline
7
+ # Here is an example of how to use this class to prepare zipfiles for lambda.
8
+ #
9
+ # ```
10
+ # lambda = MinimalPipeline::Lambda.new
11
+ # s3 = MinimalPipeline::S3.new
12
+ #
13
+ # # Prepare zip file
14
+ # lambda.prepare_zipfile('foo.py', 'lambda.zip')
15
+ #
16
+ # # Upload file to S3
17
+ # s3.upload('bucket_name', 'lambda.zip')
18
+ # ```
19
+ class Lambda
20
+ # Zips up lambda code in preparation for upload
21
+ #
22
+ # @param input [String] The path to a file or directory to zip up
23
+ # @param zipefile_name [String] The path to the resulting zip file
24
+ def prepare_zipfile(input, zipfile_name)
25
+ Zip::File.open(zipfile_name, Zip::File::CREATE) do |zipfile|
26
+ if File.directory?(zipfile)
27
+ input_filenames = Dir.entries(input) - %w[. ..]
28
+ input_filenames.each do |filename|
29
+ zipfile.add(filename, File.join(input, filename))
30
+ end
31
+ else
32
+ zipfile.add(File.basename(input), input)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aws-sdk'
4
+
5
+ class MinimalPipeline
6
+ # Here is an example of how to use this class to interact with S3.
7
+ #
8
+ # ```
9
+ # s3 = MinimalPipeline::S3.new
10
+ #
11
+ # # Upload file
12
+ # s3.upload('bucket_name', 'foo.txt')
13
+ #
14
+ # # Download file
15
+ # s3.download('bucket_name', 'foo.txt')
16
+ # ```
17
+ #
18
+ # You will need the following environment variables to be present:
19
+ # * `AWS_REGION` or `region`
20
+ class S3
21
+ # Initializes a `S3` client
22
+ # Requires environment variables `AWS_REGION` or `region` to be set.
23
+ def initialize
24
+ raise 'You must set env variable AWS_REGION or region.' \
25
+ if ENV['AWS_REGION'].nil? && ENV['region'].nil?
26
+
27
+ region = ENV['AWS_REGION'] || ENV['region']
28
+ @s3 = Aws::S3::Resource.new(region: region)
29
+ end
30
+
31
+ # Downloads a file from S3 to local disk
32
+ #
33
+ # @param bucket_name [String] The name of S3 bucket to download from
34
+ # @param file [String] The path to the file on disk to download to
35
+ # @param key [String] The name of the key of the object in S3
36
+ # This defaults to the file param
37
+ def download(bucket_name, file, key = nil)
38
+ key ||= file
39
+ object = @s3.bucket(bucket_name, key)
40
+ object.upload_file(file)
41
+ end
42
+
43
+ # Uploads a file from local disk to S3
44
+ #
45
+ # @param bucket_name [String] The name of S3 bucket to upload to
46
+ # @param file [String] The path to the file on disk to be uploaded
47
+ # @param key [String] The name of the key to store the file as in the bucket
48
+ # This defaults to the file param
49
+ def upload(bucket_name, file, key = nil)
50
+ key ||= file
51
+ object = @s3.bucket(bucket_name, key)
52
+ object.download_file(file)
53
+ end
54
+ end
55
+ end
@@ -14,5 +14,7 @@ class MinimalPipeline
14
14
  autoload(:Crossing, 'minimal_pipeline/crossing')
15
15
  autoload(:Docker, 'minimal_pipeline/docker')
16
16
  autoload(:Keystore, 'minimal_pipeline/keystore')
17
+ autoload(:Lambda, 'minimal_pipeline/lambda')
17
18
  autoload(:Packer, 'minimal_pipeline/packer')
19
+ autoload(:S3, 'minimal_pipeline/s3')
18
20
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minimal_pipeline
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.14
4
+ version: 0.0.15
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mayowa Aladeojebi
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-10-18 00:00:00.000000000 Z
12
+ date: 2018-10-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: aws-sdk
@@ -82,33 +82,19 @@ dependencies:
82
82
  - !ruby/object:Gem::Version
83
83
  version: 1.6.3
84
84
  - !ruby/object:Gem::Dependency
85
- name: rake
86
- requirement: !ruby/object:Gem::Requirement
87
- requirements:
88
- - - ">="
89
- - !ruby/object:Gem::Version
90
- version: '0'
91
- type: :runtime
92
- prerelease: false
93
- version_requirements: !ruby/object:Gem::Requirement
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- version: '0'
98
- - !ruby/object:Gem::Dependency
99
- name: rubocop
85
+ name: zip
100
86
  requirement: !ruby/object:Gem::Requirement
101
87
  requirements:
102
88
  - - '='
103
89
  - !ruby/object:Gem::Version
104
- version: 0.55.0
90
+ version: 2.0.2
105
91
  type: :runtime
106
92
  prerelease: false
107
93
  version_requirements: !ruby/object:Gem::Requirement
108
94
  requirements:
109
95
  - - '='
110
96
  - !ruby/object:Gem::Version
111
- version: 0.55.0
97
+ version: 2.0.2
112
98
  description: Helper gem to orchestrate pipeline tasks
113
99
  email:
114
100
  - mayowa.aladeojebi@stelligent.com
@@ -122,7 +108,9 @@ files:
122
108
  - lib/minimal_pipeline/crossing.rb
123
109
  - lib/minimal_pipeline/docker.rb
124
110
  - lib/minimal_pipeline/keystore.rb
111
+ - lib/minimal_pipeline/lambda.rb
125
112
  - lib/minimal_pipeline/packer.rb
113
+ - lib/minimal_pipeline/s3.rb
126
114
  homepage: https://github.com/stelligent/minimal-pipeline-gem
127
115
  licenses:
128
116
  - 0BSD