Skip to content

Commit c017fa4

Browse files
committed
GFI-564: support gw rules internal dns settings
This commit adds support to configure internal dns settings on gateway resolver rules.
1 parent 21a6659 commit c017fa4

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

.changelog/4918.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/cloudflare_zero_trust_gateway_policy: allow configuring resolver rules with internal DNS
3+
```

internal/sdkv2provider/resource_cloudflare_teams_rules.go

+40
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,10 @@ func flattenTeamsRuleSettings(settings *cloudflare.TeamsRuleSettings) []interfac
257257
result["dns_resolvers"] = flattenTeamsDnsResolverSettings(settings.DnsResolverSettings)
258258
}
259259

260+
if settings.ResolveDnsInternallySettings != nil {
261+
result["resolve_dns_internally"] = flattenTeamsResolveDnsInternallySettings(settings.ResolveDnsInternallySettings)
262+
}
263+
260264
return []interface{}{result}
261265
}
262266

@@ -287,6 +291,7 @@ func inflateTeamsRuleSettings(settings interface{}) *cloudflare.TeamsRuleSetting
287291
untrustedCertSettings := inflateTeamsUntrustedCertSettings(settingsMap["untrusted_cert"].([]interface{}))
288292
notificationSettings := inflateTeamsNotificationSettings(settingsMap["notification_settings"])
289293
dnsResolverSettings := inflateTeamsDnsResolverSettings(settingsMap["dns_resolvers"].([]interface{}))
294+
internalDnsSettings := inflateTeamsResolveDnsInternallySettings(settingsMap["resolve_dns_internally"].([]interface{}))
290295

291296
ignoreCNAMECategoryMatches := readOptionalBooleanSettings(settingsMap, "ignore_cname_category_matches")
292297
allowChildBypass := readOptionalBooleanSettings(settingsMap, "allow_child_bypass")
@@ -314,6 +319,7 @@ func inflateTeamsRuleSettings(settings interface{}) *cloudflare.TeamsRuleSetting
314319
IgnoreCNAMECategoryMatches: &ignoreCNAMECategoryMatches,
315320
IPCategories: ipCategories,
316321
AuditSSH: auditSSHSettings,
322+
ResolveDnsInternallySettings: internalDnsSettings,
317323
}
318324

319325
// set optional settings if present, so api won't complain
@@ -609,6 +615,40 @@ func inflateTeamsDnsResolverAddressesV6(settings []interface{}) []cloudflare.Tea
609615
return ret
610616
}
611617

618+
func flattenTeamsResolveDnsInternallySettings(settings *cloudflare.TeamsResolveDnsInternallySettings) []interface{} {
619+
if settings == nil {
620+
return nil
621+
}
622+
623+
var fallback cloudflare.TeamsResolveDnsInternallyFallbackStrategy
624+
if settings.Fallback != "" {
625+
fallback = settings.Fallback
626+
} else {
627+
fallback = cloudflare.None
628+
}
629+
630+
return []interface{}{map[string]interface{}{
631+
"view_id": settings.ViewID,
632+
"fallback": string(fallback),
633+
}}
634+
}
635+
636+
func inflateTeamsResolveDnsInternallySettings(settings interface{}) *cloudflare.TeamsResolveDnsInternallySettings {
637+
settingsList := settings.([]interface{})
638+
if len(settingsList) != 1 {
639+
return nil
640+
}
641+
642+
settingsMap := settingsList[0].(map[string]interface{})
643+
viewId := settingsMap["view_id"].(string)
644+
fallback := cloudflare.TeamsResolveDnsInternallyFallbackStrategy(settingsMap["fallback"].(string))
645+
646+
return &cloudflare.TeamsResolveDnsInternallySettings{
647+
ViewID: viewId,
648+
Fallback: fallback,
649+
}
650+
}
651+
612652
func inflateTeamsDlpPayloadLogSettings(settings interface{}) *cloudflare.TeamsDlpPayloadLogSettings {
613653
settingsList := settings.([]interface{})
614654
if len(settingsList) != 1 {

internal/sdkv2provider/schema_cloudflare_teams_rules.go

+22
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,15 @@ var teamsRuleSettings = map[string]*schema.Schema{
224224
},
225225
Description: "Add your own custom resolvers to route queries that match the resolver policy. Cannot be used when resolve_dns_through_cloudflare is set. DNS queries will route to the address closest to their origin.",
226226
},
227+
"resolve_dns_internally": {
228+
Type: schema.TypeList,
229+
MaxItems: 1,
230+
Optional: true,
231+
Elem: &schema.Resource{
232+
Schema: teamsResolveDnsInternallySettings,
233+
},
234+
Description: "Configure to forward the query to the internal DNS service, passing the specified 'view_id' as input. Cannot be set when 'dns_resolvers' are specified or 'resolve_dns_through_cloudflare' is set. Only valid when a rule's action is set to 'resolve'.",
235+
},
227236
}
228237

229238
var payloadLogSettings = map[string]*schema.Schema{
@@ -390,3 +399,16 @@ var teamsDnsResolverAddress = map[string]*schema.Schema{
390399
Description: "Whether to connect to this resolver over a private network. Must be set when `vnet_id` is set.",
391400
},
392401
}
402+
403+
var teamsResolveDnsInternallySettings = map[string]*schema.Schema{
404+
"view_id": {
405+
Type: schema.TypeString,
406+
Optional: true,
407+
Description: "The internal DNS view identifier that's passed to the internal DNS service.",
408+
},
409+
"fallback": {
410+
Type: schema.TypeString,
411+
Optional: true,
412+
Description: "The fallback behavior to apply when the internal DNS response code is different from 'NOERROR' or when the response data only contains CNAME records for 'A' or 'AAAA' queries.",
413+
},
414+
}

0 commit comments

Comments
 (0)