@@ -156,10 +156,14 @@ func (n *dnsProvider) CreateRecords(ctx context.Context, records ...vm.DNSRecord
156
156
firstRecord := recordGroup [0 ]
157
157
data := maps .Keys (combinedRecords )
158
158
sort .Strings (data )
159
+ zone := n .managedZone
160
+ if firstRecord .Public {
161
+ zone = n .publicZone
162
+ }
159
163
args := []string {"--project" , n .dnsProject , "dns" , "record-sets" , command , name ,
160
164
"--type" , string (firstRecord .Type ),
161
165
"--ttl" , strconv .Itoa (firstRecord .TTL ),
162
- "--zone" , n . managedZone ,
166
+ "--zone" , zone ,
163
167
"--rrdatas" , strings .Join (data , "," ),
164
168
}
165
169
cmd := exec .CommandContext (ctx , "gcloud" , args ... )
@@ -170,10 +174,10 @@ func (n *dnsProvider) CreateRecords(ctx context.Context, records ...vm.DNSRecord
170
174
n .clearCacheEntry (name )
171
175
return rperrors .TransientFailure (errors .Wrapf (err , "output: %s" , out ), dnsProblemLabel )
172
176
}
173
- // If fastDNS is enabled, we need to wait for the records to become available
177
+ // If fastDNS is enabled, we need to wait for the SRV records to become available
174
178
// on the Google DNS servers.
175
- if config .FastDNS {
176
- err = n .waitForRecordsAvailable (ctx , maps .Values (combinedRecords )... )
179
+ if config .FastDNS && ! firstRecord . Public {
180
+ err = n .waitForSRVRecordsAvailable (ctx , maps .Values (combinedRecords )... )
177
181
if err != nil {
178
182
return err
179
183
}
@@ -210,13 +214,14 @@ func (n *dnsProvider) ListRecords(ctx context.Context) ([]vm.DNSRecord, error) {
210
214
return n .listSRVRecords (ctx , "" , dnsMaxResults )
211
215
}
212
216
213
- // DeleteRecordsByName implements the vm.DNSProvider interface.
214
- func (n * dnsProvider ) DeleteRecordsByName (ctx context.Context , names ... string ) error {
217
+ func (n * dnsProvider ) deleteRecords (
218
+ ctx context.Context , zone string , recordType vm.DNSType , names ... string ,
219
+ ) error {
215
220
for _ , name := range names {
216
221
err := n .withRecordLock (name , func () error {
217
222
args := []string {"--project" , n .dnsProject , "dns" , "record-sets" , "delete" , name ,
218
- "--type" , string (vm . SRV ),
219
- "--zone" , n . managedZone ,
223
+ "--type" , string (recordType ),
224
+ "--zone" , zone ,
220
225
}
221
226
cmd := exec .CommandContext (ctx , "gcloud" , args ... )
222
227
out , err := n .execFn (cmd )
@@ -235,8 +240,18 @@ func (n *dnsProvider) DeleteRecordsByName(ctx context.Context, names ...string)
235
240
return nil
236
241
}
237
242
243
+ // DeleteSRVRecordsByName implements the vm.DNSProvider interface.
244
+ func (n * dnsProvider ) DeleteSRVRecordsByName (ctx context.Context , names ... string ) error {
245
+ return n .deleteRecords (ctx , n .managedZone , vm .SRV , names ... )
246
+ }
247
+
248
+ // DeletePublicRecordsByName implements the vm.DNSProvider interface
249
+ func (n * dnsProvider ) DeletePublicRecordsByName (ctx context.Context , names ... string ) error {
250
+ return n .deleteRecords (ctx , n .publicZone , vm .A , names ... )
251
+ }
252
+
238
253
// DeleteRecordsBySubdomain implements the vm.DNSProvider interface.
239
- func (n * dnsProvider ) DeleteRecordsBySubdomain (ctx context.Context , subdomain string ) error {
254
+ func (n * dnsProvider ) DeleteSRVRecordsBySubdomain (ctx context.Context , subdomain string ) error {
240
255
suffix := fmt .Sprintf ("%s.%s." , subdomain , n .Domain ())
241
256
records , err := n .listSRVRecords (ctx , suffix , dnsMaxResults )
242
257
if err != nil {
@@ -256,7 +271,7 @@ func (n *dnsProvider) DeleteRecordsBySubdomain(ctx context.Context, subdomain st
256
271
delete (names , name )
257
272
}
258
273
}
259
- return n .DeleteRecordsByName (ctx , maps .Keys (names )... )
274
+ return n .DeleteSRVRecordsByName (ctx , maps .Keys (names )... )
260
275
}
261
276
262
277
// Domain implements the vm.DNSProvider interface.
0 commit comments