Class: Lambda::MicroVMs::Project
- Inherits:
-
Object
- Object
- Lambda::MicroVMs::Project
- 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
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#config_path ⇒ Object
readonly
Returns the value of attribute config_path.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
Class Method Summary collapse
-
.load(path = DEFAULT_CONFIG) ⇒ Project
Load a project configuration from disk.
Instance Method Summary collapse
-
#artifact_path ⇒ String
Absolute path for the packaged artifact.
-
#build_context ⇒ String
Absolute path to the build context.
-
#create_image_params(artifact_uri:) ⇒ Hash
Build parameters for image creation with the artifact URI injected.
-
#dockerfile ⇒ String
Absolute path to the Dockerfile.
-
#image_arn ⇒ String?
Existing MicroVM image ARN.
-
#image_name ⇒ String
Name used when creating a MicroVM image.
-
#initialize(root:, config_path:, config:) ⇒ Project
constructor
A new instance of Project.
-
#lifecycle_after ⇒ Symbol
Cleanup policy used after a session block.
-
#name ⇒ String
Project name.
-
#payload ⇒ Hash
Runtime payload configured for MicroVM runs.
-
#profile ⇒ String?
AWS profile from configuration or environment.
-
#region ⇒ String?
AWS region from configuration or environment.
-
#require!(field, value) ⇒ Object
Return a required value or raise a configuration error.
-
#role_arn ⇒ String?
IAM role ARN used when running MicroVMs.
-
#run_params ⇒ Hash
Build parameters for running a MicroVM.
-
#s3_bucket ⇒ String?
S3 bucket used for deployment artifacts.
-
#s3_prefix ⇒ String
S3 key prefix used for deployment artifacts.
-
#validate! ⇒ self
Validate project configuration sections used by deployment commands.
Constructor Details
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
14 15 16 |
# File 'lib/lambda/microvms/project.rb', line 14 def config @config end |
#config_path ⇒ Object (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 |
#root ⇒ Object (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.
20 21 22 23 24 25 |
# File 'lib/lambda/microvms/project.rb', line 20 def self.load(path = DEFAULT_CONFIG) config_path = File.(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_path ⇒ String
Absolute path for the packaged artifact.
76 |
# File 'lib/lambda/microvms/project.rb', line 76 def artifact_path = File.(fetch('build.artifact', default: "tmp/#{name}-microvm.zip"), root) |
#build_context ⇒ String
Absolute path to the build context.
71 |
# File 'lib/lambda/microvms/project.rb', line 71 def build_context = File.(fetch('build.context', default: '.'), root) |
#create_image_params(artifact_uri:) ⇒ Hash
Build parameters for image creation with the artifact URI injected.
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 |
#dockerfile ⇒ String
Absolute path to the Dockerfile.
66 |
# File 'lib/lambda/microvms/project.rb', line 66 def dockerfile = File.(fetch('build.dockerfile', default: 'Dockerfile'), root) |
#image_arn ⇒ String?
Existing MicroVM image ARN.
56 |
# File 'lib/lambda/microvms/project.rb', line 56 def image_arn = fetch('image_arn', 'image.arn', default: nil) |
#image_name ⇒ String
Name used when creating a MicroVM image.
61 |
# File 'lib/lambda/microvms/project.rb', line 61 def image_name = fetch('image.name', default: name) |
#lifecycle_after ⇒ Symbol
Cleanup policy used after a session block.
91 |
# File 'lib/lambda/microvms/project.rb', line 91 def lifecycle_after = fetch('runtime.after', default: 'suspend').to_sym |
#name ⇒ String
Project name.
36 |
# File 'lib/lambda/microvms/project.rb', line 36 def name = fetch('name', default: File.basename(root)) |
#payload ⇒ Hash
Runtime payload configured for MicroVM runs.
96 97 98 |
# File 'lib/lambda/microvms/project.rb', line 96 def payload hash_config('runtime.payload') end |
#profile ⇒ String?
AWS profile from configuration or environment.
46 |
# File 'lib/lambda/microvms/project.rb', line 46 def profile = fetch('profile', default: ENV.fetch('AWS_PROFILE', nil)) |
#region ⇒ String?
AWS region from configuration or environment.
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.
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_arn ⇒ String?
IAM role ARN used when running MicroVMs.
51 |
# File 'lib/lambda/microvms/project.rb', line 51 def role_arn = fetch('role_arn', 'role', default: nil) |
#run_params ⇒ Hash
Build parameters for running a MicroVM.
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_bucket ⇒ String?
S3 bucket used for deployment artifacts.
81 |
# File 'lib/lambda/microvms/project.rb', line 81 def s3_bucket = fetch('deployment.bucket', 's3.bucket', default: nil) |
#s3_prefix ⇒ String
S3 key prefix used for deployment artifacts.
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.
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 |