diff --git a/api/type.rb b/api/type.rb index 4e1698ff2c6a..f490dd844ee2 100644 --- a/api/type.rb +++ b/api/type.rb @@ -70,6 +70,9 @@ module Fields # A list of properties that conflict with this property. attr_reader :conflicts + # A list of properties that at least one of must be set. + attr_reader :at_least_one_of + # Can only be overridden - we should never set this ourselves. attr_reader :new_type @@ -109,6 +112,7 @@ def validate check_default_value_property check_conflicts + check_at_least_one_of end def to_s @@ -135,6 +139,8 @@ def to_json(opts = nil) instance_variables.each do |v| if v == :@conflicts && instance_variable_get(v).empty? # ignore empty conflict arrays + elsif v == :@at_least_one_of && instance_variable_get(v).empty? + # ignore empty at_least_one_of arrays elsif instance_variable_get(v) == false || instance_variable_get(v).nil? # ignore false booleans as non-existence indicates falsey elsif !ignored_fields.include? v @@ -194,6 +200,22 @@ def conflicting @__resource.all_user_properties.select { |p| p.conflicts.include?(@api_name) }).uniq end + # Checks that all properties that needs at least one of their fields actually exist. + # This currently just returns if empty, because we don't want to do the check, since + # this list will have a full path for nested attributes. + def check_at_least_one_of + check :at_least_one_of, type: ::Array, default: [], item_type: ::String + + return if @at_least_one_of.empty? + end + + # Returns list of properties that needs at least one of their fields set. + def at_least_one_of_list + return [] unless @__resource + + @at_least_one_of + end + def type self.class.name.split('::').last end @@ -289,6 +311,7 @@ class FetchedExternal < Type def validate @conflicts ||= [] + @at_least_one_of ||= [] end def api_name diff --git a/overrides/terraform/property_override.rb b/overrides/terraform/property_override.rb index ce49ebed6244..1731bc7a1855 100644 --- a/overrides/terraform/property_override.rb +++ b/overrides/terraform/property_override.rb @@ -69,6 +69,9 @@ def self.attributes # Names of attributes that can't be set alongside this one :conflicts_with, + # Names of attributes that at least one of must be set + :at_least_one_of, + # Names of fields that should be included in the updateMask. :update_mask_fields, diff --git a/products/accesscontextmanager/api.yaml b/products/accesscontextmanager/api.yaml index 491657f772de..51b84b5e480c 100644 --- a/products/accesscontextmanager/api.yaml +++ b/products/accesscontextmanager/api.yaml @@ -376,6 +376,10 @@ objects: A list of GCP resources that are inside of the service perimeter. Currently only projects are allowed. Format: projects/{project_number} + at_least_one_of: + - status.0.resources + - status.0.access_levels + - status.0.restricted_services item_type: Api::Type::String - !ruby/object:Api::Type::Array name: 'accessLevels' @@ -390,6 +394,10 @@ objects: be empty. Format: accessPolicies/{policy_id}/accessLevels/{access_level_name} + at_least_one_of: + - status.0.resources + - status.0.access_levels + - status.0.restricted_services item_type: Api::Type::String - !ruby/object:Api::Type::Array name: 'restrictedServices' @@ -399,4 +407,8 @@ objects: `storage.googleapis.com` is specified, access to the storage buckets inside the perimeter must meet the perimeter's access restrictions. + at_least_one_of: + - status.0.resources + - status.0.access_levels + - status.0.restricted_services item_type: Api::Type::String diff --git a/products/appengine/api.yaml b/products/appengine/api.yaml index 6f3842221f61..6fec988cfe68 100644 --- a/products/appengine/api.yaml +++ b/products/appengine/api.yaml @@ -404,6 +404,9 @@ objects: name: 'zip' description: 'Zip File' required: false + at_least_one_of: + - deployment.0.zip + - deployment.0.files properties: - !ruby/object:Api::Type::String name: 'sourceUrl' @@ -419,6 +422,9 @@ objects: Manifest of the files stored in Google Cloud Storage that are included as part of this version. All files must be readable using the credentials supplied with this call. required: false + at_least_one_of: + - deployment.0.zip + - deployment.0.files key_name: 'name' key_description: | name of file diff --git a/products/cloudrun/api.yaml b/products/cloudrun/api.yaml index 4cbbb647cb35..7d2fb63c348d 100644 --- a/products/cloudrun/api.yaml +++ b/products/cloudrun/api.yaml @@ -354,6 +354,7 @@ objects: properties: - !ruby/object:Api::Type::String name: name + required: true description: |- Name of the referent. More info: @@ -369,6 +370,7 @@ objects: properties: - !ruby/object:Api::Type::String name: name + required: true description: |- Name of the referent. More info: diff --git a/products/cloudscheduler/api.yaml b/products/cloudscheduler/api.yaml index 22d3785c8a52..c8b75827259f 100644 --- a/products/cloudscheduler/api.yaml +++ b/products/cloudscheduler/api.yaml @@ -90,6 +90,12 @@ objects: Values greater than 5 and negative values are not allowed. required: false input: true + at_least_one_of: + - retry_config.0.retry_count + - retry_config.0.max_retry_duration + - retry_config.0.min_backoff_duration + - retry_config.0.max_backoff_duration + - retry_config.0.max_doublings - !ruby/object:Api::Type::String name: maxRetryDuration description: | @@ -98,6 +104,12 @@ objects: A duration in seconds with up to nine fractional digits, terminated by 's'. required: false input: true + at_least_one_of: + - retry_config.0.retry_count + - retry_config.0.max_retry_duration + - retry_config.0.min_backoff_duration + - retry_config.0.max_backoff_duration + - retry_config.0.max_doublings - !ruby/object:Api::Type::String name: minBackoffDuration description: | @@ -105,6 +117,12 @@ objects: A duration in seconds with up to nine fractional digits, terminated by 's'. required: false input: true + at_least_one_of: + - retry_config.0.retry_count + - retry_config.0.max_retry_duration + - retry_config.0.min_backoff_duration + - retry_config.0.max_backoff_duration + - retry_config.0.max_doublings - !ruby/object:Api::Type::String name: maxBackoffDuration description: | @@ -112,6 +130,12 @@ objects: A duration in seconds with up to nine fractional digits, terminated by 's'. required: false input: true + at_least_one_of: + - retry_config.0.retry_count + - retry_config.0.max_retry_duration + - retry_config.0.min_backoff_duration + - retry_config.0.max_backoff_duration + - retry_config.0.max_doublings - !ruby/object:Api::Type::Integer name: maxDoublings description: | @@ -121,6 +145,12 @@ objects: and finally retries retries at intervals of maxBackoffDuration up to retryCount times. required: false input: true + at_least_one_of: + - retry_config.0.retry_count + - retry_config.0.max_retry_duration + - retry_config.0.min_backoff_duration + - retry_config.0.max_backoff_duration + - retry_config.0.max_doublings - !ruby/object:Api::Type::NestedObject name: pubsubTarget description: | @@ -183,6 +213,10 @@ objects: description: | App service. By default, the job is sent to the service which is the default service when the job is attempted. + at_least_one_of: + - app_engine_http_target.0.app_engine_routing.0.service + - app_engine_http_target.0.app_engine_routing.0.version + - app_engine_http_target.0.app_engine_routing.0.instance required: false input: true - !ruby/object:Api::Type::String @@ -190,6 +224,10 @@ objects: description: | App version. By default, the job is sent to the version which is the default version when the job is attempted. + at_least_one_of: + - app_engine_http_target.0.app_engine_routing.0.service + - app_engine_http_target.0.app_engine_routing.0.version + - app_engine_http_target.0.app_engine_routing.0.instance required: false input: true - !ruby/object:Api::Type::String @@ -197,6 +235,10 @@ objects: description: | App instance. By default, the job is sent to an instance which is available when the job is attempted. + at_least_one_of: + - app_engine_http_target.0.app_engine_routing.0.service + - app_engine_http_target.0.app_engine_routing.0.version + - app_engine_http_target.0.app_engine_routing.0.instance required: false input: true - !ruby/object:Api::Type::String diff --git a/products/compute/api.yaml b/products/compute/api.yaml index 3556ce7cb2a2..2b46aa5e0111 100644 --- a/products/compute/api.yaml +++ b/products/compute/api.yaml @@ -461,10 +461,10 @@ objects: properties: - !ruby/object:Api::Type::Integer name: 'signedUrlCacheMaxAgeSec' - default_value: 3600 + required: true description: | Maximum number of seconds the response to a signed URL request will - be considered fresh. Defaults to 1hr (3600s). After this time period, + be considered fresh. After this time period, the response will be revalidated before being served. When serving responses to signed URL requests, Cloud CDN will internally behave as though @@ -735,6 +735,13 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'connectTimeout' + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The timeout for new network connections to hosts. properties: @@ -753,6 +760,13 @@ objects: be from 0 to 999,999,999 inclusive. - !ruby/object:Api::Type::Integer name: 'maxRequestsPerConnection' + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | Maximum requests for a single backend connection. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If @@ -761,24 +775,52 @@ objects: - !ruby/object:Api::Type::Integer name: 'maxConnections' default_value: 1024 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of connections to the backend cluster. Defaults to 1024. - !ruby/object:Api::Type::Integer name: 'maxPendingRequests' default_value: 1024 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of pending requests to the backend cluster. Defaults to 1024. - !ruby/object:Api::Type::Integer name: 'maxRequests' default_value: 1024 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of parallel requests to the backend cluster. Defaults to 1024. - !ruby/object:Api::Type::Integer name: 'maxRetries' default_value: 3 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of parallel retries to the backend cluster. Defaults to 3. @@ -797,6 +839,10 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'httpCookie' + at_least_one_of: + - consistent_hash.0.http_cookie + - consistent_hash.0.http_header_name + - consistent_hash.0.minimum_ring_size description: | Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load @@ -805,6 +851,10 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'ttl' + at_least_one_of: + - consistent_hash.0.http_cookie.0.ttl + - consistent_hash.0.http_cookie.0.name + - consistent_hash.0.http_cookie.0.path description: | Liftime of the cookie. properties: @@ -823,20 +873,36 @@ objects: be from 0 to 999,999,999 inclusive. - !ruby/object:Api::Type::String name: 'name' + at_least_one_of: + - consistent_hash.0.http_cookie.0.ttl + - consistent_hash.0.http_cookie.0.name + - consistent_hash.0.http_cookie.0.path description: | Name of the cookie. - !ruby/object:Api::Type::String name: 'path' + at_least_one_of: + - consistent_hash.0.http_cookie.0.ttl + - consistent_hash.0.http_cookie.0.name + - consistent_hash.0.http_cookie.0.path description: | Path to set for the cookie. - !ruby/object:Api::Type::String name: 'httpHeaderName' + at_least_one_of: + - consistent_hash.0.http_cookie + - consistent_hash.0.http_header_name + - consistent_hash.0.minimum_ring_size description: | The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD. - !ruby/object:Api::Type::Integer name: 'minimumRingSize' default_value: 1024 + at_least_one_of: + - consistent_hash.0.http_cookie + - consistent_hash.0.http_header_name + - consistent_hash.0.minimum_ring_size description: | The minimum number of virtual nodes to use for the hash ring. Larger ring sizes result in more granular load @@ -851,17 +917,38 @@ objects: - !ruby/object:Api::Type::NestedObject name: 'cacheKeyPolicy' description: 'The CacheKeyPolicy for this CdnPolicy.' + at_least_one_of: + - cdn_policy.0.cache_key_policy + - cdn_policy.0.signed_url_cache_max_age_sec properties: - !ruby/object:Api::Type::Boolean name: 'includeHost' + at_least_one_of: + - cdn_policy.0.cache_key_policy.0.include_host + - cdn_policy.0.cache_key_policy.0.include_protocol + - cdn_policy.0.cache_key_policy.0.include_query_string + - cdn_policy.0.cache_key_policy.0.query_string_blacklist + - cdn_policy.0.cache_key_policy.0.query_string_whitelist description: | If true requests to different hosts will be cached separately. - !ruby/object:Api::Type::Boolean name: 'includeProtocol' + at_least_one_of: + - cdn_policy.0.cache_key_policy.0.include_host + - cdn_policy.0.cache_key_policy.0.include_protocol + - cdn_policy.0.cache_key_policy.0.include_query_string + - cdn_policy.0.cache_key_policy.0.query_string_blacklist + - cdn_policy.0.cache_key_policy.0.query_string_whitelist description: | If true, http and https requests will be cached separately. - !ruby/object:Api::Type::Boolean name: 'includeQueryString' + at_least_one_of: + - cdn_policy.0.cache_key_policy.0.include_host + - cdn_policy.0.cache_key_policy.0.include_protocol + - cdn_policy.0.cache_key_policy.0.include_query_string + - cdn_policy.0.cache_key_policy.0.query_string_blacklist + - cdn_policy.0.cache_key_policy.0.query_string_whitelist description: | If true, include query string parameters in the cache key according to query_string_whitelist and @@ -872,6 +959,12 @@ objects: key entirely. - !ruby/object:Api::Type::Array name: 'queryStringBlacklist' + at_least_one_of: + - cdn_policy.0.cache_key_policy.0.include_host + - cdn_policy.0.cache_key_policy.0.include_protocol + - cdn_policy.0.cache_key_policy.0.include_query_string + - cdn_policy.0.cache_key_policy.0.query_string_blacklist + - cdn_policy.0.cache_key_policy.0.query_string_whitelist description: | Names of query string parameters to exclude in cache keys. @@ -882,6 +975,12 @@ objects: item_type: Api::Type::String - !ruby/object:Api::Type::Array name: 'queryStringWhitelist' + at_least_one_of: + - cdn_policy.0.cache_key_policy.0.include_host + - cdn_policy.0.cache_key_policy.0.include_protocol + - cdn_policy.0.cache_key_policy.0.include_query_string + - cdn_policy.0.cache_key_policy.0.query_string_blacklist + - cdn_policy.0.cache_key_policy.0.query_string_whitelist description: | Names of query string parameters to include in cache keys. @@ -893,6 +992,9 @@ objects: - !ruby/object:Api::Type::Integer name: 'signedUrlCacheMaxAgeSec' default_value: 3600 + at_least_one_of: + - cdn_policy.0.cache_key_policy + - cdn_policy.0.signed_url_cache_max_age_sec description: | Maximum number of seconds the response to a signed URL request will be considered fresh, defaults to 1hr (3600s). After this @@ -1057,6 +1159,18 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'baseEjectionTime' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to @@ -1076,6 +1190,18 @@ objects: `nanos` field. Must be from 0 to 999,999,999 inclusive. - !ruby/object:Api::Type::Integer name: 'consecutiveErrors' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 5 description: | Number of errors before a host is ejected from the connection pool. When the @@ -1083,6 +1209,18 @@ objects: Defaults to 5. - !ruby/object:Api::Type::Integer name: 'consecutiveGatewayFailure' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 5 description: | The number of consecutive gateway failures (502, 503, 504 status or connection @@ -1090,6 +1228,18 @@ objects: gateway failure ejection occurs. Defaults to 5. - !ruby/object:Api::Type::Integer name: 'enforcingConsecutiveErrors' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 100 description: | The percentage chance that a host will be actually ejected when an outlier @@ -1097,6 +1247,18 @@ objects: ejection or to ramp it up slowly. Defaults to 100. - !ruby/object:Api::Type::Integer name: 'enforcingConsecutiveGatewayFailure' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 0 description: | The percentage chance that a host will be actually ejected when an outlier @@ -1104,6 +1266,18 @@ objects: used to disable ejection or to ramp it up slowly. Defaults to 0. - !ruby/object:Api::Type::Integer name: 'enforcingSuccessRate' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 100 description: | The percentage chance that a host will be actually ejected when an outlier @@ -1111,6 +1285,18 @@ objects: disable ejection or to ramp it up slowly. Defaults to 100. - !ruby/object:Api::Type::NestedObject name: 'interval' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | Time interval between ejection sweep analysis. This can result in both new ejections as well as hosts being returned to service. Defaults to 10 seconds. @@ -1129,12 +1315,36 @@ objects: `nanos` field. Must be from 0 to 999,999,999 inclusive. - !ruby/object:Api::Type::Integer name: 'maxEjectionPercent' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 10 description: | Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 10%. - !ruby/object:Api::Type::Integer name: 'successRateMinimumHosts' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 5 description: | The number of hosts in a cluster that must have enough request volume to detect @@ -1143,6 +1353,18 @@ objects: cluster. Defaults to 5. - !ruby/object:Api::Type::Integer name: 'successRateRequestVolume' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 100 description: | The minimum number of total requests that must be collected in one interval (as @@ -1152,6 +1374,18 @@ objects: to 100. - !ruby/object:Api::Type::Integer name: 'successRateStdevFactor' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor default_value: 1900 description: | This factor is used to determine the ejection threshold for success rate outlier @@ -1215,10 +1449,16 @@ objects: properties: - !ruby/object:Api::Type::Boolean name: 'enable' + at_least_one_of: + - log_config.0.enable + - log_config.0.sample_rate description: | Whether to enable logging for the load balancer traffic served by this backend service. - !ruby/object:Api::Type::Double name: 'sampleRate' + at_least_one_of: + - log_config.0.enable + - log_config.0.sample_rate description: | This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer @@ -1399,6 +1639,13 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'connectTimeout' + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The timeout for new network connections to hosts. properties: @@ -1417,6 +1664,13 @@ objects: be from 0 to 999,999,999 inclusive. - !ruby/object:Api::Type::Integer name: 'maxRequestsPerConnection' + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | Maximum requests for a single backend connection. This parameter is respected by both the HTTP/1.1 and HTTP/2 implementations. If @@ -1425,24 +1679,52 @@ objects: - !ruby/object:Api::Type::Integer name: 'maxConnections' default_value: 1024 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of connections to the backend cluster. Defaults to 1024. - !ruby/object:Api::Type::Integer name: 'maxPendingRequests' default_value: 1024 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of pending requests to the backend cluster. Defaults to 1024. - !ruby/object:Api::Type::Integer name: 'maxRequests' default_value: 1024 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of parallel requests to the backend cluster. Defaults to 1024. - !ruby/object:Api::Type::Integer name: 'maxRetries' default_value: 3 + at_least_one_of: + - circuit_breakers.0.connect_timeout + - circuit_breakers.0.max_requests_per_connection + - circuit_breakers.0.max_connections + - circuit_breakers.0.max_pending_requests + - circuit_breakers.0.max_requests + - circuit_breakers.0.max_retries description: | The maximum number of parallel retries to the backend cluster. Defaults to 3. @@ -1463,6 +1745,10 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'httpCookie' + at_least_one_of: + - consistent_hash.0.http_cookie + - consistent_hash.0.http_header_name + - consistent_hash.0.minimum_ring_size description: | Hash is based on HTTP Cookie. This field describes a HTTP cookie that will be used as the hash key for the consistent hash load @@ -1471,6 +1757,10 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'ttl' + at_least_one_of: + - consistent_hash.0.http_cookie.0.ttl + - consistent_hash.0.http_cookie.0.name + - consistent_hash.0.http_cookie.0.path description: | Liftime of the cookie. properties: @@ -1489,20 +1779,36 @@ objects: be from 0 to 999,999,999 inclusive. - !ruby/object:Api::Type::String name: 'name' + at_least_one_of: + - consistent_hash.0.http_cookie.0.ttl + - consistent_hash.0.http_cookie.0.name + - consistent_hash.0.http_cookie.0.path description: | Name of the cookie. - !ruby/object:Api::Type::String name: 'path' + at_least_one_of: + - consistent_hash.0.http_cookie.0.ttl + - consistent_hash.0.http_cookie.0.name + - consistent_hash.0.http_cookie.0.path description: | Path to set for the cookie. - !ruby/object:Api::Type::String name: 'httpHeaderName' + at_least_one_of: + - consistent_hash.0.http_cookie + - consistent_hash.0.http_header_name + - consistent_hash.0.minimum_ring_size description: | The hash based on the value of the specified header field. This field is applicable if the sessionAffinity is set to HEADER_FIELD. - !ruby/object:Api::Type::Integer name: 'minimumRingSize' default_value: 1024 + at_least_one_of: + - consistent_hash.0.http_cookie + - consistent_hash.0.http_header_name + - consistent_hash.0.minimum_ring_size description: | The minimum number of virtual nodes to use for the hash ring. Larger ring sizes result in more granular load @@ -1539,6 +1845,10 @@ objects: properties: - !ruby/object:Api::Type::Boolean name: 'disableConnectionDrainOnFailover' + at_least_one_of: + - failover_policy.0.disable_connection_drain_on_failover + - failover_policy.0.drop_traffic_if_unhealthy + - failover_policy.0.failover_ratio description: | On failover or failback, this field indicates whether connection drain will be honored. Setting this to true has the following effect: connections @@ -1550,6 +1860,10 @@ objects: The default is false. - !ruby/object:Api::Type::Boolean name: 'dropTrafficIfUnhealthy' + at_least_one_of: + - failover_policy.0.disable_connection_drain_on_failover + - failover_policy.0.drop_traffic_if_unhealthy + - failover_policy.0.failover_ratio description: | This option is used only when no healthy VMs are detected in the primary and backup instance groups. When set to true, traffic is dropped. When @@ -1557,6 +1871,10 @@ objects: The default is false. - !ruby/object:Api::Type::Double name: 'failoverRatio' + at_least_one_of: + - failover_policy.0.disable_connection_drain_on_failover + - failover_policy.0.drop_traffic_if_unhealthy + - failover_policy.0.failover_ratio description: | The value of the field must be in [0, 1]. If the ratio of the healthy VMs in the primary backend is at or below this number, traffic arriving @@ -1661,6 +1979,18 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'baseEjectionTime' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The base time that a host is ejected for. The real time is equal to the base time multiplied by the number of times the host has been ejected. Defaults to @@ -1681,6 +2011,18 @@ objects: - !ruby/object:Api::Type::Integer name: 'consecutiveErrors' default_value: 5 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | Number of errors before a host is ejected from the connection pool. When the backend host is accessed over HTTP, a 5xx return code qualifies as an error. @@ -1688,6 +2030,18 @@ objects: - !ruby/object:Api::Type::Integer name: 'consecutiveGatewayFailure' default_value: 5 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The number of consecutive gateway failures (502, 503, 504 status or connection errors that are mapped to one of those status codes) before a consecutive @@ -1695,6 +2049,18 @@ objects: - !ruby/object:Api::Type::Integer name: 'enforcingConsecutiveErrors' default_value: 100 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive 5xx. This setting can be used to disable @@ -1702,6 +2068,18 @@ objects: - !ruby/object:Api::Type::Integer name: 'enforcingConsecutiveGatewayFailure' default_value: 0 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The percentage chance that a host will be actually ejected when an outlier status is detected through consecutive gateway failures. This setting can be @@ -1709,12 +2087,36 @@ objects: - !ruby/object:Api::Type::Integer name: 'enforcingSuccessRate' default_value: 100 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The percentage chance that a host will be actually ejected when an outlier status is detected through success rate statistics. This setting can be used to disable ejection or to ramp it up slowly. Defaults to 100. - !ruby/object:Api::Type::NestedObject name: 'interval' + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | Time interval between ejection sweep analysis. This can result in both new ejections as well as hosts being returned to service. Defaults to 10 seconds. @@ -1734,12 +2136,36 @@ objects: - !ruby/object:Api::Type::Integer name: 'maxEjectionPercent' default_value: 10 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | Maximum percentage of hosts in the load balancing pool for the backend service that can be ejected. Defaults to 10%. - !ruby/object:Api::Type::Integer name: 'successRateMinimumHosts' default_value: 5 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The number of hosts in a cluster that must have enough request volume to detect success rate outliers. If the number of hosts is less than this setting, outlier @@ -1748,6 +2174,18 @@ objects: - !ruby/object:Api::Type::Integer name: 'successRateRequestVolume' default_value: 100 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | The minimum number of total requests that must be collected in one interval (as defined by the interval duration above) to include this host in success rate @@ -1757,6 +2195,18 @@ objects: - !ruby/object:Api::Type::Integer name: 'successRateStdevFactor' default_value: 1900 + at_least_one_of: + - outlier_detection.0.base_ejection_time + - outlier_detection.0.consecutive_errors + - outlier_detection.0.consecutive_gateway_failure + - outlier_detection.0.enforcing_consecutive_errors + - outlier_detection.0.enforcing_consecutive_gateway_failure + - outlier_detection.0.enforcing_success_rate + - outlier_detection.0.interval + - outlier_detection.0.max_ejection_percent + - outlier_detection.0.success_rate_minimum_hosts + - outlier_detection.0.success_rate_request_volume + - outlier_detection.0.success_rate_stdev_factor description: | This factor is used to determine the ejection threshold for success rate outlier ejection. The ejection threshold is the difference between the mean success @@ -1808,10 +2258,16 @@ objects: properties: - !ruby/object:Api::Type::Boolean name: 'enable' + at_least_one_of: + - log_config.0.enable + - log_config.0.sample_rate description: | Whether to enable logging for the load balancer traffic served by this backend service. - !ruby/object:Api::Type::Double name: 'sampleRate' + at_least_one_of: + - log_config.0.enable + - log_config.0.sample_rate description: | This field can only be specified if logging is enabled for this backend service. The value of the field must be in [0, 1]. This configures the sampling rate of requests to the load balancer @@ -3564,34 +4020,82 @@ objects: properties: - !ruby/object:Api::Type::String name: 'host' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used. - !ruby/object:Api::Type::String name: 'requestPath' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The request path of the HTTP health check request. The default value is /. default_value: "/" - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The TCP port number for the HTTP health check request. The default value is 80. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -3601,6 +4105,14 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -3630,34 +4142,82 @@ objects: properties: - !ruby/object:Api::Type::String name: 'host' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The value of the host header in the HTTPS health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used. - !ruby/object:Api::Type::String name: 'requestPath' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The request path of the HTTPS health check request. The default value is /. default_value: "/" - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The TCP port number for the HTTPS health check request. The default value is 443. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -3667,6 +4227,14 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -3696,6 +4264,13 @@ objects: properties: - !ruby/object:Api::Type::String name: 'request' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | The application data to send once the TCP connection has been established (default value is empty). If both request and response are @@ -3703,22 +4278,50 @@ objects: data can only be ASCII. - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | The TCP port number for the TCP health check request. The default value is 443. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -3728,6 +4331,13 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -3757,6 +4367,13 @@ objects: properties: - !ruby/object:Api::Type::String name: 'request' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | The application data to send once the SSL connection has been established (default value is empty). If both request and response are @@ -3764,22 +4381,50 @@ objects: data can only be ASCII. - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | The TCP port number for the SSL health check request. The default value is 443. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -3789,6 +4434,13 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -3818,34 +4470,82 @@ objects: properties: - !ruby/object:Api::Type::String name: 'host' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The value of the host header in the HTTP2 health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used. - !ruby/object:Api::Type::String name: 'requestPath' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The request path of the HTTP2 health check request. The default value is /. default_value: "/" - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The TCP port number for the HTTP2 health check request. The default value is 443. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -3855,6 +4555,14 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -4537,6 +5245,7 @@ objects: properties: - !ruby/object:Api::Type::Enum name: 'type' + required: true description: | The type of supported feature. Read [Enabling guest operating system features](https://cloud.google.com/compute/docs/images/create-delete-deprecate-private-images#guest-os-features) to see a list of available options. values: @@ -6313,10 +7022,16 @@ objects: properties: - !ruby/object:Api::Type::String name: cpus + at_least_one_of: + - node_type_flexibility.0.cpus + - node_type_flexibility.0.memory description: | Number of virtual CPUs to use. - !ruby/object:Api::Type::String name: memory + at_least_one_of: + - node_type_flexibility.0.cpus + - node_type_flexibility.0.memory description: | Physical memory available to the node, defined in MB. - !ruby/object:Api::Type::String @@ -7320,34 +8035,82 @@ objects: properties: - !ruby/object:Api::Type::String name: 'host' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used. - !ruby/object:Api::Type::String name: 'requestPath' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The request path of the HTTP health check request. The default value is /. default_value: "/" - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | The TCP port number for the HTTP health check request. The default value is 80. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -7357,6 +8120,14 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - http_health_check.0.host + - http_health_check.0.request_path + - http_health_check.0.response + - http_health_check.0.port + - http_health_check.0.port_name + - http_health_check.0.proxy_header + - http_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -7386,34 +8157,82 @@ objects: properties: - !ruby/object:Api::Type::String name: 'host' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The value of the host header in the HTTPS health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used. - !ruby/object:Api::Type::String name: 'requestPath' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The request path of the HTTPS health check request. The default value is /. default_value: "/" - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | The TCP port number for the HTTPS health check request. The default value is 443. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -7423,6 +8242,14 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - https_health_check.0.host + - https_health_check.0.request_path + - https_health_check.0.response + - https_health_check.0.port + - https_health_check.0.port_name + - https_health_check.0.proxy_header + - https_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -7452,6 +8279,13 @@ objects: properties: - !ruby/object:Api::Type::String name: 'request' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | The application data to send once the TCP connection has been established (default value is empty). If both request and response are @@ -7459,22 +8293,50 @@ objects: data can only be ASCII. - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | The TCP port number for the TCP health check request. The default value is 80. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -7484,6 +8346,13 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - tcp_health_check.0.request + - tcp_health_check.0.response + - tcp_health_check.0.port + - tcp_health_check.0.port_name + - tcp_health_check.0.proxy_header + - tcp_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -7513,6 +8382,13 @@ objects: properties: - !ruby/object:Api::Type::String name: 'request' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | The application data to send once the SSL connection has been established (default value is empty). If both request and response are @@ -7520,22 +8396,50 @@ objects: data can only be ASCII. - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | The TCP port number for the SSL health check request. The default value is 443. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -7545,6 +8449,13 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - ssl_health_check.0.request + - ssl_health_check.0.response + - ssl_health_check.0.port + - ssl_health_check.0.port_name + - ssl_health_check.0.proxy_header + - ssl_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -7574,34 +8485,82 @@ objects: properties: - !ruby/object:Api::Type::String name: 'host' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The value of the host header in the HTTP2 health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used. - !ruby/object:Api::Type::String name: 'requestPath' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The request path of the HTTP2 health check request. The default value is /. default_value: "/" - !ruby/object:Api::Type::String name: 'response' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The bytes to match against the beginning of the response data. If left empty (the default value), any response will indicate health. The response data can only be ASCII. - !ruby/object:Api::Type::Integer name: 'port' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | The TCP port number for the HTTP2 health check request. The default value is 443. - !ruby/object:Api::Type::String name: 'portName' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | Port name as defined in InstanceGroup#NamedPort#name. If both port and port_name are defined, port takes precedence. - !ruby/object:Api::Type::Enum name: 'proxyHeader' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | Specifies the type of proxy header to append before sending data to the backend, either NONE or PROXY_V1. The default is NONE. @@ -7611,6 +8570,14 @@ objects: default_value: :NONE - !ruby/object:Api::Type::Enum name: 'portSpecification' + at_least_one_of: + - http2_health_check.0.host + - http2_health_check.0.request_path + - http2_health_check.0.response + - http2_health_check.0.port + - http2_health_check.0.port_name + - http2_health_check.0.proxy_header + - http2_health_check.0.port_specification description: | Specifies how port is selected for health checking, can be one of the following values: @@ -7781,16 +8748,28 @@ objects: properties: - !ruby/object:Api::Type::KeyValuePairs name: 'labels' + at_least_one_of: + - snapshot_schedule_policy.0.snapshot_properties.0.labels + - snapshot_schedule_policy.0.snapshot_properties.0.storage_locations + - snapshot_schedule_policy.0.snapshot_properties.0.guest_flush description: | A set of key-value pairs. - !ruby/object:Api::Type::Array name: 'storageLocations' + at_least_one_of: + - snapshot_schedule_policy.0.snapshot_properties.0.labels + - snapshot_schedule_policy.0.snapshot_properties.0.storage_locations + - snapshot_schedule_policy.0.snapshot_properties.0.guest_flush max_size: 1 description: | GCS bucket location in which to store the snapshot (regional or multi-regional). item_type: Api::Type::String - !ruby/object:Api::Type::Boolean name: 'guestFlush' + at_least_one_of: + - snapshot_schedule_policy.0.snapshot_properties.0.labels + - snapshot_schedule_policy.0.snapshot_properties.0.storage_locations + - snapshot_schedule_policy.0.snapshot_properties.0.guest_flush description: | Whether to perform a 'guest aware' snapshot. - !ruby/object:Api::Resource @@ -8077,6 +9056,7 @@ objects: properties: - !ruby/object:Api::Type::String name: range + required: true description: | The IP range to advertise. The value must be a CIDR-formatted string. @@ -9189,6 +10169,10 @@ objects: properties: - !ruby/object:Api::Type::Enum name: 'aggregationInterval' + at_least_one_of: + - log_config.0.aggregation_interval + - log_config.0.flow_sampling + - log_config.0.metadata description: | Can only be specified if VPC flow logging for this subnetwork is enabled. Toggles the aggregation interval for collecting flow logs. Increasing the @@ -9206,6 +10190,10 @@ objects: default_value: :INTERVAL_5_SEC - !ruby/object:Api::Type::Double name: 'flowSampling' + at_least_one_of: + - log_config.0.aggregation_interval + - log_config.0.flow_sampling + - log_config.0.metadata description: | Can only be specified if VPC flow logging for this subnetwork is enabled. The value of the field must be in [0, 1]. Set the sampling rate of VPC @@ -9215,6 +10203,10 @@ objects: default_value: 0.5 - !ruby/object:Api::Type::Enum name: 'metadata' + at_least_one_of: + - log_config.0.aggregation_interval + - log_config.0.flow_sampling + - log_config.0.metadata description: | Can only be specified if VPC flow logging for this subnetwork is enabled. Configures whether metadata fields should be added to the reported VPC diff --git a/products/dataproc/api.yaml b/products/dataproc/api.yaml index cddf927b880d..355510688afd 100644 --- a/products/dataproc/api.yaml +++ b/products/dataproc/api.yaml @@ -97,11 +97,19 @@ objects: properties: - !ruby/object:Api::Type::Integer name: 'minInstances' + at_least_one_of: + - secondary_worker_config.0.min_instances + - secondary_worker_config.0.max_instances + - secondary_worker_config.0.weight default_value: 2 description: | Minimum number of instances for this group. Bounds: [0, maxInstances]. Defaults to 0. - !ruby/object:Api::Type::Integer name: 'maxInstances' + at_least_one_of: + - secondary_worker_config.0.min_instances + - secondary_worker_config.0.max_instances + - secondary_worker_config.0.weight default_value: 0 description: | Maximum number of instances for this group. Note that by default, clusters will not use @@ -109,6 +117,10 @@ objects: Bounds: [minInstances, ). Defaults to 0. - !ruby/object:Api::Type::Integer name: 'weight' + at_least_one_of: + - secondary_worker_config.0.min_instances + - secondary_worker_config.0.max_instances + - secondary_worker_config.0.weight default_value: 1 description: | Weight for the instance group, which is used to determine the fraction of total workers diff --git a/products/dns/api.yaml b/products/dns/api.yaml index f536d7562481..6b2409e531fa 100644 --- a/products/dns/api.yaml +++ b/products/dns/api.yaml @@ -61,10 +61,20 @@ objects: properties: - !ruby/object:Api::Type::String name: 'kind' + at_least_one_of: + - dnssec_config.0.kind + - dnssec_config.0.non_existence + - dnssec_config.0.state + - dnssec_config.0.default_key_specs description: Identifies what kind of resource this is default_value: 'dns#managedZoneDnsSecConfig' - !ruby/object:Api::Type::Enum name: 'nonExistence' + at_least_one_of: + - dnssec_config.0.kind + - dnssec_config.0.non_existence + - dnssec_config.0.state + - dnssec_config.0.default_key_specs description: | Specifies the mechanism used to provide authenticated denial-of-existence responses. values: @@ -72,6 +82,11 @@ objects: - "nsec3" - !ruby/object:Api::Type::Enum name: 'state' + at_least_one_of: + - dnssec_config.0.kind + - dnssec_config.0.non_existence + - dnssec_config.0.state + - dnssec_config.0.default_key_specs description: Specifies whether DNSSEC is enabled, and what mode it is in values: - "off" @@ -79,6 +94,11 @@ objects: - "transfer" - !ruby/object:Api::Type::Array name: 'defaultKeySpecs' + at_least_one_of: + - dnssec_config.0.kind + - dnssec_config.0.non_existence + - dnssec_config.0.state + - dnssec_config.0.default_key_specs description: | Specifies parameters that will be used for generating initial DnsKeys for this ManagedZone. If you provide a spec for keySigning or zoneSigning, @@ -193,6 +213,7 @@ objects: properties: - !ruby/object:Api::Type::Array name: 'targetNameServers' + required: true description: | List of target name servers to forward to. Cloud DNS will select the best available name server if more than @@ -201,6 +222,7 @@ objects: properties: - !ruby/object:Api::Type::String name: 'ipv4Address' + required: true description: 'IPv4 address of a target name server.' min_version: beta - !ruby/object:Api::Type::NestedObject @@ -214,12 +236,14 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: 'targetNetwork' + required: true description: 'The network with which to peer.' properties: # TODO(drebes): Make 'networkUrl' a ResourceRef once cross-module references # are possible. - !ruby/object:Api::Type::String name: 'networkUrl' + required: true description: | The fully qualified URL of the VPC network to forward queries to. This should be formatted like @@ -249,6 +273,7 @@ objects: properties: - !ruby/object:Api::Type::Array name: 'targetNameServers' + required: true description: | Sets an alternative name server for the associated networks. When specified, all DNS queries are forwarded to a name server that you choose. Names such as .internal @@ -257,6 +282,7 @@ objects: properties: - !ruby/object:Api::Type::String name: 'ipv4Address' + required: true description: 'IPv4 address to forward to.' - !ruby/object:Api::Type::String name: 'description' diff --git a/products/healthcare/api.yaml b/products/healthcare/api.yaml index a289e288c3b3..c76cdc4c9580 100644 --- a/products/healthcare/api.yaml +++ b/products/healthcare/api.yaml @@ -319,10 +319,16 @@ objects: properties: - !ruby/object:Api::Type::Boolean name: allowNullHeader + at_least_one_of: + - parser_config.0.allow_null_header + - parser_config.0.segment_terminator description: | Determines whether messages with no header are allowed. - !ruby/object:Api::Type::String name: segmentTerminator + at_least_one_of: + - parser_config.0.allow_null_header + - parser_config.0.segment_terminator description: | Byte(s) to be used as the segment terminator. If this is unset, '\r' will be used as segment terminator. diff --git a/products/logging/api.yaml b/products/logging/api.yaml index fbd101c5736c..0c1a119da06e 100644 --- a/products/logging/api.yaml +++ b/products/logging/api.yaml @@ -160,47 +160,84 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: linearBuckets + at_least_one_of: + - bucket_options.0.linear_buckets + - bucket_options.0.exponential_buckets + - bucket_options.0.explicit_buckets description: | Specifies a linear sequence of buckets that all have the same width (except overflow and underflow). Each bucket represents a constant absolute uncertainty on the specific value in the bucket. properties: - !ruby/object:Api::Type::Integer name: numFiniteBuckets + at_least_one_of: + - bucket_options.0.linear_buckets.0.num_finite_buckets + - bucket_options.0.linear_buckets.0.width + - bucket_options.0.linear_buckets.0.offset description: | Must be greater than 0. - !ruby/object:Api::Type::Integer name: width + at_least_one_of: + - bucket_options.0.linear_buckets.0.num_finite_buckets + - bucket_options.0.linear_buckets.0.width + - bucket_options.0.linear_buckets.0.offset description: | Must be greater than 0. - !ruby/object:Api::Type::Double name: offset + at_least_one_of: + - bucket_options.0.linear_buckets.0.num_finite_buckets + - bucket_options.0.linear_buckets.0.width + - bucket_options.0.linear_buckets.0.offset description: | Lower bound of the first bucket. - !ruby/object:Api::Type::NestedObject name: exponentialBuckets + at_least_one_of: + - bucket_options.0.linear_buckets + - bucket_options.0.exponential_buckets + - bucket_options.0.explicit_buckets description: | Specifies an exponential sequence of buckets that have a width that is proportional to the value of the lower bound. Each bucket represents a constant relative uncertainty on a specific value in the bucket. properties: - !ruby/object:Api::Type::Integer name: numFiniteBuckets + at_least_one_of: + - bucket_options.0.exponential_buckets.0.num_finite_buckets + - bucket_options.0.exponential_buckets.0.growth_factor + - bucket_options.0.exponential_buckets.0.scale description: | Must be greater than 0. - !ruby/object:Api::Type::Integer name: growthFactor + at_least_one_of: + - bucket_options.0.exponential_buckets.0.num_finite_buckets + - bucket_options.0.exponential_buckets.0.growth_factor + - bucket_options.0.exponential_buckets.0.scale description: | Must be greater than 1. - !ruby/object:Api::Type::Double name: scale + at_least_one_of: + - bucket_options.0.exponential_buckets.0.num_finite_buckets + - bucket_options.0.exponential_buckets.0.growth_factor + - bucket_options.0.exponential_buckets.0.scale description: | Must be greater than 0. - !ruby/object:Api::Type::NestedObject name: explicitBuckets + at_least_one_of: + - bucket_options.0.linear_buckets + - bucket_options.0.exponential_buckets + - bucket_options.0.explicit_buckets description: | Specifies a set of buckets with arbitrary widths. properties: - !ruby/object:Api::Type::Array name: bounds + required: true item_type: Api::Type::Double description: | The values must be monotonically increasing. diff --git a/products/mlengine/api.yaml b/products/mlengine/api.yaml index 1311173b42d2..485205eeb1a8 100644 --- a/products/mlengine/api.yaml +++ b/products/mlengine/api.yaml @@ -73,6 +73,7 @@ objects: properties: - !ruby/object:Api::Type::String name: 'name' + required: true description: The name specified for the version when it was created. # Even though only one region is supported, keeping this as an array # to future-proof it. diff --git a/products/monitoring/api.yaml b/products/monitoring/api.yaml index 1d92513a4fb9..756f9c12b337 100644 --- a/products/monitoring/api.yaml +++ b/products/monitoring/api.yaml @@ -721,6 +721,9 @@ objects: properties: - !ruby/object:Api::Type::String name: content + at_least_one_of: + - documentation.0.content + - documentation.0.mime_type description: | The text of the documentation, interpreted according to mimeType. The content may not exceed 8,192 Unicode characters and may not @@ -728,6 +731,9 @@ objects: whichever is smaller. - !ruby/object:Api::Type::String name: mimeType + at_least_one_of: + - documentation.0.content + - documentation.0.mime_type default_value: text/markdown description: | The format of the content field. Presently, only the value @@ -955,9 +961,11 @@ objects: properties: - !ruby/object:Api::Type::String name: password + required: true description: The password to authenticate. - !ruby/object:Api::Type::String name: username + required: true description: The username to authenticate. - !ruby/object:Api::Type::Integer name: port @@ -1010,6 +1018,9 @@ objects: - !ruby/object:Api::Type::Enum name: resourceType input: true + at_least_one_of: + - resource_group.0.resource_type + - resource_group.0.group_id description: The resource type of the group members. values: - :RESOURCE_TYPE_UNSPECIFIED @@ -1018,6 +1029,9 @@ objects: - !ruby/object:Api::Type::ResourceRef name: groupId input: true + at_least_one_of: + - resource_group.0.resource_type + - resource_group.0.group_id resource: Group imports: name description: The group of resources being monitored. Should be the `name` of a group diff --git a/products/pubsub/api.yaml b/products/pubsub/api.yaml index 2af625676fc1..9965f0d640a0 100644 --- a/products/pubsub/api.yaml +++ b/products/pubsub/api.yaml @@ -232,12 +232,13 @@ objects: A subscription is considered active as long as any connected subscriber is successfully consuming messages from the subscription or is issuing operations on the subscription. If expirationPolicy is not set, a default - policy with ttl of 31 days will be used. If it is set but left empty, the + policy with ttl of 31 days will be used. If it is set but ttl is "", the resource never expires. The minimum allowed value for expirationPolicy.ttl is 1 day. properties: - !ruby/object:Api::Type::String name: 'ttl' + required: true description: | Specifies the "time-to-live" duration for an associated resource. The resource expires if it is not active for a period of ttl. diff --git a/products/securityscanner/api.yaml b/products/securityscanner/api.yaml index 8fdb9350de81..a4cb1a634b9d 100644 --- a/products/securityscanner/api.yaml +++ b/products/securityscanner/api.yaml @@ -68,6 +68,9 @@ objects: properties: - !ruby/object:Api::Type::NestedObject name: googleAccount + at_least_one_of: + - authentication.0.google_account + - authentication.0.custom_account description: | Describes authentication configuration that uses a Google account. properties: @@ -85,6 +88,9 @@ objects: in GCP. - !ruby/object:Api::Type::NestedObject name: customAccount + at_least_one_of: + - authentication.0.google_account + - authentication.0.custom_account description: | Describes authentication configuration that uses a custom account. properties: diff --git a/products/tpu/api.yaml b/products/tpu/api.yaml index 39855c837987..825724edaa78 100644 --- a/products/tpu/api.yaml +++ b/products/tpu/api.yaml @@ -124,7 +124,7 @@ objects: name: 'preemptible' description: | Defines whether the TPU instance is preemptible. - default_value: false + required: true - !ruby/object:Api::Type::Array name: 'networkEndpoints' output: true diff --git a/templates/terraform/examples/backend_service_traffic_director_ring_hash.tf.erb b/templates/terraform/examples/backend_service_traffic_director_ring_hash.tf.erb index 9287a56e709b..080fb2aee9de 100644 --- a/templates/terraform/examples/backend_service_traffic_director_ring_hash.tf.erb +++ b/templates/terraform/examples/backend_service_traffic_director_ring_hash.tf.erb @@ -28,5 +28,6 @@ resource "google_compute_health_check" "health_check" { name = "<%= ctx[:vars]['health_check_name'] %>" http_health_check { + port = 80 } } diff --git a/templates/terraform/examples/backend_service_traffic_director_round_robin.tf.erb b/templates/terraform/examples/backend_service_traffic_director_round_robin.tf.erb index 5e1a368f0b77..068013aee910 100644 --- a/templates/terraform/examples/backend_service_traffic_director_round_robin.tf.erb +++ b/templates/terraform/examples/backend_service_traffic_director_round_robin.tf.erb @@ -12,5 +12,6 @@ resource "google_compute_health_check" "health_check" { name = "<%= ctx[:vars]['health_check_name'] %>" http_health_check { + port = 80 } } diff --git a/templates/terraform/examples/region_backend_service_ilb_ring_hash.tf.erb b/templates/terraform/examples/region_backend_service_ilb_ring_hash.tf.erb index b255aeee763b..4c754df00b24 100644 --- a/templates/terraform/examples/region_backend_service_ilb_ring_hash.tf.erb +++ b/templates/terraform/examples/region_backend_service_ilb_ring_hash.tf.erb @@ -30,6 +30,6 @@ resource "google_compute_health_check" "health_check" { name = "<%= ctx[:vars]['health_check_name'] %>" http_health_check { - + port = 80 } } diff --git a/templates/terraform/examples/region_backend_service_ilb_round_robin.tf.erb b/templates/terraform/examples/region_backend_service_ilb_round_robin.tf.erb index 00c4a38d7342..488de257e029 100644 --- a/templates/terraform/examples/region_backend_service_ilb_round_robin.tf.erb +++ b/templates/terraform/examples/region_backend_service_ilb_round_robin.tf.erb @@ -14,6 +14,6 @@ resource "google_compute_health_check" "health_check" { name = "<%= ctx[:vars]['health_check_name'] %>" http_health_check { - + port = 80 } } diff --git a/templates/terraform/examples/region_ssl_certificate_target_https_proxies.tf.erb b/templates/terraform/examples/region_ssl_certificate_target_https_proxies.tf.erb index fc4f8e3fb371..50a6bf311b36 100644 --- a/templates/terraform/examples/region_ssl_certificate_target_https_proxies.tf.erb +++ b/templates/terraform/examples/region_ssl_certificate_target_https_proxies.tf.erb @@ -67,5 +67,6 @@ resource "google_compute_region_health_check" "default" { region = "us-central1" name = "<%= ctx[:vars]['region_health_check_name'] %>" http_health_check { + port = 80 } } diff --git a/templates/terraform/examples/region_target_http_proxy_basic.tf.erb b/templates/terraform/examples/region_target_http_proxy_basic.tf.erb index feae132a5bf2..dff5528e3958 100644 --- a/templates/terraform/examples/region_target_http_proxy_basic.tf.erb +++ b/templates/terraform/examples/region_target_http_proxy_basic.tf.erb @@ -46,5 +46,6 @@ resource "google_compute_region_health_check" "default" { region = "us-central1" name = "<%= ctx[:vars]['region_health_check_name'] %>" http_health_check { + port = 80 } } diff --git a/templates/terraform/examples/region_target_https_proxy_basic.tf.erb b/templates/terraform/examples/region_target_https_proxy_basic.tf.erb index 37ae6dbbff87..bde6dde8671c 100644 --- a/templates/terraform/examples/region_target_https_proxy_basic.tf.erb +++ b/templates/terraform/examples/region_target_https_proxy_basic.tf.erb @@ -58,5 +58,6 @@ resource "google_compute_region_health_check" "default" { region = "us-central1" name = "<%= ctx[:vars]['region_health_check_name'] %>" http_health_check { + port = 80 } } diff --git a/templates/terraform/schema_property.erb b/templates/terraform/schema_property.erb index b4e6c13eff6e..59da1ea1a237 100644 --- a/templates/terraform/schema_property.erb +++ b/templates/terraform/schema_property.erb @@ -144,6 +144,9 @@ <% conflicting_props = property.conflicting().map(&:name).map(&:underscore) -%> ConflictsWith: <%= go_literal(conflicting_props) -%>, <% end -%> +<% unless property.at_least_one_of_list().empty? -%> + AtLeastOneOf: <%= go_literal(property.at_least_one_of_list) -%>, +<% end -%> }, <% else -%> // TODO: Property '<%= property.name -%>' of type <%= property.class -%> is not supported diff --git a/third_party/terraform/resources/resource_dataproc_cluster.go.erb b/third_party/terraform/resources/resource_dataproc_cluster.go.erb index b97cd75df9d7..7037e5343955 100644 --- a/third_party/terraform/resources/resource_dataproc_cluster.go.erb +++ b/third_party/terraform/resources/resource_dataproc_cluster.go.erb @@ -51,6 +51,9 @@ var ( "cluster_config.0.software_config", "cluster_config.0.initialization_action", "cluster_config.0.encryption_config", +<% unless version == 'ga' -%> + "cluster_config.0.autoscaling_config", +<% end -%> } ) @@ -397,9 +400,10 @@ func resourceDataprocCluster() *schema.Resource { }, <% unless version == 'ga' -%> "autoscaling_config": { - Type: schema.TypeList, - Optional: true, - MaxItems: 1, + Type: schema.TypeList, + Optional: true, + AtLeastOneOf: clusterConfigKeys, + MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "policy_uri": { diff --git a/third_party/terraform/tests/resource_compute_backend_service_test.go.erb b/third_party/terraform/tests/resource_compute_backend_service_test.go.erb index 2dcf00869839..ca472b30302d 100644 --- a/third_party/terraform/tests/resource_compute_backend_service_test.go.erb +++ b/third_party/terraform/tests/resource_compute_backend_service_test.go.erb @@ -692,7 +692,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, checkName) @@ -720,7 +720,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, checkName) @@ -757,7 +757,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, checkName) @@ -818,7 +818,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, checkName) @@ -1283,7 +1283,9 @@ resource "google_compute_instance" "endpoint-instance" { network_interface { subnetwork = "${google_compute_subnetwork.default.self_link}" - access_config { } + access_config { + network_tier = "PREMIUM" + } } } @@ -1359,7 +1361,9 @@ resource "google_compute_instance" "endpoint-instance" { network_interface { subnetwork = "${google_compute_subnetwork.default.self_link}" - access_config { } + access_config { + network_tier = "PREMIUM" + } } } diff --git a/third_party/terraform/tests/resource_compute_health_check_test.go b/third_party/terraform/tests/resource_compute_health_check_test.go index f91419cb9604..6fa1f5f2cf03 100644 --- a/third_party/terraform/tests/resource_compute_health_check_test.go +++ b/third_party/terraform/tests/resource_compute_health_check_test.go @@ -164,6 +164,7 @@ resource "google_compute_health_check" "foobar" { timeout_sec = 2 unhealthy_threshold = 3 tcp_health_check { + port = 443 } } `, hckName) @@ -326,8 +327,10 @@ resource "google_compute_health_check" "foobar" { unhealthy_threshold = 3 tcp_health_check { + port = 443 } ssl_health_check { + port = 443 } } `, hckName) diff --git a/third_party/terraform/tests/resource_compute_region_backend_service_test.go.erb b/third_party/terraform/tests/resource_compute_region_backend_service_test.go.erb index 79eddd2d37b9..dce271eec256 100644 --- a/third_party/terraform/tests/resource_compute_region_backend_service_test.go.erb +++ b/third_party/terraform/tests/resource_compute_region_backend_service_test.go.erb @@ -235,7 +235,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, checkName) @@ -264,7 +264,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, checkName) @@ -302,7 +302,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, checkName) @@ -401,7 +401,7 @@ resource "google_compute_health_check" "health_check" { name = "%s" http_health_check { - + port = 80 } } `, serviceName, igName, instanceName, checkName) @@ -442,6 +442,7 @@ resource "google_compute_health_check" "zero" { timeout_sec = 1 tcp_health_check { + port = 443 } } @@ -451,6 +452,7 @@ resource "google_compute_health_check" "one" { timeout_sec = 30 tcp_health_check { + port = 443 } } `, serviceName, checkOne, checkTwo) @@ -523,7 +525,7 @@ resource "google_compute_health_check" "default" { timeout_sec = 1 tcp_health_check { - + port = 443 } } `, serviceName, timeout, igName, itName, checkName) diff --git a/third_party/terraform/tests/resource_compute_region_health_check_test.go.erb b/third_party/terraform/tests/resource_compute_region_health_check_test.go.erb index ba2156e76058..0f0b77184a71 100644 --- a/third_party/terraform/tests/resource_compute_region_health_check_test.go.erb +++ b/third_party/terraform/tests/resource_compute_region_health_check_test.go.erb @@ -172,6 +172,7 @@ resource "google_compute_region_health_check" "foobar" { timeout_sec = 2 unhealthy_threshold = 3 tcp_health_check { + port = 443 } } `, hckName) @@ -334,8 +335,10 @@ resource "google_compute_region_health_check" "foobar" { unhealthy_threshold = 3 tcp_health_check { + port = 443 } ssl_health_check { + port = 443 } } `, hckName) diff --git a/third_party/terraform/tests/resource_compute_region_target_http_proxy_test.go.erb b/third_party/terraform/tests/resource_compute_region_target_http_proxy_test.go.erb index fbaf647d3bd9..c1d1da277e0f 100644 --- a/third_party/terraform/tests/resource_compute_region_target_http_proxy_test.go.erb +++ b/third_party/terraform/tests/resource_compute_region_target_http_proxy_test.go.erb @@ -60,7 +60,9 @@ func testAccComputeRegionTargetHttpProxy_basic1(target, backend, hc, urlmap1, ur resource "google_compute_region_health_check" "zero" { name = "%s" - http_health_check {} + http_health_check { + port = 443 + } } resource "google_compute_region_url_map" "foobar1" { @@ -125,7 +127,9 @@ func testAccComputeRegionTargetHttpProxy_basic2(target, backend, hc, urlmap1, ur resource "google_compute_region_health_check" "zero" { name = "%s" - http_health_check {} + http_health_check { + port = 443 + } } resource "google_compute_region_url_map" "foobar1" { diff --git a/third_party/terraform/tests/resource_compute_region_target_https_proxy_test.go.erb b/third_party/terraform/tests/resource_compute_region_target_https_proxy_test.go.erb index 709a251507f4..08f648381f24 100644 --- a/third_party/terraform/tests/resource_compute_region_target_https_proxy_test.go.erb +++ b/third_party/terraform/tests/resource_compute_region_target_https_proxy_test.go.erb @@ -63,12 +63,16 @@ resource "google_compute_region_backend_service" "foobar2" { resource "google_compute_region_health_check" "zero" { name = "httpsproxy-test-health-check1-%s" - http_health_check {} + http_health_check { + port = 443 + } } resource "google_compute_region_health_check" "one" { name = "httpsproxy-test-health-check2-%s" - http_health_check {} + http_health_check { + port = 443 + } } resource "google_compute_region_url_map" "foobar1" { @@ -157,12 +161,16 @@ resource "google_compute_region_backend_service" "foobar2" { resource "google_compute_region_health_check" "zero" { name = "httpsproxy-test-health-check1-%s" - http_health_check {} + http_health_check { + port = 443 + } } resource "google_compute_region_health_check" "one" { name = "httpsproxy-test-health-check2-%s" - http_health_check {} + http_health_check { + port = 443 + } } resource "google_compute_region_url_map" "foobar1" { diff --git a/third_party/terraform/tests/resource_compute_region_url_map_test.go.erb b/third_party/terraform/tests/resource_compute_region_url_map_test.go.erb index 7153f996ad82..5ef1eb069a01 100644 --- a/third_party/terraform/tests/resource_compute_region_url_map_test.go.erb +++ b/third_party/terraform/tests/resource_compute_region_url_map_test.go.erb @@ -114,6 +114,7 @@ resource "google_compute_region_health_check" "zero" { region = "us-central1" name = "regionurlmap-test-%s" http_health_check { + port = 80 } } @@ -159,6 +160,7 @@ resource "google_compute_region_health_check" "zero" { region = "us-central1" name = "regionurlmap-test-%s" http_health_check { + port = 80 } } @@ -204,6 +206,7 @@ resource "google_compute_region_health_check" "zero" { region = "us-central1" name = "regionurlmap-test-%s" http_health_check { + port = 80 } } @@ -258,6 +261,7 @@ resource "google_compute_region_health_check" "zero" { region = "us-central1" name = "regionurlmap-test-%s" http_health_check { + port = 80 } } @@ -332,6 +336,7 @@ resource "google_compute_region_health_check" "zero" { region = "us-central1" name = "regionurlmap-test-%s" http_health_check { + port = 80 } } diff --git a/third_party/terraform/tests/resource_pubsub_subscription_test.go b/third_party/terraform/tests/resource_pubsub_subscription_test.go index 96289ac04991..d7c7e2d8a2b6 100644 --- a/third_party/terraform/tests/resource_pubsub_subscription_test.go +++ b/third_party/terraform/tests/resource_pubsub_subscription_test.go @@ -130,7 +130,9 @@ resource "google_pubsub_subscription" "foo" { message_retention_duration = "1200s" retain_acked_messages = true ack_deadline_seconds = 20 - expiration_policy {} + expiration_policy { + ttl = "" + } } `, topic, subscription) } diff --git a/third_party/terraform/website/docs/guides/version_3_upgrade.html.markdown b/third_party/terraform/website/docs/guides/version_3_upgrade.html.markdown index dc77d44ff3ca..c4d88239ba0e 100644 --- a/third_party/terraform/website/docs/guides/version_3_upgrade.html.markdown +++ b/third_party/terraform/website/docs/guides/version_3_upgrade.html.markdown @@ -354,6 +354,13 @@ in config files, `interface` is now required on the `google_compute_instance.scr In an attempt to avoid allowing empty blocks in config files, `kms_key_self_link` is now required on the `google_compute_instance_template.disk_encryption_key` block. +## Resource: `google_compute_instance_template` + +### `kms_key_self_link` is now required on block `google_compute_instance_template.disk_encryption_key` + +In an attempt to avoid allowing empty blocks in config files, `kms_key_self_link` is now +required on the `google_compute_instance_template.disk_encryption_key` block. + ## Resource: `google_compute_network` ### `ipv4_range` is now removed