github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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 }