Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a Base Repository
juju/juju
18m-ltc/juju
1stvamp/juju
4a6f656c/juju
AdamIsrael/juju
AlexisBruemmer/juju
Argon-/juju
BryanQuigley/juju
CNXTEoEorg/juju
CSRedRat/juju
DarkDare/juju
Eeemil/juju
ExternalReality/juju
JAYSNVA/juju
KnightSecretShop/juju
LinuxDoom/juju
LinuxEntrepreneur/juju
MG-Akbar/juju
MuharremOkutan/juju
Pankov404/juju
Pekkari/juju
ProgrammerAndHacker/juju
Stasonhub/juju
Veebers/juju
abentley/juju
alesstimec/juju
allomov/juju
anastasiamac/juju
andrewdmcleod/juju
arunsingh/juju
ateleshev/juju
atombender/juju
axw/juju
aznashwan/juju
babbageclunk/juju
bac/juju
battlemidget/juju
bcsaller/juju
benileo/juju
bigsurge/juju
binary132/juju
bkuschel/juju
bloodearnest/juju
bogdanteleaga/juju
bpattewar/juju
brianalbrecht/juju
bryanl/juju
bz2/juju
ccoblis/juju
cherylj/juju
cholcombe973/juju-1
chrisglass/juju
chrisjohnston/juju
cmars/juju
dardevelin/juju
davecheney/juju
deanmaniatis/juju
devigned/juju
didrocks/juju
dimitern/juju
dooferlad/juju
dougparrish/juju
dpb1/juju
dshcherb/juju
elopio/juju
ericsnowcurrently/juju
evandandrea/juju
evilnick/juju
exekias/juju
fabricematrat/juju
felicianotech/juju
fnordahl/juju
frankban/juju
freyes/juju
frobware/juju
fwereade/juju
gabriel-samfira/juju
gitqueue/juju
gnuoy/juju
gooops/juju
hamsterksu/juju
hartsock/juju
hbcbh1999/juju
hoenirvili/juju
howbazaar/juju
imoapps/juju
ip-2014/juju
ipedrazas/juju
jameinel/juju
jiasir/juju
jimmiebtlr/juju
jisanB/juju
jjo/juju
jogeo/juju
johnsca/juju
jolestar/juju
jrwren/juju
julianwang/juju
junaid-ali/juju
jwood1/juju
kakamessi99/juju
kambyarthur/juju
kapilt/juju
kat-co/juju
kazishariar/juju
kevinnguyeneng/juju
khanchan/juju
kinganeng/juju
klyachin/juju
kryptBlue/juju
ktsakalozos/juju
leobcn/juju
linearregression/juju
lingo-reviews/juju
linux-days/juju
lucciano/juju
macduff23/juju
macgreagoir/juju
makyo/juju
marcmolla/juju
marcoceppi/juju
mattyw/juju
maximp/juju-cloudsigma
mbruzek/juju
mhilton/juju-juju
michaelkrumpe/juju
mikeaddison93/juju
mikemccracken/juju
mitechie/juju
mjs/juju
mwhudson/juju
niedbalski/juju
nobuto-m/juju
ns950/juju
optimuse/juju
packethost/juju
pdaniel-frk/juju
perrito666/juju
pmatulis/juju
pombredanne/juju
prevosis/juju
punalpatel/juju
radoslavsandov/juju
raghucse2010/juju
rastaman/juju
reddydodda/juju
reedobrien/juju
rgardler/juju
rhalff/juju
rogpeppe/juju
rowhit/juju
sagardeyrakesh/juju
samiujan/juju
sarkartanzil/juju
saydulk/juju
sean-jc/juju
sebastienpattyn93/juju
seman/juju
sfrias/juju
sidnei/juju
simonklb/juju
simudream/juju
sinzui/juju
snailwalker/juju
stgraber/juju
stub42/juju
sweetcard/juju
t0mk/juju
tasdomas/juju
tedmcox/juju
tekny/juju
th3architect/juju
thabo104/juju
theosotr/juju
thomnico/juju
tomzhang/juju
trobert2/juju
tvansteenburgh/juju
tych0/juju
uk702/juju
urosj/juju
vijaytripathi/juju
voidspace/juju
vonwenm/juju
vtapia/juju
waigani/juju
wallyworld/juju
wangmingjob/juju
watonyweng/juju
whitmo/juju
wolsen/juju
wupeka/juju
wwitzel3/juju
xiaoqing-wei/juju
xnox/juju
xushiwei/juju
yeer911/juju
zbyufei/juju
zeiv/juju
zhoutiekui/juju
Nothing to show
...
Choose a Head Repository
juju/juju
18m-ltc/juju
1stvamp/juju
4a6f656c/juju
AdamIsrael/juju
AlexisBruemmer/juju
Argon-/juju
BryanQuigley/juju
CNXTEoEorg/juju
CSRedRat/juju
DarkDare/juju
Eeemil/juju
ExternalReality/juju
JAYSNVA/juju
KnightSecretShop/juju
LinuxDoom/juju
LinuxEntrepreneur/juju
MG-Akbar/juju
MuharremOkutan/juju
Pankov404/juju
Pekkari/juju
ProgrammerAndHacker/juju
Stasonhub/juju
Veebers/juju
abentley/juju
alesstimec/juju
allomov/juju
anastasiamac/juju
andrewdmcleod/juju
arunsingh/juju
ateleshev/juju
atombender/juju
axw/juju
aznashwan/juju
babbageclunk/juju
bac/juju
battlemidget/juju
bcsaller/juju
benileo/juju
bigsurge/juju
binary132/juju
bkuschel/juju
bloodearnest/juju
bogdanteleaga/juju
bpattewar/juju
brianalbrecht/juju
bryanl/juju
bz2/juju
ccoblis/juju
cherylj/juju
cholcombe973/juju-1
chrisglass/juju
chrisjohnston/juju
cmars/juju
dardevelin/juju
davecheney/juju
deanmaniatis/juju
devigned/juju
didrocks/juju
dimitern/juju
dooferlad/juju
dougparrish/juju
dpb1/juju
dshcherb/juju
elopio/juju
ericsnowcurrently/juju
evandandrea/juju
evilnick/juju
exekias/juju
fabricematrat/juju
felicianotech/juju
fnordahl/juju
frankban/juju
freyes/juju
frobware/juju
fwereade/juju
gabriel-samfira/juju
gitqueue/juju
gnuoy/juju
gooops/juju
hamsterksu/juju
hartsock/juju
hbcbh1999/juju
hoenirvili/juju
howbazaar/juju
imoapps/juju
ip-2014/juju
ipedrazas/juju
jameinel/juju
jiasir/juju
jimmiebtlr/juju
jisanB/juju
jjo/juju
jogeo/juju
johnsca/juju
jolestar/juju
jrwren/juju
julianwang/juju
junaid-ali/juju
jwood1/juju
kakamessi99/juju
kambyarthur/juju
kapilt/juju
kat-co/juju
kazishariar/juju
kevinnguyeneng/juju
khanchan/juju
kinganeng/juju
klyachin/juju
kryptBlue/juju
ktsakalozos/juju
leobcn/juju
linearregression/juju
lingo-reviews/juju
linux-days/juju
lucciano/juju
macduff23/juju
macgreagoir/juju
makyo/juju
marcmolla/juju
marcoceppi/juju
mattyw/juju
maximp/juju-cloudsigma
mbruzek/juju
mhilton/juju-juju
michaelkrumpe/juju
mikeaddison93/juju
mikemccracken/juju
mitechie/juju
mjs/juju
mwhudson/juju
niedbalski/juju
nobuto-m/juju
ns950/juju
optimuse/juju
packethost/juju
pdaniel-frk/juju
perrito666/juju
pmatulis/juju
pombredanne/juju
prevosis/juju
punalpatel/juju
radoslavsandov/juju
raghucse2010/juju
rastaman/juju
reddydodda/juju
reedobrien/juju
rgardler/juju
rhalff/juju
rogpeppe/juju
rowhit/juju
sagardeyrakesh/juju
samiujan/juju
sarkartanzil/juju
saydulk/juju
sean-jc/juju
sebastienpattyn93/juju
seman/juju
sfrias/juju
sidnei/juju
simonklb/juju
simudream/juju
sinzui/juju
snailwalker/juju
stgraber/juju
stub42/juju
sweetcard/juju
t0mk/juju
tasdomas/juju
tedmcox/juju
tekny/juju
th3architect/juju
thabo104/juju
theosotr/juju
thomnico/juju
tomzhang/juju
trobert2/juju
tvansteenburgh/juju
tych0/juju
uk702/juju
urosj/juju
vijaytripathi/juju
voidspace/juju
vonwenm/juju
vtapia/juju
waigani/juju
wallyworld/juju
wangmingjob/juju
watonyweng/juju
whitmo/juju
wolsen/juju
wupeka/juju
wwitzel3/juju
xiaoqing-wei/juju
xnox/juju
xushiwei/juju
yeer911/juju
zbyufei/juju
zeiv/juju
zhoutiekui/juju
Nothing to show
Checking mergeability… Don’t worry, you can still create the pull request.
Commits on Jan 31, 2015
Commits on Feb 02, 2015
Commits on Feb 03, 2015
Showing with 6,492 additions and 1,379 deletions.
  1. +26 −12 cmd/jujud/agent/machine.go
  2. +4 −4 cmd/jujud/agent/machine_test.go
  3. +2 −2 cmd/jujud/main_test.go
  4. +8 −6 cmd/jujud/util/util.go
  5. +21 −9 mongo/admin.go
  6. +24 −20 mongo/admin_test.go
  7. +73 −0 mongo/apt.go
  8. +9 −7 mongo/export_test.go
  9. +84 −0 mongo/files.go
  10. +97 −332 mongo/mongo.go
  11. +116 −121 mongo/mongo_test.go
  12. +14 −0 mongo/package_test.go
  13. +83 −0 mongo/replicaset.go
  14. +227 −0 mongo/service.go
  15. +18 −4 provider/local/environ.go
  16. +37 −18 provider/local/environ_test.go
  17. +1 −0 provider/local/export_test.go
  18. +210 −0 service/agent.go
  19. +0 −25 service/common/common.go
  20. +51 −0 service/conf.go
  21. +191 −0 service/confdir.go
  22. +191 −0 service/confdir_test.go
  23. +12 −0 service/doc.go
  24. +71 −0 service/initsystems.go
  25. +68 −0 service/initsystems/common.go
  26. +197 −0 service/initsystems/conf.go
  27. +179 −0 service/initsystems/conf_test.go
  28. +81 −0 service/initsystems/errors.go
  29. +35 −0 service/initsystems/errors_test.go
  30. +29 −0 service/initsystems/info.go
  31. +70 −0 service/initsystems/initsystem.go
  32. +14 −0 service/initsystems/package_test.go
  33. +165 −0 service/initsystems/systemd/conf.go
  34. +15 −0 service/initsystems/systemd/export_test.go
  35. +196 −0 service/initsystems/systemd/initsystem.go
  36. +377 −0 service/initsystems/systemd/initsystem_test.go
  37. +51 −0 service/initsystems/systemd/utils.go
  38. +116 −0 service/initsystems/upstart/conf.go
  39. +17 −0 service/initsystems/upstart/export_test.go
  40. +228 −0 service/initsystems/upstart/initsystem.go
  41. +388 −0 service/initsystems/upstart/initsystem_test.go
  42. +10 −0 service/initsystems/upstart/interface_test.go
  43. +14 −0 service/initsystems/upstart/package_test.go
  44. +151 −0 service/initsystems/upstart/testing/fake.go
  45. +31 −0 service/initsystems/upstart/utils.go
  46. +93 −0 service/initsystems/utils.go
  47. +51 −0 service/initsystems/windows/conf.go
  48. +16 −0 service/initsystems/windows/export_test.go
  49. +227 −0 service/initsystems/windows/initsystem.go
  50. +377 −0 service/initsystems/windows/initsystem_test.go
  51. +10 −0 service/initsystems/windows/interface_test.go
  52. +14 −0 service/initsystems/windows/package_test.go
  53. +26 −0 service/initsystems/windows/utils.go
  54. +146 −0 service/managed.go
  55. +363 −0 service/managed_test.go
  56. +14 −0 service/package_test.go
  57. +115 −82 service/service.go
  58. +391 −0 service/services.go
  59. +24 −0 service/services_test.go
  60. +180 −0 service/testing/services.go
  61. +141 −0 service/testing_test.go
  62. +0 −40 service/upstart/service.go
  63. +40 −191 service/upstart/upstart.go
  64. +70 −183 service/upstart/upstart_test.go
  65. +39 −0 service/util.go
  66. +0 −193 service/windows/service.go
  67. +4 −2 worker/deployer/export_test.go
  68. +122 −116 worker/deployer/simple.go
  69. +27 −12 worker/deployer/simple_test.go
