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