package commands import ( "fmt" "log" "github.com/StackExchange/dnscontrol/providers" "github.com/urfave/cli" ) var _ = cmd(catUtils, func() *cli.Command { var args CreateDomainsArgs return &cli.Command{ Name: "create-domains", Usage: "ensures that all domains in your configuration are present in all providers.", Action: func(ctx *cli.Context) error { return exit(CreateDomains(args)) }, Flags: args.flags(), } }()) type CreateDomainsArgs struct { GetDNSConfigArgs GetCredentialsArgs } func (args *CreateDomainsArgs) flags() []cli.Flag { flags := args.GetDNSConfigArgs.flags() flags = append(flags, args.GetCredentialsArgs.flags()...) return flags } func CreateDomains(args CreateDomainsArgs) error { cfg, err := GetDNSConfig(args.GetDNSConfigArgs) if err != nil { return err } registrars, dnsProviders, _, err := InitializeProviders(args.CredsFile, cfg) if err != nil { return err } fmt.Printf("Initialized %d registrars and %d dns service providers.\n", len(registrars), len(dnsProviders)) for _, domain := range cfg.Domains { fmt.Println("*** ", domain.Name) for prov := range domain.DNSProviders { dsp, ok := dnsProviders[prov] if !ok { log.Fatalf("DSP %s not declared.", prov) } if creator, ok := dsp.(providers.DomainCreator); ok { fmt.Println(" -", prov) // TODO: maybe return bool if it did anything. err := creator.EnsureDomainExists(domain.Name) if err != nil { fmt.Printf("Error creating domain: %s\n", err) } } } } return nil }