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 =

Default project configuration file name.

'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.



27
28
29
30
31
# File 'lib/lambda/microvms/project.rb', line 27

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.



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

def config
  @config
end

#config_pathObject (readonly)

Returns the value of attribute config_path.



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

def config_path
  @config_path
end

#rootObject (readonly)

Returns the value of attribute root.



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

def root
  @root
end

Class Method Details

.load(path = DEFAULT_CONFIG) ⇒ Project

Load a project configuration from disk.

Parameters:

  • path (String) (defaults to: DEFAULT_CONFIG)

    path to a YAML configuration file

Returns:



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

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_pathString

Absolute path for the packaged artifact.

Returns:

  • (String)


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

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

#build_contextString

Absolute path to the build context.

Returns:

  • (String)


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

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

#create_image_params(artifact_uri:) ⇒ Hash

Build parameters for image creation with the artifact URI injected.

Parameters:

  • artifact_uri (String)

    uploaded artifact URI

Returns:

  • (Hash)

    SDK-style create image parameters



104
105
106
107
108
109
110
111
# File 'lib/lambda/microvms/project.rb', line 104

def create_image_params(artifact_uri:)
  params = hash_config('image.create')
  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

#dockerfileString

Absolute path to the Dockerfile.

Returns:

  • (String)


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

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

#image_arnString?

Existing MicroVM image ARN.

Returns:

  • (String, nil)


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

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

#image_nameString

Name used when creating a MicroVM image.

Returns:

  • (String)


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

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

#lifecycle_afterSymbol

Cleanup policy used after a session block.

Returns:

  • (Symbol)


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

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

#nameString

Project name.

Returns:

  • (String)


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

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

#payloadHash

Runtime payload configured for MicroVM runs.

Returns:

  • (Hash)


96
97
98
# File 'lib/lambda/microvms/project.rb', line 96

def payload
  hash_config('runtime.payload')
end

#profileString?

AWS profile from configuration or environment.

Returns:

  • (String, nil)


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

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

#regionString?

AWS region from configuration or environment.

Returns:

  • (String, nil)


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

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

#require!(field, value) ⇒ Object

Return a required value or raise a configuration error.

Parameters:

  • field (String)

    configuration field name used in the error

  • value (Object)

    value to validate

Returns:

  • (Object)

    the validated value

Raises:



143
144
145
146
147
# File 'lib/lambda/microvms/project.rb', line 143

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

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

#role_arnString?

IAM role ARN used when running MicroVMs.

Returns:

  • (String, nil)


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

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

#run_paramsHash

Build parameters for running a MicroVM.

Returns:

  • (Hash)

    SDK-style run parameters



116
117
118
119
120
121
122
# File 'lib/lambda/microvms/project.rb', line 116

def run_params
  params = stringify_keys(hash_config('runtime.run'))
  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_bucketString?

S3 bucket used for deployment artifacts.

Returns:

  • (String, nil)


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

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

#s3_prefixString

S3 key prefix used for deployment artifacts.

Returns:

  • (String)


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

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

#validate!self

Validate project configuration sections used by deployment commands.

Returns:

  • (self)

Raises:



128
129
130
131
132
133
134
135
# File 'lib/lambda/microvms/project.rb', line 128

def validate!
  validate_hash!
  validate_lifecycle_after!
  hash_config('image.create')
  hash_config('runtime.payload')
  hash_config('runtime.run')
  self
end