terrafying-components 1.13.3 → 1.13.4

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: 32a2bad05156dae855836601faec56b249714a39ce3e10fd6a2e8a7e243c2938
4
- data.tar.gz: 3e4cca4a730906e7c8c05e61a51f0ac1c48d9aefad179e1679b266100c333310
3
+ metadata.gz: 64976275b2690bf56d75eec4fcbe4be079a280c9b715b8fa4ea10ec18d4db4f9
4
+ data.tar.gz: c0a422c6ae06013e0320463638b0cf5753e0e78827a7037e1c7d8def82010441
5
5
  SHA512:
6
- metadata.gz: ec61a270a02495adf1be9bbfc8fc377aa950158c3b2c408b745b77afffd7053970424547d51696478efe1adf31fe70648a2d322fd60f6e9453b0b3b2129aa81e
7
- data.tar.gz: 3cf064638697581bf1c0ee95f8e79003fe29dc716c9e86978e653a13b90e83ef7ca3e774ac4d88c79ce455a880a9da11eab30e70200bf637f04a92c71fefc465
6
+ metadata.gz: beb5d7ddc9200c57836111d8326f83aa9e804ab988342f6ee5f72d58466a0e3a8ede5266a2b93196de9f4bc93d1b8ecef999940c9796d6818c474d157c501df0
7
+ data.tar.gz: 641c76f7d9180bf326628ee14ee2e2f44388fbfde0cf03b35cead6ffc283c947ef1d200cd981be109813781118402ba3474a8a048e0c7e7cf5b2b29e9e2d2e69
@@ -35,14 +35,33 @@ module Terrafying
35
35
  "arn:aws:s3:::#{@bucket}#{key}"
36
36
  end
37
37
 
38
- def object_url(name, type)
39
- name = object_name(name, type)
40
- key = output_of(:aws_s3_bucket_object, name, :key).to_s
38
+ def object_url(name, type, version: '')
39
+ key = object_key(name, type, version)
41
40
 
42
41
  File.join('s3://', "#{@bucket}#{key}")
43
42
  end
44
43
 
45
- def reference_keypair(ctx, name)
44
+ def find_keypair(name)
45
+ reference_keypair(
46
+ nil, name,
47
+ key_version: aws.s3_object(@bucket, object_key(name, :key, 'latest')[1..-1]),
48
+ cert_version: aws.s3_object(@bucket, object_key(name, :cert, 'latest')[1..-1]),
49
+ )
50
+ end
51
+
52
+ def reference_keypair(ctx, name, key_version:, cert_version:)
53
+ resources = []
54
+
55
+ if ctx != nil
56
+ resources += [
57
+ "aws_s3_bucket_object.#{object_name(name, :key)}",
58
+ "aws_s3_bucket_object.#{object_name(name, :cert)}"
59
+ ]
60
+ if ctx == self
61
+ resources << "aws_s3_bucket_object.#{object_name(@name, :cert)}"
62
+ end
63
+ end
64
+
46
65
  ref = {
47
66
  name: name,
48
67
  ca: self,
@@ -51,13 +70,10 @@ module Terrafying
51
70
  key: File.join('/etc/ssl', @name, name, 'key')
52
71
  },
53
72
  source: {
54
- cert: object_url(name, :cert),
55
- key: object_url(name, :key)
73
+ cert: object_url(name, :cert, version: cert_version),
74
+ key: object_url(name, :key, version: key_version)
56
75
  },
57
- resources: [
58
- "aws_s3_bucket_object.#{object_name(name, :key)}",
59
- "aws_s3_bucket_object.#{object_name(name, :cert)}"
60
- ],
76
+ resources: resources,
61
77
  iam_statement: {
62
78
  Effect: 'Allow',
63
79
  Action: [
@@ -72,10 +88,6 @@ module Terrafying
72
88
  }
73
89
  }
74
90
 
75
- if self == ctx
76
- ref[:resources] << "aws_s3_bucket_object.#{object_name(@name, :cert)}"
77
- end
78
-
79
91
  ref
80
92
  end
81
93
 
@@ -13,6 +13,9 @@ module Terrafying
13
13
  def self.create(name, bucket, options = {})
14
14
  LetsEncrypt.new.create name, bucket, options
15
15
  end
16
+ def self.find(name, bucket, options = {})
17
+ LetsEncrypt.new.find name, bucket, options
18
+ end
16
19
 
17
20
  def initialize
18
21
  super
@@ -80,6 +83,43 @@ module Terrafying
80
83
 
81
84
  @source = object_url(@name, :cert)
82
85
 
