Skip to content

flarectl create-or-update record cannot be fully qualified #4154

@sarcasticadmin

Description

@sarcasticadmin

Confirm this is a Go library issue and not an underlying Cloudflare API issue

  • This is an issue with the Go library

Describe the bug

I have an existing CNAME record sample.apps.io that points to aaaaa.elb.us-east-1.amazonaws.com and Im trying to update the contents to point to a new load balancer when --name is fully qualified for flarectl dns create-or-update.

To Reproduce

The following attempt fails with:

$ flarectl dns create-or-update --proxy --zone apps.io --name sample.apps.io --content bbbbb.elb.us-east-1.amazonaws.com --type CNAME
Error creating DNS record: An A, AAAA, or CNAME record with that host already exists. For more details, refer to <https://developers.cloudflare.com/dns/manage-dns-records/troubleshooting/records-with-same-name/>. (81053)

flarectl is trying to create the record instead of update it if you look at the error meessage.

It seems that because the flag --name sample.apps.io is fully qualified instead of short --name sample this gets concatentated preemptively:

records, _, err := api.ListDNSRecords(context.Background(), cloudflare.ZoneIdentifier(zoneID), cloudflare.ListDNSRecordsParams{Name: name + "." + zone})
This causes there to be no matching records (sample.apps.io.apps.io) to update and causes the create to fail instead since its still using what was passed in by --name:
Name: name,

Ive noticed some inconsistency with --name for the CLI dns subcommands. flarectl dns list has differing results for FQDN vs short:

flarectl dns list FQDN:

$ flarectl dns list --zone apps.io --type CNAME --name sample.apps.io
                 ID                | TYPE  |             NAME             |                                    CONTENT                                    | PROXIED | TTL
-----------------------------------+-------+------------------------------+-------------------------------------------------------------------------------+---------+------
  id123456 | CNAME | sample.apps.io | aaaaa.elb.us-east-1.amazonaws.com | true    |   1

flarectl dns list short:

$ flarectl dns list --zone apps.io --type CNAME --name sample
  ID | TYPE | NAME | CONTENT | PROXIED | TTL
-----+------+------+---------+---------+------

create and update dns subcommands will handle both FQDN and short. Heres the result of update:

$ flarectl dns update --id  id123456 --proxy --zone apps.io --name sample.apps.io --content  bbbbb.elb.us-east-1.amazonaws.com --type CNAME
$cloudinfra flarectl dns update --id id123456 --proxy --zone apps.io --name sample --content  cccccc.elb.us-east-1.amazonaws.com --type CNAME

Nothing is returned but records update as expected

Suggestion

flarectl should have consistent behavior across the various dns subcommands consumption of --name. It seems like supporting both FQDN and short for --name for create-or-update and list would ensure it doesnt break existing behavior.

OS

macOS

Go version

Go 1.22.0

Library version

github.com/cloudflare/cloudflare-go/v0.115.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions