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  }