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 }