github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/spaces/shims.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package spaces 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/apiserver/common" 10 "github.com/juju/juju/apiserver/params" 11 "github.com/juju/juju/environs/config" 12 "github.com/juju/juju/state" 13 ) 14 15 // NOTE: All of the following code is only tested with a feature test. 16 17 // subnetShim forwards and adapts state.Subnets methods to 18 // common.BackingSubnet. 19 type subnetShim struct { 20 common.BackingSubnet 21 subnet *state.Subnet 22 } 23 24 func (s *subnetShim) CIDR() string { 25 return s.subnet.CIDR() 26 } 27 28 func (s *subnetShim) VLANTag() int { 29 return s.subnet.VLANTag() 30 } 31 32 func (s *subnetShim) ProviderId() string { 33 return s.subnet.ProviderId() 34 } 35 36 func (s *subnetShim) AvailabilityZones() []string { 37 // TODO(dimitern): Add multiple zones to state.Subnet. 38 return []string{s.subnet.AvailabilityZone()} 39 } 40 41 func (s *subnetShim) Life() params.Life { 42 return params.Life(s.subnet.Life().String()) 43 } 44 45 func (s *subnetShim) Status() string { 46 // TODO(dimitern): This should happen in a cleaner way. 47 if s.Life() != params.Alive { 48 return "terminating" 49 } 50 return "in-use" 51 } 52 53 func (s *subnetShim) SpaceName() string { 54 return s.subnet.SpaceName() 55 } 56 57 // spaceShim forwards and adapts state.Space methods to BackingSpace. 58 type spaceShim struct { 59 common.BackingSpace 60 space *state.Space 61 } 62 63 func (s *spaceShim) Name() string { 64 return s.space.Name() 65 } 66 67 func (s *spaceShim) Subnets() ([]common.BackingSubnet, error) { 68 results, err := s.space.Subnets() 69 if err != nil { 70 return nil, errors.Trace(err) 71 } 72 subnets := make([]common.BackingSubnet, len(results)) 73 for i, result := range results { 74 subnets[i] = &subnetShim{subnet: result} 75 } 76 return subnets, nil 77 } 78 79 // stateShim forwards and adapts state.State methods to Backing 80 // method. 81 type stateShim struct { 82 Backing 83 st *state.State 84 } 85 86 func (s *stateShim) EnvironConfig() (*config.Config, error) { 87 return s.st.EnvironConfig() 88 } 89 90 func (s *stateShim) AddSpace(name string, subnetIds []string, public bool) error { 91 _, err := s.st.AddSpace(name, subnetIds, public) 92 return err 93 } 94 95 func (s *stateShim) AllSpaces() ([]common.BackingSpace, error) { 96 // TODO(dimitern): Make this ListSpaces() instead. 97 results, err := s.st.AllSpaces() 98 if err != nil { 99 return nil, errors.Trace(err) 100 } 101 spaces := make([]common.BackingSpace, len(results)) 102 for i, result := range results { 103 spaces[i] = &spaceShim{space: result} 104 } 105 return spaces, nil 106 }