Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 18 additions & 36 deletions products/compute/terraform.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -91,23 +91,17 @@ overrides: !ruby/object:Provider::ResourceOverrides
id: !ruby/object:Provider::Terraform::PropertyOverride
exclude: true
checkIntervalSec: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 5
default_value: 5

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is also set in api.yaml. Any idea whether that was intentional?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, you put that stuff in the PR description, cool. We'll talk about it another time :)

healthyThreshold: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 2
default_value: 2
port: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 80
default_value: 80
requestPath: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: "/"
default_value: "/"
timeoutSec: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 5
default_value: 5
unhealthyThreshold: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 2
default_value: 2
HttpsHealthCheck: !ruby/object:Provider::Terraform::ResourceOverride
description: |
{{description}}
Expand All @@ -131,23 +125,17 @@ overrides: !ruby/object:Provider::ResourceOverrides
id: !ruby/object:Provider::Terraform::PropertyOverride
exclude: true
checkIntervalSec: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 5
default_value: 5
healthyThreshold: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 2
default_value: 2
port: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 443
default_value: 443
requestPath: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: "/"
default_value: "/"
timeoutSec: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 5
default_value: 5
unhealthyThreshold: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: 2
default_value: 2
HealthCheck: !ruby/object:Provider::Terraform::ResourceOverride
exclude: true
Image: !ruby/object:Provider::Terraform::ResourceOverride
Expand Down Expand Up @@ -248,17 +236,15 @@ overrides: !ruby/object:Provider::ResourceOverrides
enabledFeatures: !ruby/object:Provider::Terraform::PropertyOverride
is_set: true
profile: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: :COMPATIBLE
default_value: :COMPATIBLE
description: |
{{description}}
See the [official documentation](https://cloud.google.com/compute/docs/load-balancing/ssl-policies#profilefeaturesupport)
for information on what cipher suites each profile provides. If
`CUSTOM` is used, the `custom_features` attribute **must be set**.
Default is `COMPATIBLE`.
minTlsVersion: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: :TLS_1_0
default_value: :TLS_1_0
description : '{{description}} Default is `TLS_1_0`.'
warnings: !ruby/object:Provider::Terraform::PropertyOverride
exclude: true
Expand Down Expand Up @@ -411,8 +397,7 @@ overrides: !ruby/object:Provider::ResourceOverrides
region: !ruby/object:Provider::Terraform::PropertyOverride
required: false # the provider-default value will be used if not specified
sessionAffinity: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: :NONE
default_value: :NONE
# TODO: Custom code needed for updating `instances` and `healthCheck`.
# Update methods are (add|remove)Instance, (add/remove)HealthCheck
TargetSslProxy: !ruby/object:Provider::Terraform::ResourceOverride
Expand Down Expand Up @@ -449,8 +434,7 @@ overrides: !ruby/object:Provider::ResourceOverrides
id: !ruby/object:Provider::Terraform::PropertyOverride
name: proxyId
proxyHeader: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: :NONE
default_value: :NONE
service: !ruby/object:Provider::Terraform::PropertyOverride
name: backendService
TargetTcpProxy: !ruby/object:Provider::Terraform::ResourceOverride
Expand Down Expand Up @@ -486,8 +470,7 @@ overrides: !ruby/object:Provider::ResourceOverrides
service: !ruby/object:Provider::Terraform::PropertyOverride
name: backendService
proxyHeader: !ruby/object:Provider::Terraform::PropertyOverride
default: !ruby/object:Provider::Terraform::Default
value: :NONE
default_value: :NONE
TargetVpnGateway: !ruby/object:Provider::Terraform::ResourceOverride
name: 'VpnGateway'
exclude: false
Expand Down Expand Up @@ -564,8 +547,7 @@ overrides: !ruby/object:Provider::ResourceOverrides
exclude: true
region: !ruby/object:Provider::Terraform::PropertyOverride
required: false # the provider-default value will be used if not specified
default: !ruby/object:Provider::Terraform::Default
from_api: true
default_from_api: true
custom_flatten: 'templates/terraform/custom_flatten/region_name_only.erb'
forwardingRules: !ruby/object:Provider::Terraform::PropertyOverride
exclude: true
Expand Down
73 changes: 16 additions & 57 deletions provider/terraform/property_override.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ class Terraform < Provider::AbstractCore
module OverrideFields
attr_reader :diff_suppress_func # Adds a DiffSuppressFunc to the schema
attr_reader :state_func # Adds a StateFunc to the schema
attr_reader :default
attr_reader :sensitive # Adds `Sensitive: true` to the schema
attr_reader :validation # Adds a ValidateFunc to the schema

Expand All @@ -32,6 +31,11 @@ module OverrideFields
# schema.HashSchema are used.
attr_reader :set_hash_func

# if true, then we get the default value from the Google API if no value
# is set in the terraform configuration for this field.
# It translates to setting the field to Computed & Optional in the schema.
attr_reader :default_from_api

# ===========
# Custom code
# ===========
Expand Down Expand Up @@ -79,79 +83,36 @@ def validate
end
end

# Default value for the property if any.
class Default < Api::Object
# the attributes below are mutually exclusive.

# if specified, then this will be set as the default value in the schema
attr_reader :value
# if true, then we get the default value from the Google API if no value
# is set in the terraform configuration for this field.
# It translates to setting the field to Computed & Optional in the schema.
attr_reader :from_api

def validate
super

# Ensure boolean values are set to false if nil
@from_api ||= false

check_property :from_api, :boolean

raise "'value' and 'from_api' cannot be both set for 'default'" \
if from_api && !value.nil?

check_optional_property :update_statement, String
check_optional_property :custom_flatten, String
check_optional_property :custom_expand, String
end

def apply(api_property)
# This can't be done in validate because we don't have access to the
# api.yaml property yet.
check_default_value_property api_property
end

def check_default_value_property(api_property)
return if @default_value.nil?

if api_property.is_a?(Api::Type::String)
clazz = String
elsif api_property.is_a?(Api::Type::Integer)
clazz = Integer
elsif api_property.is_a?(Api::Type::Enum)
clazz = Symbol
else
raise "Update 'check_default_value_property' method to support " \
"default value for type #{api_property.class}"
end

check_optional_property :value, clazz
end
end

# Terraform-specific overrides to api.yaml.
class PropertyOverride < Provider::PropertyOverride
include OverrideFields

# rubocop:disable Metrics/MethodLength
def validate
super

# Ensures boolean values are set to false if nil
@sensitive ||= false
@is_set ||= false

@default ||= Provider::Terraform::Default.new
@default_from_api ||= false

check_property :sensitive, :boolean
check_property :is_set, :boolean
check_property :default, Provider::Terraform::Default
check_property :default_from_api, :boolean

check_optional_property :diff_suppress_func, String
check_optional_property :state_func, String
check_optional_property :validation, Provider::Terraform::Validation
check_optional_property :set_hash_func, String

check_optional_property :update_statement, String

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I also fixed a bug where these lines where in the wrong validate method

check_optional_property :custom_flatten, String
check_optional_property :custom_expand, String

raise "'default_value' and 'default_from_api' cannot be both set" \
if default_from_api && !default_value.nil?
end
# rubocop:enable Metrics/MethodLength

def apply(api_property)
unless description.nil?
Expand All @@ -167,8 +128,6 @@ def apply(api_property)
end
end

@default.apply(api_property)

super
end

Expand Down
6 changes: 3 additions & 3 deletions templates/terraform/schema_property.erb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<% else -%>
Type: <%= tf_types[property.class] %>,
<% end -%>
<% if property.default.from_api -%>
<% if property.default_from_api -%>
Computed: true,
Optional: true,
<% elsif property.required -%>
Expand Down Expand Up @@ -109,8 +109,8 @@
<% if property.sensitive -%>
Sensitive: true,
<% end -%>
<% unless property.default.value.nil? -%>
Default: <%= go_literal(property.default.value) -%>,
<% unless property.default_value.nil? -%>
Default: <%= go_literal(property.default_value) -%>,
<% end -%>
},
<% else -%>
Expand Down