86
+ resource :aws_s3_bucket_object, "#{@name}-metadata",
87
+ bucket: @bucket,
88
+ key: File.join('', @prefix, @name, '.metadata'),
89
+ content: {
90
+ provider: options[:provider].to_s,
91
+ public_certificate: options[:public_certificate],
92
+ use_external_dns: options[:use_external_dns],
93
+ }.to_json
94
+
95
+ self
96
+ end
97
+
98
+ def find(name, bucket, prefix: "")
99
+ @name = name
100
+ @bucket = bucket
101
+ @prefix = prefix
102
+
103
+ # load the rest of the config from an s3 metadata file
104
+ metadata_obj = aws.s3_object(@bucket, [@prefix, @name, '.metadata'].compact.reject(&:empty?).join('/'))
105
+ metadata = JSON.parse(metadata_obj, symbolize_names: true)
106
+
107
+ @acme_provider = @acme_providers[metadata[:provider].to_sym]
108
+ @use_external_dns = metadata[:use_external_dns]
109
+ @ca_cert_acl = metadata[:public_certificate] ? 'public-read' : 'private'
110
+
111
+ account_key_obj = data :aws_s3_bucket_object, "#{@name}-account",
112
+ bucket: @bucket,
113
+ key: File.join('', @prefix, @name, 'account.key')
114
+
115
+ @account_key = account_key_obj["body"]
116
+
117
+ open(@acme_provider[:ca_cert], 'rb') do |cert|
118
+ @ca_cert = cert.read
119
+ end
120
+
121
+ @source = object_url(@name, :cert)
122
+
83
123
  self
84
124
  end
85
125
 
@@ -128,17 +168,27 @@ module Terrafying
128
168
  certificate_request_pem: output_of(:tls_cert_request, key_ident, :cert_request_pem)
129
169
  }.merge(cert_options)
130
170
 
171
+ key_version = "${sha256(tls_private_key.#{key_ident}.private_key_pem)}"
131
172
  ctx.resource :aws_s3_bucket_object, "#{key_ident}-key",
132
173
  bucket: @bucket,
133
- key: File.join('', @prefix, @name, name, "${sha256(tls_private_key.#{key_ident}.private_key_pem)}", 'key'),
174
+ key: object_key(name, :key, key_version),
134
175
  content: output_of(:tls_private_key, key_ident, :private_key_pem)
176
+ ctx.resource :aws_s3_bucket_object, "#{key_ident}-key-latest",
177
+ bucket: @bucket,
178
+ key: object_key(name, :key, 'latest'),
179
+ content: key_version
135
180
 
181
+ cert_version = "${sha256(acme_certificate.#{key_ident}.certificate_pem)}"
136
182
  ctx.resource :aws_s3_bucket_object, "#{key_ident}-cert",
137
183
  bucket: @bucket,
138
- key: File.join('', @prefix, @name, name, "${sha256(acme_certificate.#{key_ident}.certificate_pem)}", 'cert'),
184
+ key: object_key(name, :cert, cert_version),
139
185
  content: output_of(:acme_certificate, key_ident, :certificate_pem).to_s + @ca_cert
186
+ ctx.resource :aws_s3_bucket_object, "#{key_ident}-cert-latest",
187
+ bucket: @bucket,
188
+ key: object_key(name, :cert, 'latest'),
189
+ content: cert_version
140
190
 
141
- reference_keypair(ctx, name)
191
+ reference_keypair(ctx, name, key_version: key_version, cert_version: cert_version)
142
192
  end
143
193
  end
144
194
  end
@@ -158,17 +158,27 @@ module Terrafying
158
158
  validity_period_hours: options[:validity_in_hours],
159
159
  allowed_uses: options[:allowed_uses]
160
160
 
161
+ key_version = "${sha256(tls_private_key.#{key_ident}.private_key_pem)}"
161
162
  ctx.resource :aws_s3_bucket_object, object_name(name, :key),
162
163
  bucket: @bucket,
163
- key: object_key(name, :key, "${sha256(tls_private_key.#{key_ident}.private_key_pem)}"),
164
+ key: object_key(name, :key, key_version),
164
165
  content: output_of(:tls_private_key, key_ident, :private_key_pem)
166
+ ctx.resource :aws_s3_bucket_object, "#{key_ident}-key-latest",
167
+ bucket: @bucket,
168
+ key: object_key(name, :key, 'latest'),
169
+ content: key_version
165
170
 
171
+ cert_version = "${sha256(tls_locally_signed_cert.#{key_ident}.cert_pem)}"
166
172
  ctx.resource :aws_s3_bucket_object, object_name(name, :cert),
167
173
  bucket: @bucket,
168
- key: object_key(name, :cert, "${sha256(tls_locally_signed_cert.#{key_ident}.cert_pem)}"),
174
+ key: object_key(name, :cert, cert_version),
169
175
  content: output_of(:tls_locally_signed_cert, key_ident, :cert_pem)
176
+ ctx.resource :aws_s3_bucket_object, "#{key_ident}-cert-latest",
177
+ bucket: @bucket,
178
+ key: object_key(name, :cert, 'latest'),
179
+ content: cert_version
170
180
 
171
- reference_keypair(ctx, name)
181
+ reference_keypair(ctx, name, key_version: key_version, cert_version: cert_version)
172
182
  end
173
183
  end
174
184
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Terrafying
4
4
  module Components
5
- VERSION = '1.13.3'
5
+ VERSION = '1.13.4'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: terrafying-components
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.3
4
+ version: 1.13.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - uSwitch Limited
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-15 00:00:00.000000000 Z
11
+ date: 2019-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake