github.com/cloudbase/juju-core@v0.0.0-20140504232958-a7271ac7912f/worker/peergrouper/shim.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package peergrouper
     5  
     6  import (
     7  	"net"
     8  	"strconv"
     9  
    10  	"labix.org/v2/mgo"
    11  
    12  	"launchpad.net/juju-core/instance"
    13  	"launchpad.net/juju-core/replicaset"
    14  	"launchpad.net/juju-core/state"
    15  )
    16  
    17  // This file holds code that translates from State
    18  // to the interface expected internally by the
    19  // worker.
    20  
    21  type stateShim struct {
    22  	*state.State
    23  	mongoPort int
    24  }
    25  
    26  func (s *stateShim) Machine(id string) (stateMachine, error) {
    27  	m, err := s.State.Machine(id)
    28  	if err != nil {
    29  		return nil, err
    30  	}
    31  	return &machineShim{
    32  		Machine:   m,
    33  		mongoPort: s.mongoPort,
    34  	}, nil
    35  }
    36  
    37  func (s *stateShim) MongoSession() mongoSession {
    38  	return mongoSessionShim{s.State.MongoSession()}
    39  }
    40  
    41  func (m *machineShim) StateHostPort() string {
    42  	privateAddr := instance.SelectInternalAddress(m.Addresses(), false)
    43  	if privateAddr == "" {
    44  		return ""
    45  	}
    46  	return net.JoinHostPort(privateAddr, strconv.Itoa(m.mongoPort))
    47  }
    48  
    49  type machineShim struct {
    50  	*state.Machine
    51  	mongoPort int
    52  }
    53  
    54  type mongoSessionShim struct {
    55  	session *mgo.Session
    56  }
    57  
    58  func (s mongoSessionShim) CurrentStatus() (*replicaset.Status, error) {
    59  	return replicaset.CurrentStatus(s.session)
    60  }
    61  
    62  func (s mongoSessionShim) CurrentMembers() ([]replicaset.Member, error) {
    63  	return replicaset.CurrentMembers(s.session)
    64  }
    65  
    66  func (s mongoSessionShim) Set(members []replicaset.Member) error {
    67  	return replicaset.Set(s.session, members)
    68  }