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  }