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  }