| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| // ---------------------------------------------------------------------------- |
| // |
| // *** AUTO GENERATED CODE *** Type: MMv1 *** |
| // |
| // ---------------------------------------------------------------------------- |
| // |
| // This file is automatically generated by Magic Modules and manual |
| // changes will be clobbered when the file is regenerated. |
| // |
| // Please read more about how to change this file in |
| // .github/CONTRIBUTING.md. |
| // |
| // ---------------------------------------------------------------------------- |
| |
| package compute |
| |
| import ( |
| "context" |
| "fmt" |
| "log" |
| "net/http" |
| "reflect" |
| "strconv" |
| "strings" |
| "time" |
| |
| "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff" |
| "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" |
| |
| "github.com/hashicorp/terraform-provider-google-beta/google-beta/tpgresource" |
| transport_tpg "github.com/hashicorp/terraform-provider-google-beta/google-beta/transport" |
| "github.com/hashicorp/terraform-provider-google-beta/google-beta/verify" |
| ) |
| |
| // Whether the port should be set or not |
| func validatePortSpec(diff *schema.ResourceDiff, blockName string) error { |
| block := diff.Get(blockName + ".0").(map[string]interface{}) |
| portSpec := block["port_specification"] |
| portName := block["port_name"] |
| port := block["port"] |
| |
| hasPort := (port != nil && port != 0) |
| noName := (portName == nil || portName == "") |
| |
| if portSpec == "USE_NAMED_PORT" && hasPort { |
| return fmt.Errorf("Error in %s: port cannot be specified when using port_specification USE_NAMED_PORT.", blockName) |
| } |
| if portSpec == "USE_NAMED_PORT" && noName { |
| return fmt.Errorf("Error in %s: Must specify port_name when using USE_NAMED_PORT as port_specification.", blockName) |
| } |
| |
| if portSpec == "USE_SERVING_PORT" && hasPort { |
| return fmt.Errorf("Error in %s: port cannot be specified when using port_specification USE_SERVING_PORT.", blockName) |
| } |
| if portSpec == "USE_SERVING_PORT" && !noName { |
| return fmt.Errorf("Error in %s: port_name cannot be specified when using port_specification USE_SERVING_PORT.", blockName) |
| } |
| |
| return nil |
| } |
| |
| func healthCheckCustomizeDiff(_ context.Context, diff *schema.ResourceDiff, v interface{}) error { |
| if diff.Get("http_health_check") != nil { |
| return validatePortSpec(diff, "http_health_check") |
| } |
| if diff.Get("https_health_check") != nil { |
| return validatePortSpec(diff, "https_health_check") |
| } |
| if diff.Get("http2_health_check") != nil { |
| return validatePortSpec(diff, "http2_health_check") |
| } |
| if diff.Get("tcp_health_check") != nil { |
| return validatePortSpec(diff, "tcp_health_check") |
| } |
| if diff.Get("ssl_health_check") != nil { |
| return validatePortSpec(diff, "ssl_health_check") |
| } |
| |
| return nil |
| } |
| |
| func portDiffSuppress(k, old, new string, d *schema.ResourceData) bool { |
| b := strings.Split(k, ".") |
| if len(b) > 2 { |
| attr := b[2] |
| |
| if attr == "port" { |
| var defaultPort int64 |
| |
| blockType := b[0] |
| |
| switch blockType { |
| case "http_health_check": |
| defaultPort = 80 |
| case "https_health_check": |
| defaultPort = 443 |
| case "http2_health_check": |
| defaultPort = 443 |
| case "tcp_health_check": |
| defaultPort = 80 |
| case "ssl_health_check": |
| defaultPort = 443 |
| } |
| |
| oldPort, _ := strconv.Atoi(old) |
| newPort, _ := strconv.Atoi(new) |
| |
| portSpec := d.Get(b[0] + ".0.port_specification") |
| if int64(oldPort) == defaultPort && newPort == 0 && (portSpec == "USE_FIXED_PORT" || portSpec == "") { |
| return true |
| } |
| } |
| } |
| |
| return false |
| } |
| |
| func ResourceComputeHealthCheck() *schema.Resource { |
| return &schema.Resource{ |
| Create: resourceComputeHealthCheckCreate, |
| Read: resourceComputeHealthCheckRead, |
| Update: resourceComputeHealthCheckUpdate, |
| Delete: resourceComputeHealthCheckDelete, |
| |
| Importer: &schema.ResourceImporter{ |
| State: resourceComputeHealthCheckImport, |
| }, |
| |
| Timeouts: &schema.ResourceTimeout{ |
| Create: schema.DefaultTimeout(20 * time.Minute), |
| Update: schema.DefaultTimeout(20 * time.Minute), |
| Delete: schema.DefaultTimeout(20 * time.Minute), |
| }, |
| |
| CustomizeDiff: customdiff.All( |
| healthCheckCustomizeDiff, |
| tpgresource.DefaultProviderProject, |
| ), |
| |
| Schema: map[string]*schema.Schema{ |
| "name": { |
| Type: schema.TypeString, |
| Required: true, |
| ForceNew: true, |
| Description: `Name of the resource. Provided by the client when the resource is |
| created. The name must be 1-63 characters long, and comply with |
| RFC1035. Specifically, the name must be 1-63 characters long and |
| match the regular expression '[a-z]([-a-z0-9]*[a-z0-9])?' which means |
| the first character must be a lowercase letter, and all following |
| characters must be a dash, lowercase letter, or digit, except the |
| last character, which cannot be a dash.`, |
| }, |
| "check_interval_sec": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `How often (in seconds) to send a health check. The default value is 5 |
| seconds.`, |
| Default: 5, |
| }, |
| "description": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `An optional description of this resource. Provide this property when |
| you create the resource.`, |
| }, |
| "grpc_health_check": { |
| Type: schema.TypeList, |
| Optional: true, |
| DiffSuppressFunc: portDiffSuppress, |
| Description: `A nested object resource`, |
| MaxItems: 1, |
| Elem: &schema.Resource{ |
| Schema: map[string]*schema.Schema{ |
| "grpc_service_name": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `The gRPC service name for the health check. |
| The value of grpcServiceName has the following meanings by convention: |
| - Empty serviceName means the overall status of all services at the backend. |
| - Non-empty serviceName means the health of that gRPC service, as defined by the owner of the service. |
| The grpcServiceName can only be ASCII.`, |
| AtLeastOneOf: []string{"grpc_health_check.0.port", "grpc_health_check.0.port_name", "grpc_health_check.0.port_specification", "grpc_health_check.0.grpc_service_name"}, |
| }, |
| "port": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `The port number for the health check request. |
| Must be specified if portName and portSpecification are not set |
| or if port_specification is USE_FIXED_PORT. Valid values are 1 through 65535.`, |
| AtLeastOneOf: []string{"grpc_health_check.0.port", "grpc_health_check.0.port_name", "grpc_health_check.0.port_specification", "grpc_health_check.0.grpc_service_name"}, |
| }, |
| "port_name": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `Port name as defined in InstanceGroup#NamedPort#name. If both port and |
| port_name are defined, port takes precedence.`, |
| AtLeastOneOf: []string{"grpc_health_check.0.port", "grpc_health_check.0.port_name", "grpc_health_check.0.port_specification", "grpc_health_check.0.grpc_service_name"}, |
| }, |
| "port_specification": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT", ""}), |
| Description: `Specifies how port is selected for health checking, can be one of the |
| following values: |
| |
| * 'USE_FIXED_PORT': The port number in 'port' is used for health checking. |
| |
| * 'USE_NAMED_PORT': The 'portName' is used for health checking. |
| |
| * 'USE_SERVING_PORT': For NetworkEndpointGroup, the port specified for each |
| network endpoint is used for health checking. For other backends, the |
| port or named port specified in the Backend Service is used for health |
| checking. |
| |
| If not specified, gRPC health check follows behavior specified in 'port' and |
| 'portName' fields. Possible values: ["USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT"]`, |
| AtLeastOneOf: []string{"grpc_health_check.0.port", "grpc_health_check.0.port_name", "grpc_health_check.0.port_specification", "grpc_health_check.0.grpc_service_name"}, |
| }, |
| }, |
| }, |
| ExactlyOneOf: []string{"http_health_check", "https_health_check", "http2_health_check", "tcp_health_check", "ssl_health_check", "grpc_health_check"}, |
| }, |
| "healthy_threshold": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `A so-far unhealthy instance will be marked healthy after this many |
| consecutive successes. The default value is 2.`, |
| Default: 2, |
| }, |
| "http2_health_check": { |
| Type: schema.TypeList, |
| Optional: true, |
| DiffSuppressFunc: portDiffSuppress, |
| Description: `A nested object resource`, |
| MaxItems: 1, |
| Elem: &schema.Resource{ |
| Schema: map[string]*schema.Schema{ |
| "host": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `The TCP port number for the HTTP2 health check request. |
| The default value is 443.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_name": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `Port name as defined in InstanceGroup#NamedPort#name. If both port and |
| port_name are defined, port takes precedence.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_specification": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT", ""}), |
| Description: `Specifies how port is selected for health checking, can be one of the |
| following values: |
| |
| * 'USE_FIXED_PORT': The port number in 'port' is used for health checking. |
| |
| * 'USE_NAMED_PORT': The 'portName' is used for health checking. |
| |
| * 'USE_SERVING_PORT': For NetworkEndpointGroup, the port specified for each |
| network endpoint is used for health checking. For other backends, the |
| port or named port specified in the Backend Service is used for health |
| checking. |
| |
| If not specified, HTTP2 health check follows behavior specified in 'port' and |
| 'portName' fields. Possible values: ["USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT"]`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "proxy_header": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"NONE", "PROXY_V1", ""}), |
| Description: `Specifies the type of proxy header to append before sending data to the |
| backend. Default value: "NONE" Possible values: ["NONE", "PROXY_V1"]`, |
| Default: "NONE", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "request_path": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `The request path of the HTTP2 health check request. |
| The default value is /.`, |
| Default: "/", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "response": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| }, |
| }, |
| ExactlyOneOf: []string{"http_health_check", "https_health_check", "http2_health_check", "tcp_health_check", "ssl_health_check", "grpc_health_check"}, |
| }, |
| "http_health_check": { |
| Type: schema.TypeList, |
| Optional: true, |
| DiffSuppressFunc: portDiffSuppress, |
| Description: `A nested object resource`, |
| MaxItems: 1, |
| Elem: &schema.Resource{ |
| Schema: map[string]*schema.Schema{ |
| "host": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `The TCP port number for the HTTP health check request. |
| The default value is 80.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_name": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `Port name as defined in InstanceGroup#NamedPort#name. If both port and |
| port_name are defined, port takes precedence.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_specification": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT", ""}), |
| Description: `Specifies how port is selected for health checking, can be one of the |
| following values: |
| |
| * 'USE_FIXED_PORT': The port number in 'port' is used for health checking. |
| |
| * 'USE_NAMED_PORT': The 'portName' is used for health checking. |
| |
| * 'USE_SERVING_PORT': For NetworkEndpointGroup, the port specified for each |
| network endpoint is used for health checking. For other backends, the |
| port or named port specified in the Backend Service is used for health |
| checking. |
| |
| If not specified, HTTP health check follows behavior specified in 'port' and |
| 'portName' fields. Possible values: ["USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT"]`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "proxy_header": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"NONE", "PROXY_V1", ""}), |
| Description: `Specifies the type of proxy header to append before sending data to the |
| backend. Default value: "NONE" Possible values: ["NONE", "PROXY_V1"]`, |
| Default: "NONE", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "request_path": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `The request path of the HTTP health check request. |
| The default value is /.`, |
| Default: "/", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "response": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| }, |
| }, |
| ExactlyOneOf: []string{"http_health_check", "https_health_check", "http2_health_check", "tcp_health_check", "ssl_health_check", "grpc_health_check"}, |
| }, |
| "https_health_check": { |
| Type: schema.TypeList, |
| Optional: true, |
| DiffSuppressFunc: portDiffSuppress, |
| Description: `A nested object resource`, |
| MaxItems: 1, |
| Elem: &schema.Resource{ |
| Schema: map[string]*schema.Schema{ |
| "host": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `The TCP port number for the HTTPS health check request. |
| The default value is 443.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_name": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `Port name as defined in InstanceGroup#NamedPort#name. If both port and |
| port_name are defined, port takes precedence.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_specification": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT", ""}), |
| Description: `Specifies how port is selected for health checking, can be one of the |
| following values: |
| |
| * 'USE_FIXED_PORT': The port number in 'port' is used for health checking. |
| |
| * 'USE_NAMED_PORT': The 'portName' is used for health checking. |
| |
| * 'USE_SERVING_PORT': For NetworkEndpointGroup, the port specified for each |
| network endpoint is used for health checking. For other backends, the |
| port or named port specified in the Backend Service is used for health |
| checking. |
| |
| If not specified, HTTPS health check follows behavior specified in 'port' and |
| 'portName' fields. Possible values: ["USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT"]`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "proxy_header": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"NONE", "PROXY_V1", ""}), |
| Description: `Specifies the type of proxy header to append before sending data to the |
| backend. Default value: "NONE" Possible values: ["NONE", "PROXY_V1"]`, |
| Default: "NONE", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "request_path": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `The request path of the HTTPS health check request. |
| The default value is /.`, |
| Default: "/", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "response": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| }, |
| }, |
| ExactlyOneOf: []string{"http_health_check", "https_health_check", "http2_health_check", "tcp_health_check", "ssl_health_check", "grpc_health_check"}, |
| }, |
| "log_config": { |
| Type: schema.TypeList, |
| Computed: true, |
| Optional: true, |
| Description: `Configure logging on this health check.`, |
| MaxItems: 1, |
| Elem: &schema.Resource{ |
| Schema: map[string]*schema.Schema{ |
| "enable": { |
| Type: schema.TypeBool, |
| Optional: true, |
| Description: `Indicates whether or not to export logs. This is false by default, |
| which means no health check logging will be done.`, |
| Default: false, |
| }, |
| }, |
| }, |
| }, |
| "source_regions": { |
| Type: schema.TypeList, |
| Optional: true, |
| Description: `The list of cloud regions from which health checks are performed. If |
| any regions are specified, then exactly 3 regions should be specified. |
| The region names must be valid names of Google Cloud regions. This can |
| only be set for global health check. If this list is non-empty, then |
| there are restrictions on what other health check fields are supported |
| and what other resources can use this health check: |
| |
| * SSL, HTTP2, and GRPC protocols are not supported. |
| |
| * The TCP request field is not supported. |
| |
| * The proxyHeader field for HTTP, HTTPS, and TCP is not supported. |
| |
| * The checkIntervalSec field must be at least 30. |
| |
| * The health check cannot be used with BackendService nor with managed |
| instance group auto-healing.`, |
| MinItems: 3, |
| MaxItems: 3, |
| Elem: &schema.Schema{ |
| Type: schema.TypeString, |
| }, |
| }, |
| "ssl_health_check": { |
| Type: schema.TypeList, |
| Optional: true, |
| DiffSuppressFunc: portDiffSuppress, |
| Description: `A nested object resource`, |
| MaxItems: 1, |
| Elem: &schema.Resource{ |
| Schema: map[string]*schema.Schema{ |
| "port": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `The TCP port number for the SSL health check request. |
| The default value is 443.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_name": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `Port name as defined in InstanceGroup#NamedPort#name. If both port and |
| port_name are defined, port takes precedence.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_specification": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT", ""}), |
| Description: `Specifies how port is selected for health checking, can be one of the |
| following values: |
| |
| * 'USE_FIXED_PORT': The port number in 'port' is used for health checking. |
| |
| * 'USE_NAMED_PORT': The 'portName' is used for health checking. |
| |
| * 'USE_SERVING_PORT': For NetworkEndpointGroup, the port specified for each |
| network endpoint is used for health checking. For other backends, the |
| port or named port specified in the Backend Service is used for health |
| checking. |
| |
| If not specified, SSL health check follows behavior specified in 'port' and |
| 'portName' fields. Possible values: ["USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT"]`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "proxy_header": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"NONE", "PROXY_V1", ""}), |
| Description: `Specifies the type of proxy header to append before sending data to the |
| backend. Default value: "NONE" Possible values: ["NONE", "PROXY_V1"]`, |
| Default: "NONE", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "request": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `The application data to send once the SSL connection has been |
| established (default value is empty). If both request and response are |
| empty, the connection establishment alone will indicate health. The request |
| data can only be ASCII.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "response": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| }, |
| }, |
| ExactlyOneOf: []string{"http_health_check", "https_health_check", "http2_health_check", "tcp_health_check", "ssl_health_check", "grpc_health_check"}, |
| }, |
| "tcp_health_check": { |
| Type: schema.TypeList, |
| Optional: true, |
| DiffSuppressFunc: portDiffSuppress, |
| Description: `A nested object resource`, |
| MaxItems: 1, |
| Elem: &schema.Resource{ |
| Schema: map[string]*schema.Schema{ |
| "port": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `The TCP port number for the TCP health check request. |
| The default value is 443.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_name": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `Port name as defined in InstanceGroup#NamedPort#name. If both port and |
| port_name are defined, port takes precedence.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "port_specification": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT", ""}), |
| Description: `Specifies how port is selected for health checking, can be one of the |
| following values: |
| |
| * 'USE_FIXED_PORT': The port number in 'port' is used for health checking. |
| |
| * 'USE_NAMED_PORT': The 'portName' is used for health checking. |
| |
| * 'USE_SERVING_PORT': For NetworkEndpointGroup, the port specified for each |
| network endpoint is used for health checking. For other backends, the |
| port or named port specified in the Backend Service is used for health |
| checking. |
| |
| If not specified, TCP health check follows behavior specified in 'port' and |
| 'portName' fields. Possible values: ["USE_FIXED_PORT", "USE_NAMED_PORT", "USE_SERVING_PORT"]`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "proxy_header": { |
| Type: schema.TypeString, |
| Optional: true, |
| ValidateFunc: verify.ValidateEnum([]string{"NONE", "PROXY_V1", ""}), |
| Description: `Specifies the type of proxy header to append before sending data to the |
| backend. Default value: "NONE" Possible values: ["NONE", "PROXY_V1"]`, |
| Default: "NONE", |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "request": { |
| Type: schema.TypeString, |
| Optional: true, |
| Description: `The application data to send once the TCP connection has been |
| established (default value is empty). If both request and response are |
| empty, the connection establishment alone will indicate health. The request |
| data can only be ASCII.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| "response": { |
| Type: schema.TypeString, |
| Optional: true, |
| 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.`, |
| AtLeastOneOf: []string{"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"}, |
| }, |
| }, |
| }, |
| ExactlyOneOf: []string{"http_health_check", "https_health_check", "http2_health_check", "tcp_health_check", "ssl_health_check", "grpc_health_check"}, |
| }, |
| "timeout_sec": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `How long (in seconds) to wait before claiming failure. |
| The default value is 5 seconds. It is invalid for timeoutSec to have |
| greater value than checkIntervalSec.`, |
| Default: 5, |
| }, |
| "unhealthy_threshold": { |
| Type: schema.TypeInt, |
| Optional: true, |
| Description: `A so-far healthy instance will be marked unhealthy after this many |
| consecutive failures. The default value is 2.`, |
| Default: 2, |
| }, |
| "creation_timestamp": { |
| Type: schema.TypeString, |
| Computed: true, |
| Description: `Creation timestamp in RFC3339 text format.`, |
| }, |
| "type": { |
| Type: schema.TypeString, |
| Computed: true, |
| Description: `The type of the health check. One of HTTP, HTTPS, TCP, or SSL.`, |
| }, |
| "project": { |
| Type: schema.TypeString, |
| Optional: true, |
| Computed: true, |
| ForceNew: true, |
| }, |
| "self_link": { |
| Type: schema.TypeString, |
| Computed: true, |
| }, |
| }, |
| UseJSONNumber: true, |
| } |
| } |
| |
| func resourceComputeHealthCheckCreate(d *schema.ResourceData, meta interface{}) error { |
| config := meta.(*transport_tpg.Config) |
| userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent) |
| if err != nil { |
| return err |
| } |
| |
| obj := make(map[string]interface{}) |
| checkIntervalSecProp, err := expandComputeHealthCheckCheckIntervalSec(d.Get("check_interval_sec"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("check_interval_sec"); !tpgresource.IsEmptyValue(reflect.ValueOf(checkIntervalSecProp)) && (ok || !reflect.DeepEqual(v, checkIntervalSecProp)) { |
| obj["checkIntervalSec"] = checkIntervalSecProp |
| } |
| descriptionProp, err := expandComputeHealthCheckDescription(d.Get("description"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("description"); ok || !reflect.DeepEqual(v, descriptionProp) { |
| obj["description"] = descriptionProp |
| } |
| healthyThresholdProp, err := expandComputeHealthCheckHealthyThreshold(d.Get("healthy_threshold"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("healthy_threshold"); !tpgresource.IsEmptyValue(reflect.ValueOf(healthyThresholdProp)) && (ok || !reflect.DeepEqual(v, healthyThresholdProp)) { |
| obj["healthyThreshold"] = healthyThresholdProp |
| } |
| nameProp, err := expandComputeHealthCheckName(d.Get("name"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("name"); !tpgresource.IsEmptyValue(reflect.ValueOf(nameProp)) && (ok || !reflect.DeepEqual(v, nameProp)) { |
| obj["name"] = nameProp |
| } |
| timeoutSecProp, err := expandComputeHealthCheckTimeoutSec(d.Get("timeout_sec"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("timeout_sec"); !tpgresource.IsEmptyValue(reflect.ValueOf(timeoutSecProp)) && (ok || !reflect.DeepEqual(v, timeoutSecProp)) { |
| obj["timeoutSec"] = timeoutSecProp |
| } |
| sourceRegionsProp, err := expandComputeHealthCheckSourceRegions(d.Get("source_regions"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("source_regions"); !tpgresource.IsEmptyValue(reflect.ValueOf(sourceRegionsProp)) && (ok || !reflect.DeepEqual(v, sourceRegionsProp)) { |
| obj["sourceRegions"] = sourceRegionsProp |
| } |
| unhealthyThresholdProp, err := expandComputeHealthCheckUnhealthyThreshold(d.Get("unhealthy_threshold"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("unhealthy_threshold"); !tpgresource.IsEmptyValue(reflect.ValueOf(unhealthyThresholdProp)) && (ok || !reflect.DeepEqual(v, unhealthyThresholdProp)) { |
| obj["unhealthyThreshold"] = unhealthyThresholdProp |
| } |
| httpHealthCheckProp, err := expandComputeHealthCheckHttpHealthCheck(d.Get("http_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("http_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(httpHealthCheckProp)) && (ok || !reflect.DeepEqual(v, httpHealthCheckProp)) { |
| obj["httpHealthCheck"] = httpHealthCheckProp |
| } |
| httpsHealthCheckProp, err := expandComputeHealthCheckHttpsHealthCheck(d.Get("https_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("https_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(httpsHealthCheckProp)) && (ok || !reflect.DeepEqual(v, httpsHealthCheckProp)) { |
| obj["httpsHealthCheck"] = httpsHealthCheckProp |
| } |
| tcpHealthCheckProp, err := expandComputeHealthCheckTcpHealthCheck(d.Get("tcp_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("tcp_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(tcpHealthCheckProp)) && (ok || !reflect.DeepEqual(v, tcpHealthCheckProp)) { |
| obj["tcpHealthCheck"] = tcpHealthCheckProp |
| } |
| sslHealthCheckProp, err := expandComputeHealthCheckSslHealthCheck(d.Get("ssl_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("ssl_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(sslHealthCheckProp)) && (ok || !reflect.DeepEqual(v, sslHealthCheckProp)) { |
| obj["sslHealthCheck"] = sslHealthCheckProp |
| } |
| http2HealthCheckProp, err := expandComputeHealthCheckHttp2HealthCheck(d.Get("http2_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("http2_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(http2HealthCheckProp)) && (ok || !reflect.DeepEqual(v, http2HealthCheckProp)) { |
| obj["http2HealthCheck"] = http2HealthCheckProp |
| } |
| grpcHealthCheckProp, err := expandComputeHealthCheckGrpcHealthCheck(d.Get("grpc_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("grpc_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(grpcHealthCheckProp)) && (ok || !reflect.DeepEqual(v, grpcHealthCheckProp)) { |
| obj["grpcHealthCheck"] = grpcHealthCheckProp |
| } |
| logConfigProp, err := expandComputeHealthCheckLogConfig(d.Get("log_config"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("log_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(logConfigProp)) && (ok || !reflect.DeepEqual(v, logConfigProp)) { |
| obj["logConfig"] = logConfigProp |
| } |
| |
| obj, err = resourceComputeHealthCheckEncoder(d, meta, obj) |
| if err != nil { |
| return err |
| } |
| |
| url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/global/healthChecks") |
| if err != nil { |
| return err |
| } |
| |
| log.Printf("[DEBUG] Creating new HealthCheck: %#v", obj) |
| billingProject := "" |
| |
| project, err := tpgresource.GetProject(d, config) |
| if err != nil { |
| return fmt.Errorf("Error fetching project for HealthCheck: %s", err) |
| } |
| billingProject = project |
| |
| // err == nil indicates that the billing_project value was found |
| if bp, err := tpgresource.GetBillingProject(d, config); err == nil { |
| billingProject = bp |
| } |
| |
| headers := make(http.Header) |
| res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ |
| Config: config, |
| Method: "POST", |
| Project: billingProject, |
| RawURL: url, |
| UserAgent: userAgent, |
| Body: obj, |
| Timeout: d.Timeout(schema.TimeoutCreate), |
| Headers: headers, |
| }) |
| if err != nil { |
| return fmt.Errorf("Error creating HealthCheck: %s", err) |
| } |
| |
| // Store the ID now |
| id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/global/healthChecks/{{name}}") |
| if err != nil { |
| return fmt.Errorf("Error constructing id: %s", err) |
| } |
| d.SetId(id) |
| |
| err = ComputeOperationWaitTime( |
| config, res, project, "Creating HealthCheck", userAgent, |
| d.Timeout(schema.TimeoutCreate)) |
| |
| if err != nil { |
| // The resource didn't actually create |
| d.SetId("") |
| return fmt.Errorf("Error waiting to create HealthCheck: %s", err) |
| } |
| |
| log.Printf("[DEBUG] Finished creating HealthCheck %q: %#v", d.Id(), res) |
| |
| return resourceComputeHealthCheckRead(d, meta) |
| } |
| |
| func resourceComputeHealthCheckRead(d *schema.ResourceData, meta interface{}) error { |
| config := meta.(*transport_tpg.Config) |
| userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent) |
| if err != nil { |
| return err |
| } |
| |
| url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/global/healthChecks/{{name}}") |
| if err != nil { |
| return err |
| } |
| |
| billingProject := "" |
| |
| project, err := tpgresource.GetProject(d, config) |
| if err != nil { |
| return fmt.Errorf("Error fetching project for HealthCheck: %s", err) |
| } |
| billingProject = project |
| |
| // err == nil indicates that the billing_project value was found |
| if bp, err := tpgresource.GetBillingProject(d, config); err == nil { |
| billingProject = bp |
| } |
| |
| headers := make(http.Header) |
| res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ |
| Config: config, |
| Method: "GET", |
| Project: billingProject, |
| RawURL: url, |
| UserAgent: userAgent, |
| Headers: headers, |
| }) |
| if err != nil { |
| return transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("ComputeHealthCheck %q", d.Id())) |
| } |
| |
| if err := d.Set("project", project); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| |
| if err := d.Set("check_interval_sec", flattenComputeHealthCheckCheckIntervalSec(res["checkIntervalSec"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("creation_timestamp", flattenComputeHealthCheckCreationTimestamp(res["creationTimestamp"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("description", flattenComputeHealthCheckDescription(res["description"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("healthy_threshold", flattenComputeHealthCheckHealthyThreshold(res["healthyThreshold"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("name", flattenComputeHealthCheckName(res["name"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("timeout_sec", flattenComputeHealthCheckTimeoutSec(res["timeoutSec"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("source_regions", flattenComputeHealthCheckSourceRegions(res["sourceRegions"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("unhealthy_threshold", flattenComputeHealthCheckUnhealthyThreshold(res["unhealthyThreshold"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("type", flattenComputeHealthCheckType(res["type"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("http_health_check", flattenComputeHealthCheckHttpHealthCheck(res["httpHealthCheck"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("https_health_check", flattenComputeHealthCheckHttpsHealthCheck(res["httpsHealthCheck"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("tcp_health_check", flattenComputeHealthCheckTcpHealthCheck(res["tcpHealthCheck"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("ssl_health_check", flattenComputeHealthCheckSslHealthCheck(res["sslHealthCheck"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("http2_health_check", flattenComputeHealthCheckHttp2HealthCheck(res["http2HealthCheck"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("grpc_health_check", flattenComputeHealthCheckGrpcHealthCheck(res["grpcHealthCheck"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("log_config", flattenComputeHealthCheckLogConfig(res["logConfig"], d, config)); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| if err := d.Set("self_link", tpgresource.ConvertSelfLinkToV1(res["selfLink"].(string))); err != nil { |
| return fmt.Errorf("Error reading HealthCheck: %s", err) |
| } |
| |
| return nil |
| } |
| |
| func resourceComputeHealthCheckUpdate(d *schema.ResourceData, meta interface{}) error { |
| config := meta.(*transport_tpg.Config) |
| userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent) |
| if err != nil { |
| return err |
| } |
| |
| billingProject := "" |
| |
| project, err := tpgresource.GetProject(d, config) |
| if err != nil { |
| return fmt.Errorf("Error fetching project for HealthCheck: %s", err) |
| } |
| billingProject = project |
| |
| obj := make(map[string]interface{}) |
| checkIntervalSecProp, err := expandComputeHealthCheckCheckIntervalSec(d.Get("check_interval_sec"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("check_interval_sec"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, checkIntervalSecProp)) { |
| obj["checkIntervalSec"] = checkIntervalSecProp |
| } |
| descriptionProp, err := expandComputeHealthCheckDescription(d.Get("description"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("description"); ok || !reflect.DeepEqual(v, descriptionProp) { |
| obj["description"] = descriptionProp |
| } |
| healthyThresholdProp, err := expandComputeHealthCheckHealthyThreshold(d.Get("healthy_threshold"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("healthy_threshold"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, healthyThresholdProp)) { |
| obj["healthyThreshold"] = healthyThresholdProp |
| } |
| nameProp, err := expandComputeHealthCheckName(d.Get("name"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("name"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, nameProp)) { |
| obj["name"] = nameProp |
| } |
| timeoutSecProp, err := expandComputeHealthCheckTimeoutSec(d.Get("timeout_sec"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("timeout_sec"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, timeoutSecProp)) { |
| obj["timeoutSec"] = timeoutSecProp |
| } |
| sourceRegionsProp, err := expandComputeHealthCheckSourceRegions(d.Get("source_regions"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("source_regions"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, sourceRegionsProp)) { |
| obj["sourceRegions"] = sourceRegionsProp |
| } |
| unhealthyThresholdProp, err := expandComputeHealthCheckUnhealthyThreshold(d.Get("unhealthy_threshold"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("unhealthy_threshold"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, unhealthyThresholdProp)) { |
| obj["unhealthyThreshold"] = unhealthyThresholdProp |
| } |
| httpHealthCheckProp, err := expandComputeHealthCheckHttpHealthCheck(d.Get("http_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("http_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, httpHealthCheckProp)) { |
| obj["httpHealthCheck"] = httpHealthCheckProp |
| } |
| httpsHealthCheckProp, err := expandComputeHealthCheckHttpsHealthCheck(d.Get("https_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("https_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, httpsHealthCheckProp)) { |
| obj["httpsHealthCheck"] = httpsHealthCheckProp |
| } |
| tcpHealthCheckProp, err := expandComputeHealthCheckTcpHealthCheck(d.Get("tcp_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("tcp_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, tcpHealthCheckProp)) { |
| obj["tcpHealthCheck"] = tcpHealthCheckProp |
| } |
| sslHealthCheckProp, err := expandComputeHealthCheckSslHealthCheck(d.Get("ssl_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("ssl_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, sslHealthCheckProp)) { |
| obj["sslHealthCheck"] = sslHealthCheckProp |
| } |
| http2HealthCheckProp, err := expandComputeHealthCheckHttp2HealthCheck(d.Get("http2_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("http2_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, http2HealthCheckProp)) { |
| obj["http2HealthCheck"] = http2HealthCheckProp |
| } |
| grpcHealthCheckProp, err := expandComputeHealthCheckGrpcHealthCheck(d.Get("grpc_health_check"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("grpc_health_check"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, grpcHealthCheckProp)) { |
| obj["grpcHealthCheck"] = grpcHealthCheckProp |
| } |
| logConfigProp, err := expandComputeHealthCheckLogConfig(d.Get("log_config"), d, config) |
| if err != nil { |
| return err |
| } else if v, ok := d.GetOkExists("log_config"); !tpgresource.IsEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, logConfigProp)) { |
| obj["logConfig"] = logConfigProp |
| } |
| |
| obj, err = resourceComputeHealthCheckEncoder(d, meta, obj) |
| if err != nil { |
| return err |
| } |
| |
| url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/global/healthChecks/{{name}}") |
| if err != nil { |
| return err |
| } |
| |
| log.Printf("[DEBUG] Updating HealthCheck %q: %#v", d.Id(), obj) |
| headers := make(http.Header) |
| |
| // err == nil indicates that the billing_project value was found |
| if bp, err := tpgresource.GetBillingProject(d, config); err == nil { |
| billingProject = bp |
| } |
| |
| res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ |
| Config: config, |
| Method: "PUT", |
| Project: billingProject, |
| RawURL: url, |
| UserAgent: userAgent, |
| Body: obj, |
| Timeout: d.Timeout(schema.TimeoutUpdate), |
| Headers: headers, |
| }) |
| |
| if err != nil { |
| return fmt.Errorf("Error updating HealthCheck %q: %s", d.Id(), err) |
| } else { |
| log.Printf("[DEBUG] Finished updating HealthCheck %q: %#v", d.Id(), res) |
| } |
| |
| err = ComputeOperationWaitTime( |
| config, res, project, "Updating HealthCheck", userAgent, |
| d.Timeout(schema.TimeoutUpdate)) |
| |
| if err != nil { |
| return err |
| } |
| |
| return resourceComputeHealthCheckRead(d, meta) |
| } |
| |
| func resourceComputeHealthCheckDelete(d *schema.ResourceData, meta interface{}) error { |
| config := meta.(*transport_tpg.Config) |
| userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent) |
| if err != nil { |
| return err |
| } |
| |
| billingProject := "" |
| |
| project, err := tpgresource.GetProject(d, config) |
| if err != nil { |
| return fmt.Errorf("Error fetching project for HealthCheck: %s", err) |
| } |
| billingProject = project |
| |
| url, err := tpgresource.ReplaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/global/healthChecks/{{name}}") |
| if err != nil { |
| return err |
| } |
| |
| var obj map[string]interface{} |
| |
| // err == nil indicates that the billing_project value was found |
| if bp, err := tpgresource.GetBillingProject(d, config); err == nil { |
| billingProject = bp |
| } |
| |
| headers := make(http.Header) |
| |
| log.Printf("[DEBUG] Deleting HealthCheck %q", d.Id()) |
| res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{ |
| Config: config, |
| Method: "DELETE", |
| Project: billingProject, |
| RawURL: url, |
| UserAgent: userAgent, |
| Body: obj, |
| Timeout: d.Timeout(schema.TimeoutDelete), |
| Headers: headers, |
| }) |
| if err != nil { |
| return transport_tpg.HandleNotFoundError(err, d, "HealthCheck") |
| } |
| |
| err = ComputeOperationWaitTime( |
| config, res, project, "Deleting HealthCheck", userAgent, |
| d.Timeout(schema.TimeoutDelete)) |
| |
| if err != nil { |
| return err |
| } |
| |
| log.Printf("[DEBUG] Finished deleting HealthCheck %q: %#v", d.Id(), res) |
| return nil |
| } |
| |
| func resourceComputeHealthCheckImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { |
| config := meta.(*transport_tpg.Config) |
| if err := tpgresource.ParseImportId([]string{ |
| "^projects/(?P<project>[^/]+)/global/healthChecks/(?P<name>[^/]+)$", |
| "^(?P<project>[^/]+)/(?P<name>[^/]+)$", |
| "^(?P<name>[^/]+)$", |
| }, d, config); err != nil { |
| return nil, err |
| } |
| |
| // Replace import id for the resource id |
| id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/global/healthChecks/{{name}}") |
| if err != nil { |
| return nil, fmt.Errorf("Error constructing id: %s", err) |
| } |
| d.SetId(id) |
| |
| return []*schema.ResourceData{d}, nil |
| } |
| |
| func flattenComputeHealthCheckCheckIntervalSec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckCreationTimestamp(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckDescription(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHealthyThreshold(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckTimeoutSec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckSourceRegions(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckUnhealthyThreshold(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckType(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpHealthCheck(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| if v == nil { |
| return nil |
| } |
| original := v.(map[string]interface{}) |
| if len(original) == 0 { |
| return nil |
| } |
| transformed := make(map[string]interface{}) |
| transformed["host"] = |
| flattenComputeHealthCheckHttpHealthCheckHost(original["host"], d, config) |
| transformed["request_path"] = |
| flattenComputeHealthCheckHttpHealthCheckRequestPath(original["requestPath"], d, config) |
| transformed["response"] = |
| flattenComputeHealthCheckHttpHealthCheckResponse(original["response"], d, config) |
| transformed["port"] = |
| flattenComputeHealthCheckHttpHealthCheckPort(original["port"], d, config) |
| transformed["port_name"] = |
| flattenComputeHealthCheckHttpHealthCheckPortName(original["portName"], d, config) |
| transformed["proxy_header"] = |
| flattenComputeHealthCheckHttpHealthCheckProxyHeader(original["proxyHeader"], d, config) |
| transformed["port_specification"] = |
| flattenComputeHealthCheckHttpHealthCheckPortSpecification(original["portSpecification"], d, config) |
| return []interface{}{transformed} |
| } |
| func flattenComputeHealthCheckHttpHealthCheckHost(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpHealthCheckRequestPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpHealthCheckResponse(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpHealthCheckPort(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckHttpHealthCheckPortName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpHealthCheckProxyHeader(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpHealthCheckPortSpecification(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpsHealthCheck(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| if v == nil { |
| return nil |
| } |
| original := v.(map[string]interface{}) |
| if len(original) == 0 { |
| return nil |
| } |
| transformed := make(map[string]interface{}) |
| transformed["host"] = |
| flattenComputeHealthCheckHttpsHealthCheckHost(original["host"], d, config) |
| transformed["request_path"] = |
| flattenComputeHealthCheckHttpsHealthCheckRequestPath(original["requestPath"], d, config) |
| transformed["response"] = |
| flattenComputeHealthCheckHttpsHealthCheckResponse(original["response"], d, config) |
| transformed["port"] = |
| flattenComputeHealthCheckHttpsHealthCheckPort(original["port"], d, config) |
| transformed["port_name"] = |
| flattenComputeHealthCheckHttpsHealthCheckPortName(original["portName"], d, config) |
| transformed["proxy_header"] = |
| flattenComputeHealthCheckHttpsHealthCheckProxyHeader(original["proxyHeader"], d, config) |
| transformed["port_specification"] = |
| flattenComputeHealthCheckHttpsHealthCheckPortSpecification(original["portSpecification"], d, config) |
| return []interface{}{transformed} |
| } |
| func flattenComputeHealthCheckHttpsHealthCheckHost(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpsHealthCheckRequestPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpsHealthCheckResponse(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpsHealthCheckPort(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckHttpsHealthCheckPortName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpsHealthCheckProxyHeader(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttpsHealthCheckPortSpecification(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckTcpHealthCheck(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| if v == nil { |
| return nil |
| } |
| original := v.(map[string]interface{}) |
| if len(original) == 0 { |
| return nil |
| } |
| transformed := make(map[string]interface{}) |
| transformed["request"] = |
| flattenComputeHealthCheckTcpHealthCheckRequest(original["request"], d, config) |
| transformed["response"] = |
| flattenComputeHealthCheckTcpHealthCheckResponse(original["response"], d, config) |
| transformed["port"] = |
| flattenComputeHealthCheckTcpHealthCheckPort(original["port"], d, config) |
| transformed["port_name"] = |
| flattenComputeHealthCheckTcpHealthCheckPortName(original["portName"], d, config) |
| transformed["proxy_header"] = |
| flattenComputeHealthCheckTcpHealthCheckProxyHeader(original["proxyHeader"], d, config) |
| transformed["port_specification"] = |
| flattenComputeHealthCheckTcpHealthCheckPortSpecification(original["portSpecification"], d, config) |
| return []interface{}{transformed} |
| } |
| func flattenComputeHealthCheckTcpHealthCheckRequest(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckTcpHealthCheckResponse(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckTcpHealthCheckPort(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckTcpHealthCheckPortName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckTcpHealthCheckProxyHeader(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckTcpHealthCheckPortSpecification(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckSslHealthCheck(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| if v == nil { |
| return nil |
| } |
| original := v.(map[string]interface{}) |
| if len(original) == 0 { |
| return nil |
| } |
| transformed := make(map[string]interface{}) |
| transformed["request"] = |
| flattenComputeHealthCheckSslHealthCheckRequest(original["request"], d, config) |
| transformed["response"] = |
| flattenComputeHealthCheckSslHealthCheckResponse(original["response"], d, config) |
| transformed["port"] = |
| flattenComputeHealthCheckSslHealthCheckPort(original["port"], d, config) |
| transformed["port_name"] = |
| flattenComputeHealthCheckSslHealthCheckPortName(original["portName"], d, config) |
| transformed["proxy_header"] = |
| flattenComputeHealthCheckSslHealthCheckProxyHeader(original["proxyHeader"], d, config) |
| transformed["port_specification"] = |
| flattenComputeHealthCheckSslHealthCheckPortSpecification(original["portSpecification"], d, config) |
| return []interface{}{transformed} |
| } |
| func flattenComputeHealthCheckSslHealthCheckRequest(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckSslHealthCheckResponse(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckSslHealthCheckPort(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckSslHealthCheckPortName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckSslHealthCheckProxyHeader(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckSslHealthCheckPortSpecification(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttp2HealthCheck(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| if v == nil { |
| return nil |
| } |
| original := v.(map[string]interface{}) |
| if len(original) == 0 { |
| return nil |
| } |
| transformed := make(map[string]interface{}) |
| transformed["host"] = |
| flattenComputeHealthCheckHttp2HealthCheckHost(original["host"], d, config) |
| transformed["request_path"] = |
| flattenComputeHealthCheckHttp2HealthCheckRequestPath(original["requestPath"], d, config) |
| transformed["response"] = |
| flattenComputeHealthCheckHttp2HealthCheckResponse(original["response"], d, config) |
| transformed["port"] = |
| flattenComputeHealthCheckHttp2HealthCheckPort(original["port"], d, config) |
| transformed["port_name"] = |
| flattenComputeHealthCheckHttp2HealthCheckPortName(original["portName"], d, config) |
| transformed["proxy_header"] = |
| flattenComputeHealthCheckHttp2HealthCheckProxyHeader(original["proxyHeader"], d, config) |
| transformed["port_specification"] = |
| flattenComputeHealthCheckHttp2HealthCheckPortSpecification(original["portSpecification"], d, config) |
| return []interface{}{transformed} |
| } |
| func flattenComputeHealthCheckHttp2HealthCheckHost(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttp2HealthCheckRequestPath(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttp2HealthCheckResponse(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttp2HealthCheckPort(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckHttp2HealthCheckPortName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttp2HealthCheckProxyHeader(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckHttp2HealthCheckPortSpecification(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckGrpcHealthCheck(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| if v == nil { |
| return nil |
| } |
| original := v.(map[string]interface{}) |
| if len(original) == 0 { |
| return nil |
| } |
| transformed := make(map[string]interface{}) |
| transformed["port"] = |
| flattenComputeHealthCheckGrpcHealthCheckPort(original["port"], d, config) |
| transformed["port_name"] = |
| flattenComputeHealthCheckGrpcHealthCheckPortName(original["portName"], d, config) |
| transformed["port_specification"] = |
| flattenComputeHealthCheckGrpcHealthCheckPortSpecification(original["portSpecification"], d, config) |
| transformed["grpc_service_name"] = |
| flattenComputeHealthCheckGrpcHealthCheckGrpcServiceName(original["grpcServiceName"], d, config) |
| return []interface{}{transformed} |
| } |
| func flattenComputeHealthCheckGrpcHealthCheckPort(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| // Handles the string fixed64 format |
| if strVal, ok := v.(string); ok { |
| if intVal, err := tpgresource.StringToFixed64(strVal); err == nil { |
| return intVal |
| } |
| } |
| |
| // number values are represented as float64 |
| if floatVal, ok := v.(float64); ok { |
| intVal := int(floatVal) |
| return intVal |
| } |
| |
| return v // let terraform core handle it otherwise |
| } |
| |
| func flattenComputeHealthCheckGrpcHealthCheckPortName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckGrpcHealthCheckPortSpecification(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckGrpcHealthCheckGrpcServiceName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| return v |
| } |
| |
| func flattenComputeHealthCheckLogConfig(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} { |
| transformed := make(map[string]interface{}) |
| if v == nil { |
| // Disabled by default, but API will not return object if value is false |
| transformed["enable"] = false |
| return []interface{}{transformed} |
| } |
| |
| original := v.(map[string]interface{}) |
| transformed["enable"] = original["enable"] |
| return []interface{}{transformed} |
| } |
| |
| func expandComputeHealthCheckCheckIntervalSec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckDescription(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHealthyThreshold(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckTimeoutSec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckSourceRegions(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckUnhealthyThreshold(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheck(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| l := v.([]interface{}) |
| if len(l) == 0 || l[0] == nil { |
| return nil, nil |
| } |
| raw := l[0] |
| original := raw.(map[string]interface{}) |
| transformed := make(map[string]interface{}) |
| |
| transformedHost, err := expandComputeHealthCheckHttpHealthCheckHost(original["host"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedHost); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["host"] = transformedHost |
| } |
| |
| transformedRequestPath, err := expandComputeHealthCheckHttpHealthCheckRequestPath(original["request_path"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedRequestPath); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["requestPath"] = transformedRequestPath |
| } |
| |
| transformedResponse, err := expandComputeHealthCheckHttpHealthCheckResponse(original["response"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedResponse); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["response"] = transformedResponse |
| } |
| |
| transformedPort, err := expandComputeHealthCheckHttpHealthCheckPort(original["port"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPort); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["port"] = transformedPort |
| } |
| |
| transformedPortName, err := expandComputeHealthCheckHttpHealthCheckPortName(original["port_name"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortName); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portName"] = transformedPortName |
| } |
| |
| transformedProxyHeader, err := expandComputeHealthCheckHttpHealthCheckProxyHeader(original["proxy_header"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedProxyHeader); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["proxyHeader"] = transformedProxyHeader |
| } |
| |
| transformedPortSpecification, err := expandComputeHealthCheckHttpHealthCheckPortSpecification(original["port_specification"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortSpecification); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portSpecification"] = transformedPortSpecification |
| } |
| |
| return transformed, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheckHost(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheckRequestPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheckResponse(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheckPort(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheckPortName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheckProxyHeader(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpHealthCheckPortSpecification(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheck(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| l := v.([]interface{}) |
| if len(l) == 0 || l[0] == nil { |
| return nil, nil |
| } |
| raw := l[0] |
| original := raw.(map[string]interface{}) |
| transformed := make(map[string]interface{}) |
| |
| transformedHost, err := expandComputeHealthCheckHttpsHealthCheckHost(original["host"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedHost); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["host"] = transformedHost |
| } |
| |
| transformedRequestPath, err := expandComputeHealthCheckHttpsHealthCheckRequestPath(original["request_path"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedRequestPath); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["requestPath"] = transformedRequestPath |
| } |
| |
| transformedResponse, err := expandComputeHealthCheckHttpsHealthCheckResponse(original["response"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedResponse); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["response"] = transformedResponse |
| } |
| |
| transformedPort, err := expandComputeHealthCheckHttpsHealthCheckPort(original["port"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPort); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["port"] = transformedPort |
| } |
| |
| transformedPortName, err := expandComputeHealthCheckHttpsHealthCheckPortName(original["port_name"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortName); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portName"] = transformedPortName |
| } |
| |
| transformedProxyHeader, err := expandComputeHealthCheckHttpsHealthCheckProxyHeader(original["proxy_header"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedProxyHeader); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["proxyHeader"] = transformedProxyHeader |
| } |
| |
| transformedPortSpecification, err := expandComputeHealthCheckHttpsHealthCheckPortSpecification(original["port_specification"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortSpecification); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portSpecification"] = transformedPortSpecification |
| } |
| |
| return transformed, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheckHost(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheckRequestPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheckResponse(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheckPort(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheckPortName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheckProxyHeader(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttpsHealthCheckPortSpecification(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckTcpHealthCheck(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| l := v.([]interface{}) |
| if len(l) == 0 || l[0] == nil { |
| return nil, nil |
| } |
| raw := l[0] |
| original := raw.(map[string]interface{}) |
| transformed := make(map[string]interface{}) |
| |
| transformedRequest, err := expandComputeHealthCheckTcpHealthCheckRequest(original["request"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedRequest); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["request"] = transformedRequest |
| } |
| |
| transformedResponse, err := expandComputeHealthCheckTcpHealthCheckResponse(original["response"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedResponse); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["response"] = transformedResponse |
| } |
| |
| transformedPort, err := expandComputeHealthCheckTcpHealthCheckPort(original["port"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPort); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["port"] = transformedPort |
| } |
| |
| transformedPortName, err := expandComputeHealthCheckTcpHealthCheckPortName(original["port_name"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortName); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portName"] = transformedPortName |
| } |
| |
| transformedProxyHeader, err := expandComputeHealthCheckTcpHealthCheckProxyHeader(original["proxy_header"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedProxyHeader); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["proxyHeader"] = transformedProxyHeader |
| } |
| |
| transformedPortSpecification, err := expandComputeHealthCheckTcpHealthCheckPortSpecification(original["port_specification"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortSpecification); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portSpecification"] = transformedPortSpecification |
| } |
| |
| return transformed, nil |
| } |
| |
| func expandComputeHealthCheckTcpHealthCheckRequest(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckTcpHealthCheckResponse(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckTcpHealthCheckPort(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckTcpHealthCheckPortName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckTcpHealthCheckProxyHeader(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckTcpHealthCheckPortSpecification(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckSslHealthCheck(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| l := v.([]interface{}) |
| if len(l) == 0 || l[0] == nil { |
| return nil, nil |
| } |
| raw := l[0] |
| original := raw.(map[string]interface{}) |
| transformed := make(map[string]interface{}) |
| |
| transformedRequest, err := expandComputeHealthCheckSslHealthCheckRequest(original["request"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedRequest); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["request"] = transformedRequest |
| } |
| |
| transformedResponse, err := expandComputeHealthCheckSslHealthCheckResponse(original["response"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedResponse); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["response"] = transformedResponse |
| } |
| |
| transformedPort, err := expandComputeHealthCheckSslHealthCheckPort(original["port"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPort); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["port"] = transformedPort |
| } |
| |
| transformedPortName, err := expandComputeHealthCheckSslHealthCheckPortName(original["port_name"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortName); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portName"] = transformedPortName |
| } |
| |
| transformedProxyHeader, err := expandComputeHealthCheckSslHealthCheckProxyHeader(original["proxy_header"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedProxyHeader); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["proxyHeader"] = transformedProxyHeader |
| } |
| |
| transformedPortSpecification, err := expandComputeHealthCheckSslHealthCheckPortSpecification(original["port_specification"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortSpecification); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portSpecification"] = transformedPortSpecification |
| } |
| |
| return transformed, nil |
| } |
| |
| func expandComputeHealthCheckSslHealthCheckRequest(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckSslHealthCheckResponse(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckSslHealthCheckPort(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckSslHealthCheckPortName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckSslHealthCheckProxyHeader(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckSslHealthCheckPortSpecification(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheck(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| l := v.([]interface{}) |
| if len(l) == 0 || l[0] == nil { |
| return nil, nil |
| } |
| raw := l[0] |
| original := raw.(map[string]interface{}) |
| transformed := make(map[string]interface{}) |
| |
| transformedHost, err := expandComputeHealthCheckHttp2HealthCheckHost(original["host"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedHost); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["host"] = transformedHost |
| } |
| |
| transformedRequestPath, err := expandComputeHealthCheckHttp2HealthCheckRequestPath(original["request_path"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedRequestPath); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["requestPath"] = transformedRequestPath |
| } |
| |
| transformedResponse, err := expandComputeHealthCheckHttp2HealthCheckResponse(original["response"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedResponse); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["response"] = transformedResponse |
| } |
| |
| transformedPort, err := expandComputeHealthCheckHttp2HealthCheckPort(original["port"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPort); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["port"] = transformedPort |
| } |
| |
| transformedPortName, err := expandComputeHealthCheckHttp2HealthCheckPortName(original["port_name"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortName); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portName"] = transformedPortName |
| } |
| |
| transformedProxyHeader, err := expandComputeHealthCheckHttp2HealthCheckProxyHeader(original["proxy_header"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedProxyHeader); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["proxyHeader"] = transformedProxyHeader |
| } |
| |
| transformedPortSpecification, err := expandComputeHealthCheckHttp2HealthCheckPortSpecification(original["port_specification"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortSpecification); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portSpecification"] = transformedPortSpecification |
| } |
| |
| return transformed, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheckHost(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheckRequestPath(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheckResponse(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheckPort(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheckPortName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheckProxyHeader(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckHttp2HealthCheckPortSpecification(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckGrpcHealthCheck(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| l := v.([]interface{}) |
| if len(l) == 0 || l[0] == nil { |
| return nil, nil |
| } |
| raw := l[0] |
| original := raw.(map[string]interface{}) |
| transformed := make(map[string]interface{}) |
| |
| transformedPort, err := expandComputeHealthCheckGrpcHealthCheckPort(original["port"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPort); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["port"] = transformedPort |
| } |
| |
| transformedPortName, err := expandComputeHealthCheckGrpcHealthCheckPortName(original["port_name"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortName); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portName"] = transformedPortName |
| } |
| |
| transformedPortSpecification, err := expandComputeHealthCheckGrpcHealthCheckPortSpecification(original["port_specification"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedPortSpecification); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["portSpecification"] = transformedPortSpecification |
| } |
| |
| transformedGrpcServiceName, err := expandComputeHealthCheckGrpcHealthCheckGrpcServiceName(original["grpc_service_name"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedGrpcServiceName); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["grpcServiceName"] = transformedGrpcServiceName |
| } |
| |
| return transformed, nil |
| } |
| |
| func expandComputeHealthCheckGrpcHealthCheckPort(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckGrpcHealthCheckPortName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckGrpcHealthCheckPortSpecification(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckGrpcHealthCheckGrpcServiceName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func expandComputeHealthCheckLogConfig(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| l := v.([]interface{}) |
| if len(l) == 0 || l[0] == nil { |
| return nil, nil |
| } |
| raw := l[0] |
| original := raw.(map[string]interface{}) |
| transformed := make(map[string]interface{}) |
| |
| transformedEnable, err := expandComputeHealthCheckLogConfigEnable(original["enable"], d, config) |
| if err != nil { |
| return nil, err |
| } else if val := reflect.ValueOf(transformedEnable); val.IsValid() && !tpgresource.IsEmptyValue(val) { |
| transformed["enable"] = transformedEnable |
| } |
| |
| return transformed, nil |
| } |
| |
| func expandComputeHealthCheckLogConfigEnable(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) { |
| return v, nil |
| } |
| |
| func resourceComputeHealthCheckEncoder(d *schema.ResourceData, meta interface{}, obj map[string]interface{}) (map[string]interface{}, error) { |
| if _, ok := d.GetOk("http_health_check"); ok { |
| hc := d.Get("http_health_check").([]interface{})[0] |
| ps := hc.(map[string]interface{})["port_specification"] |
| pn := hc.(map[string]interface{})["port_name"] |
| |
| if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { |
| m := obj["httpHealthCheck"].(map[string]interface{}) |
| if m["port"] == nil { |
| m["port"] = 80 |
| } |
| } |
| obj["type"] = "HTTP" |
| return obj, nil |
| } |
| if _, ok := d.GetOk("https_health_check"); ok { |
| hc := d.Get("https_health_check").([]interface{})[0] |
| ps := hc.(map[string]interface{})["port_specification"] |
| pn := hc.(map[string]interface{})["port_name"] |
| |
| if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { |
| m := obj["httpsHealthCheck"].(map[string]interface{}) |
| if m["port"] == nil { |
| m["port"] = 443 |
| } |
| } |
| obj["type"] = "HTTPS" |
| return obj, nil |
| } |
| if _, ok := d.GetOk("http2_health_check"); ok { |
| hc := d.Get("http2_health_check").([]interface{})[0] |
| ps := hc.(map[string]interface{})["port_specification"] |
| pn := hc.(map[string]interface{})["port_name"] |
| |
| if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { |
| m := obj["http2HealthCheck"].(map[string]interface{}) |
| if m["port"] == nil { |
| m["port"] = 443 |
| } |
| } |
| obj["type"] = "HTTP2" |
| return obj, nil |
| } |
| if _, ok := d.GetOk("tcp_health_check"); ok { |
| hc := d.Get("tcp_health_check").([]interface{})[0] |
| ps := hc.(map[string]interface{})["port_specification"] |
| pn := hc.(map[string]interface{})["port_name"] |
| |
| if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { |
| m := obj["tcpHealthCheck"].(map[string]interface{}) |
| if m["port"] == nil { |
| m["port"] = 80 |
| } |
| } |
| obj["type"] = "TCP" |
| return obj, nil |
| } |
| if _, ok := d.GetOk("ssl_health_check"); ok { |
| hc := d.Get("ssl_health_check").([]interface{})[0] |
| ps := hc.(map[string]interface{})["port_specification"] |
| pn := hc.(map[string]interface{})["port_name"] |
| |
| if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { |
| m := obj["sslHealthCheck"].(map[string]interface{}) |
| if m["port"] == nil { |
| m["port"] = 443 |
| } |
| } |
| obj["type"] = "SSL" |
| return obj, nil |
| } |
| |
| if _, ok := d.GetOk("grpc_health_check"); ok { |
| hc := d.Get("grpc_health_check").([]interface{})[0] |
| ps := hc.(map[string]interface{})["port_specification"] |
| pn := hc.(map[string]interface{})["port_name"] |
| |
| if ps == "USE_FIXED_PORT" || (ps == "" && pn == "") { |
| m := obj["grpcHealthCheck"].(map[string]interface{}) |
| if m["port"] == nil { |
| return nil, fmt.Errorf("error in HealthCheck %s: `port` must be set for GRPC health checks`.", d.Get("name").(string)) |
| } |
| } |
| obj["type"] = "GRPC" |
| return obj, nil |
| } |
| |
| return nil, fmt.Errorf("error in HealthCheck %s: No health check block specified.", d.Get("name").(string)) |
| } |