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  }