|
4 | 4 | require 'messages/manifest_buildpack_message' |
5 | 5 | require 'messages/manifest_service_binding_create_message' |
6 | 6 | require 'messages/manifest_routes_update_message' |
| 7 | +require 'messages/manifest_features_update_message' |
7 | 8 | require 'messages/validators/metadata_validator' |
8 | 9 | require 'cloud_controller/app_manifest/byte_converter' |
9 | 10 | require 'models/helpers/health_check_types' |
@@ -43,6 +44,7 @@ class AppManifestMessage < BaseMessage |
43 | 44 | stack |
44 | 45 | timeout |
45 | 46 | cnb_credentials |
| 47 | + features |
46 | 48 | ] |
47 | 49 |
|
48 | 50 | HEALTH_CHECK_TYPE_MAPPING = { HealthCheckTypes::NONE => HealthCheckTypes::PROCESS }.freeze |
@@ -82,6 +84,7 @@ def self.underscore_keys(hash) |
82 | 84 | record.requested?(:random_route) || |
83 | 85 | record.requested?(:default_route) |
84 | 86 | } |
| 87 | + validate :validate_features!, if: ->(record) { record.requested?(:features) } |
85 | 88 |
|
86 | 89 | def initialize(original_yaml, attrs={}) |
87 | 90 | super(attrs) |
@@ -116,6 +119,10 @@ def manifest_routes_update_message |
116 | 119 | @manifest_routes_update_message ||= ManifestRoutesUpdateMessage.new(routes_attribute_mapping) |
117 | 120 | end |
118 | 121 |
|
| 122 | + def manifest_features_update_message |
| 123 | + @manifest_features_update_message ||= ManifestFeaturesUpdateMessage.new(features_attribute_mapping) |
| 124 | + end |
| 125 | + |
119 | 126 | def audit_hash |
120 | 127 | override_env = original_yaml['env'] ? { 'env' => Presenters::Censorship::PRIVATE_DATA_HIDDEN } : {} |
121 | 128 | override_cnb = original_yaml['cnb-credentials'] ? { 'cnb-credentials' => Presenters::Censorship::PRIVATE_DATA_HIDDEN } : {} |
@@ -295,6 +302,12 @@ def service_bindings_attribute_mapping |
295 | 302 | mapping |
296 | 303 | end |
297 | 304 |
|
| 305 | + def features_attribute_mapping |
| 306 | + mapping = {} |
| 307 | + mapping[:features] = features if requested?(:features) |
| 308 | + mapping |
| 309 | + end |
| 310 | + |
298 | 311 | def should_autodetect?(buildpack) |
299 | 312 | buildpack == 'default' || buildpack == 'null' || buildpack.nil? |
300 | 313 | end |
@@ -464,6 +477,13 @@ def validate_docker_buildpacks_combination! |
464 | 477 | errors.add(:base, 'Cannot specify both buildpack(s) and docker keys') |
465 | 478 | end |
466 | 479 |
|
| 480 | + def validate_features! |
| 481 | + manifest_features_update_message.valid? |
| 482 | + manifest_features_update_message.errors.full_messages.each do |error_message| |
| 483 | + errors.add(:base, error_message) |
| 484 | + end |
| 485 | + end |
| 486 | + |
467 | 487 | def add_process_error!(error_message, type) |
468 | 488 | errors.add(:base, %(Process "#{type}": #{error_message})) |
469 | 489 | end |
|
0 commit comments