github.com/mwhudson/juju@v0.0.0-20160512215208-90ff01f3497f/provider/lxd/environ_raw.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  // +build go1.3
     5  
     6  package lxd
     7  
     8  import (
     9  	"github.com/juju/errors"
    10  
    11  	"github.com/juju/juju/network"
    12  	"github.com/juju/juju/provider/common"
    13  	"github.com/juju/juju/tools/lxdclient"
    14  )
    15  
    16  type rawProvider struct {
    17  	lxdInstances
    18  	lxdProfiles
    19  	lxdImages
    20  	common.Firewaller
    21  	policyProvider
    22  }
    23  
    24  type lxdInstances interface {
    25  	Instances(string, ...string) ([]lxdclient.Instance, error)
    26  	AddInstance(lxdclient.InstanceSpec) (*lxdclient.Instance, error)
    27  	RemoveInstances(string, ...string) error
    28  	Addresses(string) ([]network.Address, error)
    29  }
    30  
    31  type lxdProfiles interface {
    32  	CreateProfile(string, map[string]string) error
    33  	HasProfile(string) (bool, error)
    34  }
    35  
    36  type lxdImages interface {
    37  	EnsureImageExists(series string, sources []lxdclient.Remote, copyProgressHandler func(string)) error
    38  }
    39  
    40  func newRawProvider(ecfg *environConfig) (*rawProvider, error) {
    41  	client, err := newClient(ecfg)
    42  	if err != nil {
    43  		return nil, errors.Trace(err)
    44  	}
    45  
    46  	firewaller, err := newFirewaller(ecfg)
    47  	if err != nil {
    48  		return nil, errors.Trace(err)
    49  	}
    50  
    51  	policy := &lxdPolicyProvider{}
    52  
    53  	raw := &rawProvider{
    54  		lxdInstances:   client,
    55  		lxdProfiles:    client,
    56  		lxdImages:      client,
    57  		Firewaller:     firewaller,
    58  		policyProvider: policy,
    59  	}
    60  	return raw, nil
    61  }
    62  
    63  func newClient(ecfg *environConfig) (*lxdclient.Client, error) {
    64  	clientCfg, err := ecfg.clientConfig()
    65  	if err != nil {
    66  		return nil, errors.Trace(err)
    67  	}
    68  
    69  	client, err := lxdclient.Connect(clientCfg)
    70  	if err != nil {
    71  		return nil, errors.Trace(err)
    72  	}
    73  
    74  	return client, nil
    75  }
    76  
    77  func newFirewaller(ecfg *environConfig) (common.Firewaller, error) {
    78  	return common.NewFirewaller(), nil
    79  }