github.com/pmoroney/dnscontrol@v0.2.4-0.20171024134423-fad98f73f44a/commands/createDomains.go (about) 1 package commands 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/StackExchange/dnscontrol/providers" 8 "github.com/urfave/cli" 9 ) 10 11 var _ = cmd(catUtils, func() *cli.Command { 12 var args CreateDomainsArgs 13 return &cli.Command{ 14 Name: "create-domains", 15 Usage: "ensures that all domains in your configuration are present in all providers.", 16 Action: func(ctx *cli.Context) error { 17 return exit(CreateDomains(args)) 18 }, 19 Flags: args.flags(), 20 } 21 }()) 22 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 func CreateDomains(args CreateDomainsArgs) error { 35 cfg, err := GetDNSConfig(args.GetDNSConfigArgs) 36 if err != nil { 37 return err 38 } 39 registrars, dnsProviders, _, err := InitializeProviders(args.CredsFile, cfg) 40 if err != nil { 41 return err 42 } 43 fmt.Printf("Initialized %d registrars and %d dns service providers.\n", len(registrars), len(dnsProviders)) 44 for _, domain := range cfg.Domains { 45 fmt.Println("*** ", domain.Name) 46 for prov := range domain.DNSProviders { 47 dsp, ok := dnsProviders[prov] 48 if !ok { 49 log.Fatalf("DSP %s not declared.", prov) 50 } 51 if creator, ok := dsp.(providers.DomainCreator); ok { 52 fmt.Println(" -", prov) 53 // TODO: maybe return bool if it did anything. 54 err := creator.EnsureDomainExists(domain.Name) 55 if err != nil { 56 fmt.Printf("Error creating domain: %s\n", err) 57 } 58 } 59 } 60 } 61 return nil 62 }