github.com/StackExchange/DNSControl@v0.2.8/commands/createDomains.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 6 "github.com/StackExchange/dnscontrol/providers" 7 "github.com/urfave/cli" 8 ) 9 10 var _ = cmd(catUtils, func() *cli.Command { 11 var args CreateDomainsArgs 12 return &cli.Command{ 13 Name: "create-domains", 14 Usage: "ensures that all domains in your configuration are present in all providers.", 15 Action: func(ctx *cli.Context) error { 16 return exit(CreateDomains(args)) 17 }, 18 Flags: args.flags(), 19 } 20 }()) 21 22 // CreateDomainsArgs args required for the create-domain subcommand. 23 type CreateDomainsArgs struct { 24 GetDNSConfigArgs 25 GetCredentialsArgs 26 } 27 28 func (args *CreateDomainsArgs) flags() []cli.Flag { 29 flags := args.GetDNSConfigArgs.flags() 30 flags = append(flags, args.GetCredentialsArgs.flags()...) 31 return flags 32 } 33 34 // CreateDomains contains all data/flags needed to run create-domains, independently of CLI. 35 func CreateDomains(args CreateDomainsArgs) error { 36 cfg, err := GetDNSConfig(args.GetDNSConfigArgs) 37 if err != nil { 38 return err 39 } 40 _, err = InitializeProviders(args.CredsFile, cfg, false) 41 if err != nil { 42 return err 43 } 44 for _, domain := range cfg.Domains { 45 fmt.Println("*** ", domain.Name) 46 for _, provider := range domain.DNSProviderInstances { 47 if creator, ok := provider.Driver.(providers.DomainCreator); ok { 48 fmt.Println(" -", provider.Name) 49 err := creator.EnsureDomainExists(domain.Name) 50 if err != nil { 51 fmt.Printf("Error creating domain: %s\n", err) 52 } 53 } 54 } 55 } 56 return nil 57 }