Class: Lambda::MicroVMs::Project

Inherits:
Object
  • Object
show all
Defined in:
lib/lambda/microvms/project.rb

Overview

Reads lambda-microvms project configuration from microvm.yml.

Constant Summary collapse

DEFAULT_CONFIG =
'microvm.yml'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root:, config_path:, config:) ⇒ Project

Returns a new instance of Project.



22
23
24
25
26
# File 'lib/lambda/microvms/project.rb', line 22

def initialize(root:, config_path:, config:)
  @root = root
  @config_path = config_path
  @config = stringify_keys(config)
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



13
14
15
# File 'lib/lambda/microvms/project.rb', line 13

def config
  @config
end

#config_pathObject (readonly)

Returns the value of attribute config_path.



13
14
15
# File 'lib/lambda/microvms/project.rb', line 13

def config_path
  @config_path
end

#rootObject (readonly)

Returns the value of attribute root.



13
14
15
# File 'lib/lambda/microvms/project.rb', line 13

def root
  @root
end

Class Method Details

.load(path = DEFAULT_CONFIG) ⇒ Object



15
16
17
18
19
20
# File 'lib/lambda/microvms/project.rb', line 15

def self.load(path = DEFAULT_CONFIG)
  config_path = File.expand_path(path)
  root = File.dirname(config_path)
  new(root: root, config_path: config_path,
      config: YAML.safe_load_file(config_path, permitted_classes: [Symbol], aliases: true) || {})
end

Instance Method Details

#artifact_pathObject



44
# File 'lib/lambda/microvms/project.rb', line 44

def artifact_path = File.expand_path(fetch('build.artifact', default: "tmp/#{name}-microvm.zip"), root)

#build_contextObject



42
# File 'lib/lambda/microvms/project.rb', line 42

def build_context = File.expand_path(fetch('build.context', default: '.'), root)

#create_image_params(artifact_uri:) ⇒ Object



56
57
58
59
60
61
62
63
# File 'lib/lambda/microvms/project.rb', line 56

def create_image_params(artifact_uri:)
  params = fetch('image.create', default: {}) || {}
  params = stringify_keys(params)
  symbolized = params.to_h { |key, value| [key.to_sym, value] }
  symbolized[:name] ||= image_name
  symbolized[:code_artifact] ||= artifact_uri
  symbolized
end

#dockerfileObject



40
# File 'lib/lambda/microvms/project.rb', line 40

def dockerfile = File.expand_path(fetch('build.dockerfile', default: 'Dockerfile'), root)

#image_arnObject



36
# File 'lib/lambda/microvms/project.rb', line 36

def image_arn = fetch('image_arn', 'image.arn', default: nil)

#image_nameObject



38
# File 'lib/lambda/microvms/project.rb', line 38

def image_name = fetch('image.name', default: name)

#lifecycle_afterObject



50
# File 'lib/lambda/microvms/project.rb', line 50

def lifecycle_after = fetch('runtime.after', default: 'suspend').to_sym

#nameObject



28
# File 'lib/lambda/microvms/project.rb', line 28

def name = fetch('name', default: File.basename(root))

#payloadObject



52
53
54
# File 'lib/lambda/microvms/project.rb', line 52

def payload
  fetch('runtime.payload', default: {}) || {}
end

#profileObject



32
# File 'lib/lambda/microvms/project.rb', line 32

def profile = fetch('profile', default: ENV.fetch('AWS_PROFILE', nil))

#regionObject



30
# File 'lib/lambda/microvms/project.rb', line 30

def region = fetch('region', default: ENV.fetch('AWS_REGION', nil))

#require!(field, value) ⇒ Object

Raises:



73
74
75
76
77
# File 'lib/lambda/microvms/project.rb', line 73

def require!(field, value)
  return value if value && value != ''

  raise ConfigurationError, "missing required project configuration: #{field}"
end

#role_arnObject



34
# File 'lib/lambda/microvms/project.rb', line 34

def role_arn = fetch('role_arn', 'role', default: nil)

#run_paramsObject



65
66
67
68
69
70
71
# File 'lib/lambda/microvms/project.rb', line 65

def run_params
  params = stringify_keys(fetch('runtime.run', default: {}) || {})
  symbolized = params.to_h { |key, value| [key.to_sym, value] }
  symbolized[:role_arn] ||= role_arn if role_arn
  symbolized[:payload] ||= payload unless payload.empty?
  symbolized
end

#s3_bucketObject



46
# File 'lib/lambda/microvms/project.rb', line 46

def s3_bucket = fetch('deployment.bucket', 's3.bucket', default: nil)

#s3_prefixObject



48
# File 'lib/lambda/microvms/project.rb', line 48

def s3_prefix = fetch('deployment.prefix', 's3.prefix', default: "lambda-microvms/#{name}")