diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..9553a98 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Alexandre Oliveira, CSIRO / Sven Dowideit (libdns/digitalocean) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2af38d8 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Vultr for `libdns` + + +This package implements the libdns interfaces for the [Vultr API](https://www.vultr.com/api/) (using the Go library client from: https://github.com/vultr/govultr) + +## Authenticating + +To authenticate you need to supply a Vultr API token. + +## Example + +Here's a minimal example of how to get all your DNS records using this `libdns` provider (see `_example/main.go`) + +```go +package main + +import ( + "context" + "fmt" + "os" + "time" + + "github.com/libdns/libdns" + "github.com/libdns/vultr" +) + +func main() { + token := os.Getenv("VULTR_API_TOKEN") + if token == "" { + fmt.Printf("VULTR_API_TOKEN not set\n") + return + } + zone := os.Getenv("ZONE") + if zone == "" { + fmt.Printf("ZONE not set\n") + return + } + provider := vultr.Provider{APIToken: token} + + records, err := provider.GetRecords(context.TODO(), zone) + if err != nil { + fmt.Printf("ERROR: %s\n", err.Error()) + } + + testName := "libdns-test" + testId := "" + for _, record := range records { + fmt.Printf("%s (.%s): %s, %s\n", record.Name, zone, record.Value, record.Type) + if record.Name == testName { + testId = record.ID + } + + } + + if testId != "" { + // fmt.Printf("Delete entry for %s (id:%s)\n", testName, testId) + // _, err = provider.DeleteRecords(context.TODO(), zone, []libdns.Record{libdns.Record{ + // ID: testId, + // }}) + // if err != nil { + // fmt.Printf("ERROR: %s\n", err.Error()) + // } + // Set only works if we have a record.ID + fmt.Printf("Replacing entry for %s\n", testName) + _, err = provider.SetRecords(context.TODO(), zone, []libdns.Record{libdns.Record{ + Type: "TXT", + Name: testName, + Value: fmt.Sprintf("\"Replacement test entry created by libdns %s\"", time.Now()), + TTL: time.Duration(30) * time.Second, + ID: testId, + }}) + if err != nil { + fmt.Printf("ERROR: %s\n", err.Error()) + } + } else { + fmt.Printf("Creating new entry for %s\n", testName) + _, err = provider.AppendRecords(context.TODO(), zone, []libdns.Record{libdns.Record{ + Type: "TXT", + Name: testName, + Value: fmt.Sprintf("\"This is a test entry created by libdns %s\"", time.Now()), + TTL: time.Duration(30) * time.Second, + }}) + if err != nil { + fmt.Printf("ERROR: %s\n", err.Error()) + } + } +} +```