minimal_pipeline 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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