module Terrafying::Components::CA

Public Instance Methods

<=>(other) click to toggle source
# File lib/terrafying/components/ca.rb, line 94
def <=>(other)
  @name <=> other.name
end
ca?(name) click to toggle source
# File lib/terrafying/components/ca.rb, line 10
def ca?(name)
  name == @name
end
create_keypair(name, options = {}) click to toggle source
# File lib/terrafying/components/ca.rb, line 6
def create_keypair(name, options = {})
  create_keypair_in(self, name, options)
end
find_keypair(name) click to toggle source
# File lib/terrafying/components/ca.rb, line 44
def find_keypair(name)
  reference_keypair(
    nil, name,
    key_version: aws.s3_object(@bucket, object_key(name, :key, 'latest')[1..-1]),
    cert_version: aws.s3_object(@bucket, object_key(name, :cert, 'latest')[1..-1]),
  )
end
object_arn(name, type, version = '*') click to toggle source
# File lib/terrafying/components/ca.rb, line 32
def object_arn(name, type, version = '*')
  key = object_key(name, type, version)

  "arn:aws:s3:::#{@bucket}#{key}"
end
object_ident(name) click to toggle source
# File lib/terrafying/components/ca.rb, line 14
def object_ident(name)
  (ca? name) ? @name : "#{@name}-#{tf_safe(name)}"
end
object_key(name, type, version = '') click to toggle source
# File lib/terrafying/components/ca.rb, line 22
def object_key(name, type, version = '')
  if ca? name
    File.join('', @prefix, @name, "ca.#{type}")
  else
    raise 'A non-ca object must have a version' if version.empty?

    File.join('', @prefix, @name, name, version, type.to_s)
  end
end
object_name(name, type) click to toggle source
# File lib/terrafying/components/ca.rb, line 18
def object_name(name, type)
  "#{object_ident(name)}-#{type}"
end
object_url(name, type, version: '') click to toggle source
# File lib/terrafying/components/ca.rb, line 38
def object_url(name, type, version: '')
  key = object_key(name, type, version)

  File.join('s3://', "#{@bucket}#{key}")
end
reference_keypair(ctx, name, key_version:, cert_version:) click to toggle source
# File lib/terrafying/components/ca.rb, line 52
def reference_keypair(ctx, name, key_version:, cert_version:)
  resources = []

  if ctx != nil
    resources += [
      "aws_s3_bucket_object.#{object_name(name, :key)}",
      "aws_s3_bucket_object.#{object_name(name, :cert)}"
    ]
    if ctx == self
      resources << "aws_s3_bucket_object.#{object_name(@name, :cert)}"
    end
  end

  ref = {
    name: name,
    ca: self,
    path: {
      cert: File.join('/etc/ssl', @name, name, 'cert'),
      key: File.join('/etc/ssl', @name, name, 'key')
    },
    source: {
      cert: object_url(name, :cert, version: cert_version),
      key: object_url(name, :key, version: key_version)
    },
    resources: resources,
    iam_statement: {
      Effect: 'Allow',
      Action: [
        's3:GetObjectAcl',
        's3:GetObject'
      ],
      Resource: [
        object_arn(@name, :cert),
        object_arn(name, :cert),
        object_arn(name, :key)
      ]
    }
  }

  ref
end