github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/vsphere/config.go (about)

     1  package vsphere
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"net/url"
     7  	"os"
     8  	"path/filepath"
     9  	"time"
    10  
    11  	"github.com/vmware/govmomi"
    12  	"github.com/vmware/govmomi/vim25/debug"
    13  	"golang.org/x/net/context"
    14  )
    15  
    16  type Config struct {
    17  	User          string
    18  	Password      string
    19  	VSphereServer string
    20  	InsecureFlag  bool
    21  	Debug         bool
    22  	DebugPath     string
    23  	DebugPathRun  string
    24  }
    25  
    26  // Client() returns a new client for accessing VMWare vSphere.
    27  func (c *Config) Client() (*govmomi.Client, error) {
    28  	u, err := url.Parse("https://" + c.VSphereServer + "/sdk")
    29  	if err != nil {
    30  		return nil, fmt.Errorf("Error parse url: %s", err)
    31  	}
    32  
    33  	u.User = url.UserPassword(c.User, c.Password)
    34  
    35  	err = c.EnableDebug()
    36  	if err != nil {
    37  		return nil, fmt.Errorf("Error setting up client debug: %s", err)
    38  	}
    39  
    40  	client, err := govmomi.NewClient(context.TODO(), u, c.InsecureFlag)
    41  	if err != nil {
    42  		return nil, fmt.Errorf("Error setting up client: %s", err)
    43  	}
    44  
    45  	log.Printf("[INFO] VMWare vSphere Client configured for URL: %s", c.VSphereServer)
    46  
    47  	return client, nil
    48  }
    49  
    50  func (c *Config) EnableDebug() error {
    51  	if !c.Debug {
    52  		return nil
    53  	}
    54  
    55  	// Base path for storing debug logs.
    56  	r := c.DebugPath
    57  	if r == "" {
    58  		r = filepath.Join(os.Getenv("HOME"), ".govmomi")
    59  	}
    60  	r = filepath.Join(r, "debug")
    61  
    62  	// Path for this particular run.
    63  	run := c.DebugPathRun
    64  	if run == "" {
    65  		now := time.Now().Format("2006-01-02T15-04-05.999999999")
    66  		r = filepath.Join(r, now)
    67  	} else {
    68  		// reuse the same path
    69  		r = filepath.Join(r, run)
    70  		_ = os.RemoveAll(r)
    71  	}
    72  
    73  	err := os.MkdirAll(r, 0700)
    74  	if err != nil {
    75  		log.Printf("[ERROR] Client debug setup failed: %v", err)
    76  		return err
    77  	}
    78  
    79  	p := debug.FileProvider{
    80  		Path: r,
    81  	}
    82  
    83  	debug.SetProvider(&p)
    84  	return nil
    85  }