mmv1/products/gkeonprem/BareMetalCluster.yaml (981 lines of code) (raw):

# Copyright 2024 Google Inc. # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. --- name: 'BareMetalCluster' description: "A Google Bare Metal User Cluster." docs: id_format: 'projects/{{project}}/locations/{{location}}/bareMetalClusters/{{name}}' base_url: 'projects/{{project}}/locations/{{location}}/bareMetalClusters' self_link: 'projects/{{project}}/locations/{{location}}/bareMetalClusters/{{name}}' create_url: 'projects/{{project}}/locations/{{location}}/bareMetalClusters?bare_metal_cluster_id={{name}}' update_url: 'projects/{{project}}/locations/{{location}}/bareMetalClusters/{{name}}' update_verb: 'PATCH' update_mask: true delete_url: 'projects/{{project}}/locations/{{location}}/bareMetalClusters/{{name}}?force=true' import_format: - 'projects/{{project}}/locations/{{location}}/bareMetalClusters/{{name}}' timeouts: insert_minutes: 60 update_minutes: 60 delete_minutes: 60 async: actions: ['create', 'delete', 'update'] type: 'OpAsync' operation: base_url: '{{op_id}}' result: resource_inside_response: true custom_code: taint_resource_on_failed_create: true sweeper: url_substitutions: - region: "us-west1" examples: - name: 'gkeonprem_bare_metal_cluster_basic' primary_resource_id: 'cluster-basic' vars: name: 'my-cluster' test_env_vars: project: 'fake-backend-360322' - name: 'gkeonprem_bare_metal_cluster_manuallb' primary_resource_id: 'cluster-manuallb' vars: name: 'cluster-manuallb' test_env_vars: project: 'fake-backend-360322' - name: 'gkeonprem_bare_metal_cluster_bgplb' primary_resource_id: 'cluster-bgplb' vars: name: 'cluster-bgplb' test_env_vars: project: 'fake-backend-360322' parameters: - name: 'name' type: String description: The bare metal cluster name. url_param_only: true required: true immutable: true - name: 'location' type: String description: The location of the resource. url_param_only: true required: true immutable: true properties: - name: 'adminClusterMembership' type: String description: | The Admin Cluster this Bare Metal User Cluster belongs to. This is the full resource name of the Admin Cluster's hub membership. required: true immutable: true diff_suppress_func: 'tpgresource.ProjectNumberDiffSuppress' - name: 'description' type: String description: | A human readable description of this Bare Metal User Cluster. - name: 'bareMetalVersion' type: String description: | A human readable description of this Bare Metal User Cluster. required: true - name: 'annotations' type: KeyValueAnnotations description: | Annotations on the Bare Metal User Cluster. This field has the same restrictions as Kubernetes annotations. The total size of all keys and values combined is limited to 256k. Key can have 2 segments: prefix (optional) and name (required), separated by a slash (/). Prefix must be a DNS subdomain. Name must be 63 characters or less, begin and end with alphanumerics, with dashes (-), underscores (_), dots (.), and alphanumerics between. - name: 'networkConfig' type: NestedObject description: | Network configuration. required: true properties: - name: 'islandModeCidr' type: NestedObject exactly_one_of: - 'network_config.0.island_mode_cidr' properties: - name: 'serviceAddressCidrBlocks' type: Array description: | All services in the cluster are assigned an RFC1918 IPv4 address from these ranges. This field cannot be changed after creation. required: true item_type: type: String - name: 'podAddressCidrBlocks' type: Array description: | All pods in the cluster are assigned an RFC1918 IPv4 address from these ranges. This field cannot be changed after creation. required: true item_type: type: String - name: 'advancedNetworking' type: Boolean description: | Enables the use of advanced Anthos networking features, such as Bundled Load Balancing with BGP or the egress NAT gateway. Setting configuration for advanced networking features will automatically set this flag. - name: 'multipleNetworkInterfacesConfig' type: NestedObject description: | Configuration for multiple network interfaces. properties: - name: 'enabled' type: Boolean description: | Whether to enable multiple network interfaces for your pods. When set network_config.advanced_networking is automatically set to true. - name: 'srIovConfig' type: NestedObject description: | Configuration for SR-IOV. properties: - name: 'enabled' type: Boolean description: | Whether to install the SR-IOV operator. - name: 'controlPlane' type: NestedObject description: | Specifies the control plane configuration. required: true properties: - name: 'controlPlaneNodePoolConfig' type: NestedObject description: | Configures the node pool running the control plane. If specified the corresponding NodePool will be created for the cluster's control plane. The NodePool will have the same name and namespace as the cluster. required: true properties: - name: 'nodePoolConfig' type: NestedObject description: | The generic configuration for a node pool running the control plane. required: true properties: - name: 'nodeConfigs' type: Array description: The list of machine addresses in the Bare Metal Node Pool. item_type: type: NestedObject properties: - name: 'nodeIp' type: String description: | The default IPv4 address for SSH access and Kubernetes node. Example: 192.168.0.1 - name: 'labels' type: KeyValuePairs description: | The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see: - http://kubernetes.io/v1.1/docs/user-guide/labels.html An object containing a list of "key": value pairs. Example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. - name: 'operatingSystem' type: String description: | Specifies the nodes operating system (default: LINUX). default_value: "LINUX" - name: 'taints' type: Array description: | The initial taints assigned to nodes of this node pool. default_from_api: true item_type: type: NestedObject properties: - name: 'key' type: String description: | Key associated with the effect. - name: 'value' type: String description: | Value associated with the effect. - name: 'effect' type: Enum description: | Specifies the nodes operating system (default: LINUX). enum_values: - 'EFFECT_UNSPECIFIED' - 'PREFER_NO_SCHEDULE' - 'NO_EXECUTE' - name: 'labels' type: KeyValuePairs description: | The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see: - http://kubernetes.io/v1.1/docs/user-guide/labels.html An object containing a list of "key": value pairs. For example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. default_from_api: true - name: 'apiServerArgs' type: Array description: | Customizes the default API server args. Only a subset of customized flags are supported. Please refer to the API server documentation below to know the exact format: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/ item_type: type: NestedObject properties: - name: 'argument' type: String description: | The argument name as it appears on the API Server command line please make sure to remove the leading dashes. required: true - name: 'value' type: String description: | The value of the arg as it will be passed to the API Server command line. required: true - name: 'loadBalancer' type: NestedObject description: | Specifies the load balancer configuration. required: true properties: - name: 'vipConfig' type: NestedObject description: | Specified the Bare Metal Load Balancer Config required: true properties: - name: 'controlPlaneVip' type: String description: The VIP which you previously set aside for the Kubernetes API of this Bare Metal User Cluster. required: true - name: 'ingressVip' type: String description: The VIP which you previously set aside for ingress traffic into this Bare Metal User Cluster. required: true - name: 'portConfig' type: NestedObject description: | Specifies the load balancer ports. required: true properties: - name: 'controlPlaneLoadBalancerPort' type: Integer description: | The port that control plane hosted load balancers will listen on. required: true - name: 'metalLbConfig' type: NestedObject exactly_one_of: - 'load_balancer.0.metal_lb_config' - 'load_balancer.0.manual_lb_config' - 'load_balancer.0.bgp_lb_config' properties: - name: 'addressPools' type: Array description: | AddressPools is a list of non-overlapping IP pools used by load balancer typed services. All addresses must be routable to load balancer nodes. IngressVIP must be included in the pools. required: true item_type: type: NestedObject properties: - name: 'pool' type: String description: | The name of the address pool. required: true - name: 'addresses' type: Array description: | The addresses that are part of this pool. Each address must be either in the CIDR form (1.2.3.0/24) or range form (1.2.3.1-1.2.3.5). required: true item_type: type: String - name: 'avoidBuggyIps' type: Boolean description: | If true, avoid using IPs ending in .0 or .255. This avoids buggy consumer devices mistakenly dropping IPv4 traffic for those special IP addresses. - name: 'manualAssign' type: Boolean description: | If true, prevent IP addresses from being automatically assigned. - name: 'loadBalancerNodePoolConfig' type: NestedObject description: | Specifies the load balancer's node pool configuration. properties: - name: 'nodePoolConfig' type: NestedObject description: | The generic configuration for a node pool running a load balancer. properties: - name: 'nodeConfigs' type: Array description: The list of machine addresses in the Bare Metal Node Pool. item_type: type: NestedObject properties: - name: 'nodeIp' type: String description: | The default IPv4 address for SSH access and Kubernetes node. Example: 192.168.0.1 - name: 'labels' type: KeyValuePairs description: | The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see: - http://kubernetes.io/v1.1/docs/user-guide/labels.html An object containing a list of "key": value pairs. For example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. - name: 'operatingSystem' type: String description: | Specifies the nodes operating system (default: LINUX). default_from_api: true - name: 'taints' type: Array description: | The initial taints assigned to nodes of this node pool. default_from_api: true item_type: type: NestedObject properties: - name: 'key' type: String description: | Key associated with the effect. - name: 'value' type: String description: | Value associated with the effect. - name: 'effect' type: Enum description: | Specifies the nodes operating system (default: LINUX). enum_values: - 'EFFECT_UNSPECIFIED' - 'PREFER_NO_SCHEDULE' - 'NO_EXECUTE' - name: 'labels' type: KeyValuePairs description: | The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see: - http://kubernetes.io/v1.1/docs/user-guide/labels.html An object containing a list of "key": value pairs. For example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. default_from_api: true - name: 'manualLbConfig' type: NestedObject exactly_one_of: - 'load_balancer.0.metal_lb_config' - 'load_balancer.0.manual_lb_config' - 'load_balancer.0.bgp_lb_config' properties: - name: 'enabled' type: Boolean description: | Whether manual load balancing is enabled. required: true - name: 'bgpLbConfig' type: NestedObject description: | Configuration for BGP typed load balancers. exactly_one_of: - 'load_balancer.0.metal_lb_config' - 'load_balancer.0.manual_lb_config' - 'load_balancer.0.bgp_lb_config' properties: - name: 'asn' type: Integer description: | BGP autonomous system number (ASN) of the cluster. This field can be updated after cluster creation. required: true - name: 'bgpPeerConfigs' type: Array description: | The list of BGP peers that the cluster will connect to. At least one peer must be configured for each control plane node. Control plane nodes will connect to these peers to advertise the control plane VIP. The Services load balancer also uses these peers by default. This field can be updated after cluster creation. required: true item_type: type: NestedObject properties: - name: 'asn' type: Integer description: | BGP autonomous system number (ASN) for the network that contains the external peer device. required: true - name: 'ipAddress' type: String description: | The IP address of the external peer device. required: true - name: 'controlPlaneNodes' type: Array description: | The IP address of the control plane node that connects to the external peer. If you don't specify any control plane nodes, all control plane nodes can connect to the external peer. If you specify one or more IP addresses, only the nodes specified participate in peering sessions. item_type: type: String - name: 'addressPools' type: Array description: | AddressPools is a list of non-overlapping IP pools used by load balancer typed services. All addresses must be routable to load balancer nodes. IngressVIP must be included in the pools. required: true item_type: type: NestedObject properties: - name: 'pool' type: String description: | The name of the address pool. required: true - name: 'addresses' type: Array description: | The addresses that are part of this pool. Each address must be either in the CIDR form (1.2.3.0/24) or range form (1.2.3.1-1.2.3.5). required: true item_type: type: String - name: 'avoidBuggyIps' type: Boolean description: | If true, avoid using IPs ending in .0 or .255. This avoids buggy consumer devices mistakenly dropping IPv4 traffic for those special IP addresses. - name: 'manualAssign' type: String description: | If true, prevent IP addresses from being automatically assigned. - name: 'loadBalancerNodePoolConfig' type: NestedObject description: | Specifies the node pool running data plane load balancing. L2 connectivity is required among nodes in this pool. If missing, the control plane node pool is used for data plane load balancing. properties: - name: 'nodePoolConfig' type: NestedObject description: | The generic configuration for a node pool running a load balancer. properties: - name: 'nodeConfigs' type: Array description: The list of machine addresses in the Bare Metal Node Pool. item_type: type: NestedObject properties: - name: 'nodeIp' type: String description: | The default IPv4 address for SSH access and Kubernetes node. Example: 192.168.0.1 - name: 'labels' type: KeyValuePairs description: | The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see: - http://kubernetes.io/v1.1/docs/user-guide/labels.html An object containing a list of "key": value pairs. For example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. - name: 'operatingSystem' type: String description: | Specifies the nodes operating system (default: LINUX). - name: 'taints' type: Array description: | The initial taints assigned to nodes of this node pool. item_type: type: NestedObject properties: - name: 'key' type: String description: | Key associated with the effect. - name: 'value' type: String description: | Value associated with the effect. - name: 'effect' type: Enum description: | Specifies the nodes operating system (default: LINUX). enum_values: - 'EFFECT_UNSPECIFIED' - 'PREFER_NO_SCHEDULE' - 'NO_EXECUTE' - name: 'labels' type: KeyValuePairs description: | The map of Kubernetes labels (key/value pairs) to be applied to each node. These will added in addition to any default label(s) that Kubernetes may apply to the node. In case of conflict in label keys, the applied set may differ depending on the Kubernetes version -- it's best to assume the behavior is undefined and conflicts should be avoided. For more information, including usage and the valid values, see: - http://kubernetes.io/v1.1/docs/user-guide/labels.html An object containing a list of "key": value pairs. For example: { "name": "wrench", "mass": "1.3kg", "count": "3" }. - name: 'kubeletConfig' type: NestedObject description: | The modifiable kubelet configurations for the baremetal machines. properties: - name: 'registryPullQps' type: Integer description: | The limit of registry pulls per second. Setting this value to 0 means no limit. Updating this field may impact scalability by changing the amount of traffic produced by image pulls. Defaults to 5. default_value: 5 - name: 'registryBurst' type: Integer description: | The maximum size of bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding registry_pull_qps. The value must not be a negative number. Updating this field may impact scalability by changing the amount of traffic produced by image pulls. Defaults to 10. default_value: 10 - name: 'serializeImagePullsDisabled' type: Boolean description: | Prevents the Kubelet from pulling multiple images at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an Another Union File System (Aufs) storage backend. Issue https://github.com/kubernetes/kubernetes/issues/10959 has more details. - name: 'storage' type: NestedObject description: | Specifies the cluster storage configuration. required: true properties: - name: 'lvpShareConfig' type: NestedObject description: | Specifies the config for local PersistentVolumes backed by subdirectories in a shared filesystem. These subdirectores are automatically created during cluster creation. required: true properties: - name: 'lvpConfig' type: NestedObject description: | Defines the machine path and storage class for the LVP Share. required: true properties: - name: 'path' type: String description: | The host machine path. required: true - name: 'storageClass' type: String description: | The StorageClass name that PVs will be created with. required: true - name: 'sharedPathPvCount' type: Integer description: | The number of subdirectories to create under path. - name: 'lvpNodeMountsConfig' type: NestedObject description: | Specifies the config for local PersistentVolumes backed by mounted node disks. These disks need to be formatted and mounted by the user, which can be done before or after cluster creation. required: true properties: - name: 'path' type: String description: | The host machine path. required: true - name: 'storageClass' type: String description: | The StorageClass name that PVs will be created with. required: true - name: 'proxy' type: NestedObject description: | Specifies the cluster proxy configuration. properties: - name: 'uri' type: String description: | Specifies the address of your proxy server. For example: http://domain WARNING: Do not provide credentials in the format of http://(username:password@)domain these will be rejected by the server. required: true - name: 'noProxy' type: Array description: | A list of IPs, hostnames, and domains that should skip the proxy. For example ["127.0.0.1", "example.com", ".corp", "localhost"]. item_type: type: String - name: 'clusterOperations' type: NestedObject description: | Specifies the User Cluster's observability infrastructure. properties: - name: 'enableApplicationLogs' type: Boolean description: | Whether collection of application logs/metrics should be enabled (in addition to system logs/metrics). - name: 'maintenanceConfig' type: NestedObject description: | Specifies the workload node configurations. properties: - name: 'maintenanceAddressCidrBlocks' type: Array description: | All IPv4 address from these ranges will be placed into maintenance mode. Nodes in maintenance mode will be cordoned and drained. When both of these are true, the "baremetal.cluster.gke.io/maintenance" annotation will be set on the node resource. required: true item_type: type: String - name: 'nodeConfig' type: NestedObject description: | Specifies the workload node configurations. properties: - name: 'maxPodsPerNode' type: Integer description: | The maximum number of pods a node can run. The size of the CIDR range assigned to the node will be derived from this parameter. default_from_api: true - name: 'containerRuntime' type: Enum description: | The available runtimes that can be used to run containers in a Bare Metal User Cluster. default_from_api: true enum_values: - 'CONTAINER_RUNTIME_UNSPECIFIED' - 'DOCKER' - 'CONTAINERD' - name: 'nodeAccessConfig' type: NestedObject description: | Specifies the node access related settings for the bare metal user cluster. properties: - name: 'loginUser' type: String description: | LoginUser is the user name used to access node machines. It defaults to "root" if not set. required: false default_from_api: true - name: 'osEnvironmentConfig' type: NestedObject description: | OS environment related configurations. properties: - name: 'packageRepoExcluded' type: Boolean description: | Whether the package repo should not be included when initializing bare metal machines. required: true - name: 'securityConfig' type: NestedObject description: | Specifies the security related settings for the Bare Metal User Cluster. properties: - name: 'authorization' type: NestedObject description: | Configures user access to the Bare Metal User cluster. properties: - name: 'adminUsers' type: Array description: Users that will be granted the cluster-admin role on the cluster, providing full access to the cluster. required: true item_type: type: NestedObject properties: - name: 'username' type: String description: | The name of the user, e.g. `my-gcp-id@gmail.com`. required: true - name: 'binaryAuthorization' type: NestedObject description: Binary Authorization related configurations. properties: - name: 'evaluationMode' type: Enum description: | Mode of operation for binauthz policy evaluation. If unspecified, defaults to DISABLED. enum_values: - 'DISABLED' - 'PROJECT_SINGLETON_POLICY_ENFORCE' - name: 'upgradePolicy' type: NestedObject description: The cluster upgrade policy. properties: - name: 'policy' type: Enum description: Specifies which upgrade policy to use. enum_values: - 'SERIAL' - 'CONCURRENT' - name: 'uid' type: String description: | The unique identifier of the Bare Metal User Cluster. output: true - name: 'state' type: Enum description: The current state of this cluster. output: true enum_values: - 'STATE_UNSPECIFIED' - 'PROVISIONING' - 'RUNNING' - 'RECONCILING' - 'STOPPING' - 'ERROR' - 'DEGRADED' - name: 'endpoint' type: String description: | The IP address name of Bare Metal User Cluster's API server. output: true - name: 'reconciling' type: Boolean description: | If set, there are currently changes in flight to the Bare Metal User Cluster. output: true - name: 'createTime' type: Time description: | The time the cluster was created, in RFC3339 text format. output: true - name: 'updateTime' type: Time description: | The time the cluster was last updated, in RFC3339 text format. output: true - name: 'deleteTime' type: Time description: | The time the cluster was deleted, in RFC3339 text format. output: true - name: 'localName' type: String description: | The object name of the Bare Metal Cluster custom resource on the associated admin cluster. This field is used to support conflicting names when enrolling existing clusters to the API. When used as a part of cluster enrollment, this field will differ from the ID in the resource name. For new clusters, this field will match the user provided cluster ID and be visible in the last component of the resource name. It is not modifiable. All users should use this name to access their cluster using gkectl or kubectl and should expect to see the local name when viewing admin cluster controller logs. output: true - name: 'etag' type: String description: | This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. Allows clients to perform consistent read-modify-writes through optimistic concurrency control. output: true - name: 'fleet' type: NestedObject description: | Fleet related configuration. Fleets are a Google Cloud concept for logically organizing clusters, letting you use and manage multi-cluster capabilities and apply consistent policies across your systems. See [Anthos Fleets](https://cloud.google.com/anthos/multicluster-management/fleets) for more details on Anthos multi-cluster capabilities using Fleets. output: true properties: - name: 'membership' type: String description: | The name of the managed Hub Membership resource associated to this cluster. Membership names are formatted as `projects/<project-number>/locations/<location>/memberships/<cluster-id>`. output: true - name: 'status' type: NestedObject description: | Specifies detailed cluster status. output: true properties: - name: 'errorMessage' type: String description: | Human-friendly representation of the error message from the user cluster controller. The error message can be temporary as the user cluster controller creates a cluster or node pool. If the error message persists for a longer period of time, it can be used to surface error message to indicate real problems requiring user intervention. output: true - name: 'conditions' type: Array description: | ResourceConditions provide a standard mechanism for higher-level status reporting from user cluster controller. output: true item_type: type: NestedObject properties: - name: 'type' type: String description: | Type of the condition. (e.g., ClusterRunning, NodePoolRunning or ServerSidePreflightReady) - name: 'reason' type: String description: | Machine-readable message indicating details about last transition. - name: 'message' type: String description: | Human-readable message indicating details about last transition. - name: 'lastTransitionTime' type: Time description: | Last time the condition transit from one status to another. output: true - name: 'state' type: Enum description: The lifecycle state of the condition. output: true enum_values: - 'STATE_UNSPECIFIED' - 'STATE_TRUE' - 'STATE_FALSE' - 'STATE_UNKNOWN' - name: 'validationCheck' type: NestedObject description: | Specifies the security related settings for the Bare Metal User Cluster. output: true properties: - name: 'options' type: Enum description: Options used for the validation check. output: true enum_values: - 'OPTIONS_UNSPECIFIED' - 'SKIP_VALIDATION_CHECK_BLOCKING' - 'SKIP_VALIDATION_ALL' - name: 'status' type: NestedObject description: | Specifies the detailed validation check status output: true properties: - name: 'result' type: Array description: Individual checks which failed as part of the Preflight check execution. output: true item_type: type: NestedObject properties: - name: 'options' type: Enum description: Options used for the validation check. output: true enum_values: - 'STATE_UNKNOWN' - 'STATE_FAILURE' - 'STATE_SKIPPED' - 'STATE_UNKNOWN' - 'STATE_FATAL' - 'STATE_WARNING' - name: 'description' type: String description: | The description of the validation check. output: true - name: 'category' type: String description: | The category of the validation. output: true - name: 'reason' type: String description: | A human-readable message of the check failure. output: true - name: 'details' type: String description: | Detailed failure information, which might be unformatted. output: true - name: 'scenario' type: Enum description: The scenario when the preflight checks were run.. output: true enum_values: - 'SCENARIO_UNSPECIFIED' - 'CREATE' - 'UPDATE'