View
@@ -49,7 +49,6 @@ import (
"github.com/juju/juju/provider"
"github.com/juju/juju/replicaset"
"github.com/juju/juju/service"
- "github.com/juju/juju/service/common"
"github.com/juju/juju/state"
"github.com/juju/juju/state/multiwatcher"
statestorage "github.com/juju/juju/state/storage"
@@ -691,7 +690,10 @@ func (a *MachineAgent) postUpgradeAPIWorker(
case multiwatcher.JobHostUnits:
runner.StartWorker("deployer", func() (worker.Worker, error) {
apiDeployer := st.Deployer()
- context := newDeployContext(apiDeployer, agentConfig)
+ context, err := newDeployContext(apiDeployer, agentConfig)
+ if err != nil {
+ return nil, errors.Trace(err)
+ }
return deployer.NewDeployer(apiDeployer, context), nil
})
case multiwatcher.JobManageEnviron:
@@ -1279,33 +1281,45 @@ func (a *MachineAgent) createJujuRun(dataDir string) error {
}
func (a *MachineAgent) uninstallAgent(agentConfig agent.Config) error {
- var errors []error
+ var errs []error
+
+ services, err := service.DiscoverServices(agentConfig.DataDir())
+ if err != nil {
+ return errors.Trace(err)
+ }
+
+ // Remove the machine agent's jujud service.
agentServiceName := agentConfig.Value(agent.AgentServiceName)
if agentServiceName == "" {
// For backwards compatibility, handle lack of AgentServiceName.
agentServiceName = os.Getenv("UPSTART_JOB")
}
if agentServiceName != "" {
- if err := service.NewService(agentServiceName, common.Conf{}).Remove(); err != nil {
- errors = append(errors, fmt.Errorf("cannot remove service %q: %v", agentServiceName, err))
+ if err := services.Remove(agentServiceName); err != nil {
+ errs = append(errs, fmt.Errorf("cannot remove service %q: %v", agentServiceName, err))
}
}
+
// Remove the juju-run symlink.
if err := os.Remove(JujuRun); err != nil && !os.IsNotExist(err) {
- errors = append(errors, err)
+ errs = append(errs, err)
}
+ // Remove the mongo service.
namespace := agentConfig.Value(agent.Namespace)
- if err := mongo.RemoveService(namespace); err != nil {
- errors = append(errors, fmt.Errorf("cannot stop/remove mongo service with namespace %q: %v", namespace, err))
+ mongoService := mongo.ServiceName(namespace)
+ if err := services.Remove(mongoService); err != nil {
+ errs = append(errs, fmt.Errorf("cannot stop/remove mongo service with namespace %q: %v", namespace, err))
}
+
if err := os.RemoveAll(agentConfig.DataDir()); err != nil {
- errors = append(errors, err)
+ errs = append(errs, err)
}
- if len(errors) == 0 {
+
+ if len(errs) == 0 {
return nil
}
- return fmt.Errorf("uninstall failed: %v", errors)
+ return fmt.Errorf("uninstall failed: %v", errs)
}
// singularAPIConn implements singular.Conn on
@@ -1347,6 +1361,6 @@ func metricAPI(st *api.State) metricsmanager.MetricsManagerClient {
// running the tests and (2) get access to the *State used internally, so that
// tests can be run without waiting for the 5s watcher refresh time to which we would
// otherwise be restricted.
-var newDeployContext = func(st *apideployer.State, agentConfig agent.Config) deployer.Context {
+var newDeployContext = func(st *apideployer.State, agentConfig agent.Config) (deployer.Context, error) {
return deployer.NewSimpleContext(agentConfig, st)
}
@@ -82,7 +82,7 @@ func TestPackage(t *testing.T) {
// Change the default init dir in worker/deployer,
// so the deployer doesn't try to remove upstart
// jobs from tests.
- restore := gitjujutesting.PatchValue(&deployer.InitDir, mkdtemp("juju-worker-deployer"))
+ restore := gitjujutesting.PatchValue(&upstart.ConfDir, mkdtemp("juju-worker-deployer"))
defer restore()
// TODO(waigani) 2014-03-19 bug 1294458
@@ -129,7 +129,7 @@ func (s *commonMachineSuite) SetUpTest(c *gc.C) {
fakeCmd(filepath.Join(testpath, "start"))
fakeCmd(filepath.Join(testpath, "stop"))
- s.AgentSuite.PatchValue(&upstart.InitDir, c.MkDir())
+ s.AgentSuite.PatchValue(&upstart.ConfDir, c.MkDir())
s.singularRecord = &singularRunnerRecord{startedWorkers: make(set.Strings)}
s.AgentSuite.PatchValue(&newSingularRunner, s.singularRecord.newSingularRunner)
@@ -408,11 +408,11 @@ func patchDeployContext(c *gc.C, st *state.State) (*fakeContext, func()) {
deployed: make(set.Strings),
}
orig := newDeployContext
- newDeployContext = func(dst *apideployer.State, agentConfig agent.Config) deployer.Context {
+ newDeployContext = func(dst *apideployer.State, agentConfig agent.Config) (deployer.Context, error) {
ctx.st = st
ctx.agentConfig = agentConfig
close(ctx.inited)
- return ctx
+ return ctx, nil
}
return ctx, func() { newDeployContext = orig }
}
View
@@ -22,8 +22,8 @@ import (
agentcmd "github.com/juju/juju/cmd/jujud/agent"
"github.com/juju/juju/environs"
+ "github.com/juju/juju/service/upstart"
coretesting "github.com/juju/juju/testing"
- "github.com/juju/juju/worker/deployer"
"github.com/juju/juju/worker/uniter/runner/jujuc"
)
@@ -54,7 +54,7 @@ func TestPackage(t *stdtesting.T) {
// Change the default init dir in worker/deployer,
// so the deployer doesn't try to remove upstart
// jobs from tests.
- restore := testing.PatchValue(&deployer.InitDir, mkdtemp("juju-worker-deployer"))
+ restore := testing.PatchValue(&upstart.ConfDir, mkdtemp("juju-worker-deployer"))
defer restore()
// TODO(waigani) 2014-03-19 bug 1294458
View
@@ -173,12 +173,14 @@ func NewEnsureServerParams(agentConfig agent.Config) (mongo.EnsureServerParams,
}
params := mongo.EnsureServerParams{
- APIPort: si.APIPort,
- StatePort: si.StatePort,
- Cert: si.Cert,
- PrivateKey: si.PrivateKey,
- CAPrivateKey: si.CAPrivateKey,
- SharedSecret: si.SharedSecret,
+ APIPort: si.APIPort,
+ StatePort: si.StatePort,
+ SSLInfo: mongo.SSLInfo{
+ Cert: si.Cert,
+ PrivateKey: si.PrivateKey,
+ CAPrivateKey: si.CAPrivateKey,
+ SharedSecret: si.SharedSecret,
+ },
SystemIdentity: si.SystemIdentity,
DataDir: agentConfig.DataDir(),
View
@@ -11,10 +11,10 @@ import (
"strconv"
"syscall"
+ "github.com/juju/errors"
"gopkg.in/mgo.v2"
- "github.com/juju/juju/service/common"
- "github.com/juju/juju/service/upstart"
+ "github.com/juju/juju/service"
)
// AdminUser is the name of the user that is initially created in mongo.
@@ -39,6 +39,15 @@ type EnsureAdminUserParams struct {
Password string
}
+type services interface {
+ Start(name string) error
+ Stop(name string) error
+}
+
+var newServices = func(dataDir string) (services, error) {
+ return service.DiscoverServices(dataDir)
+}
+
// EnsureAdminUser ensures that the specified user and password
// are added to the admin database.
//
@@ -78,10 +87,13 @@ func EnsureAdminUser(p EnsureAdminUserParams) (added bool, err error) {
// Login failed, so we need to add the user.
// Stop mongo, so we can start it in --noauth mode.
- mongoServiceName := ServiceName(p.Namespace)
- mongoService := upstart.NewService(mongoServiceName, common.Conf{})
- if err := upstartServiceStop(mongoService); err != nil {
- return false, fmt.Errorf("failed to stop %v: %v", mongoServiceName, err)
+ services, err := newServices(p.DataDir)
+ if err != nil {
+ return false, errors.Trace(err)
+ }
+ svcName := ServiceName(p.Namespace)
+ if err := services.Stop(svcName); err != nil {
+ return false, errors.Annotatef(err, "failed to stop %v", svcName)
}
// Start mongod in --noauth mode.
@@ -107,7 +119,7 @@ func EnsureAdminUser(p EnsureAdminUserParams) (added bool, err error) {
}
logger.Infof("added %q to admin database", p.User)
- // Restart mongo using upstart.
+ // Restart mongo using the init system.
if err := processSignal(cmd.Process, syscall.SIGTERM); err != nil {
return false, fmt.Errorf("cannot kill mongod: %v", err)
}
@@ -116,8 +128,8 @@ func EnsureAdminUser(p EnsureAdminUserParams) (added bool, err error) {
return false, fmt.Errorf("mongod did not cleanly terminate: %v", err)
}
}
- if err := upstartServiceStart(mongoService); err != nil {
- return false, err
+ if err := services.Start(svcName); err != nil {
+ return false, errors.Annotatef(err, "failed to restart %v", svcName)
}
return true, nil
}
View
@@ -16,33 +16,37 @@ import (
"gopkg.in/mgo.v2/bson"
"github.com/juju/juju/mongo"
- "github.com/juju/juju/service/upstart"
coretesting "github.com/juju/juju/testing"
)
+type fakeServices struct {
+ starts int
+ stops int
+}
+
+func (fs *fakeServices) Start(name string) error {
+ fs.starts++
+ return nil
+}
+
+func (fs *fakeServices) Stop(name string) error {
+ fs.stops++
+ return nil
+}
+
type adminSuite struct {
coretesting.BaseSuite
- serviceStarts int
- serviceStops int
+
+ services *fakeServices
}
var _ = gc.Suite(&adminSuite{})
func (s *adminSuite) SetUpTest(c *gc.C) {
s.BaseSuite.SetUpTest(c)
- s.serviceStarts = 0
- s.serviceStops = 0
- s.PatchValue(mongo.UpstartConfInstall, func(conf *upstart.Service) error {
- return nil
- })
- s.PatchValue(mongo.UpstartServiceStart, func(svc *upstart.Service) error {
- s.serviceStarts++
- return nil
- })
- s.PatchValue(mongo.UpstartServiceStop, func(svc *upstart.Service) error {
- s.serviceStops++
- return nil
- })
+
+ s.services = &fakeServices{}
+ s.PatchValue(mongo.NewServices, mongo.NewServicesClosure(s.services))
}
func (s *adminSuite) TestEnsureAdminUser(c *gc.C) {
@@ -69,8 +73,8 @@ func (s *adminSuite) TestEnsureAdminUser(c *gc.C) {
// EnsureAdminUser should have stopped the mongo service,
// started a new mongod with --noauth, and then finally
// started the service back up.
- c.Assert(s.serviceStarts, gc.Equals, 1)
- c.Assert(s.serviceStops, gc.Equals, 1)
+ c.Assert(s.services.starts, gc.Equals, 1)
+ c.Assert(s.services.stops, gc.Equals, 1)
_, portString, err := net.SplitHostPort(dialInfo.Addrs[0])
c.Assert(err, jc.ErrorIsNil)
gitjujutesting.AssertEchoArgs(c, "mongod",
@@ -93,8 +97,8 @@ func (s *adminSuite) TestEnsureAdminUser(c *gc.C) {
c.Assert(added, jc.IsFalse)
// There should have been no additional start/stop.
- c.Assert(s.serviceStarts, gc.Equals, 1)
- c.Assert(s.serviceStops, gc.Equals, 1)
+ c.Assert(s.services.starts, gc.Equals, 1)
+ c.Assert(s.services.stops, gc.Equals, 1)
}
func (s *adminSuite) TestEnsureAdminUserError(c *gc.C) {
View
@@ -0,0 +1,73 @@
+// Copyright 2014 Canonical Ltd.
+// Licensed under the AGPLv3, see LICENCE file for details.
+
+package mongo
+
+import (
+ "bytes"
+ "os/exec"
+
+ "github.com/juju/errors"
+ "github.com/juju/utils/apt"
+
+ "github.com/juju/juju/version"
+)
+
+func aptGetInstallMongod(numaCtl bool) error {
+ // Only Quantal requires the PPA.
+ if version.Current.Series == "quantal" {
+ if err := addAptRepository("ppa:juju/stable"); err != nil {
+ return err
+ }
+ }
+ mongoPkg := packageForSeries(version.Current.Series)
+
+ aptPkgs := []string{mongoPkg}
+ if numaCtl {
+ aptPkgs = []string{mongoPkg, numaCtlPkg}
+ logger.Infof("installing %s and %s", mongoPkg, numaCtlPkg)
+ } else {
+ logger.Infof("installing %s", mongoPkg)
+ }
+ cmds := apt.GetPreparePackages(aptPkgs, version.Current.Series)
+ for _, cmd := range cmds {
+ if err := apt.GetInstall(cmd...); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func addAptRepository(name string) error {
+ // add-apt-repository requires python-software-properties
+ cmds := apt.GetPreparePackages(
+ []string{"python-software-properties"},
+ version.Current.Series,
+ )
+ logger.Infof("installing python-software-properties")
+ for _, cmd := range cmds {
+ if err := apt.GetInstall(cmd...); err != nil {
+ return err
+ }
+ }
+
+ logger.Infof("adding apt repository %q", name)
+ cmd := exec.Command("add-apt-repository", "-y", name)
+ out, err := cmd.CombinedOutput()
+ if err != nil {
+ return errors.Annotatef(err, "cannot add apt repository (output %s)", bytes.TrimSpace(out))
+ }
+ return nil
+}
+
+// packageForSeries returns the name of the mongo package for the series
+// of the machine that it is going to be running on.
+func packageForSeries(series string) string {
+ switch series {
+ case "precise", "quantal", "raring", "saucy":
+ return "mongodb-server"
+ default:
+ // trusty and onwards
+ return "juju-mongodb"
+ }
+}
View
@@ -12,13 +12,9 @@ var (
SharedSecretPath = sharedSecretPath
SSLKeyPath = sslKeyPath
- UpstartConfInstall = &upstartConfInstall
- UpstartService = upstartService
- UpstartServiceExists = &upstartServiceExists
- UpstartServiceRunning = &upstartServiceRunning
- UpstartServiceStopAndRemove = &upstartServiceStopAndRemove
- UpstartServiceStop = &upstartServiceStop
- UpstartServiceStart = &upstartServiceStart
+ NewServices = &newServices
+ NewService = &newService
+ InstallService = &installService
HostWordSize = &hostWordSize
RuntimeGOOS = &runtimeGOOS
@@ -32,3 +28,9 @@ var (
PreallocFileSizes = preallocFileSizes
PreallocFiles = preallocFiles
)
+
+func NewServicesClosure(s services) func(string) (services, error) {
+ return func(string) (services, error) {
+ return s, nil
+ }
+}
Oops, something went wrong.

No commit comments for this range