141
143
// shortcuts for expected output.
144
"agent-state": "started",
145
"dns-name": "dummymodel-0.dns",
146
"instance-id": "dummymodel-0",
147
"current": "started",
148
"since": "01 Apr 15 01:23+10:00",
150
"dns-name": "admin-0.dns",
151
"instance-id": "admin-0",
153
"current": "pending",
154
"since": "01 Apr 15 01:23+10:00",
147
156
"series": "quantal",
148
157
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
149
158
"controller-member-status": "adding-vote",
152
"agent-state": "started",
153
"dns-name": "dummymodel-1.dns",
154
"instance-id": "dummymodel-1",
156
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
162
"current": "started",
163
"since": "01 Apr 15 01:23+10:00",
165
"dns-name": "admin-1.dns",
166
"instance-id": "admin-1",
168
"current": "pending",
169
"since": "01 Apr 15 01:23+10:00",
172
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
159
"agent-state": "started",
160
"dns-name": "dummymodel-2.dns",
161
"instance-id": "dummymodel-2",
163
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
176
"current": "started",
177
"since": "01 Apr 15 01:23+10:00",
179
"dns-name": "admin-2.dns",
180
"instance-id": "admin-2",
182
"current": "pending",
183
"since": "01 Apr 15 01:23+10:00",
186
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
166
"agent-state": "started",
167
"dns-name": "dummymodel-3.dns",
168
"instance-id": "dummymodel-3",
170
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
190
"current": "started",
191
"since": "01 Apr 15 01:23+10:00",
193
"dns-name": "admin-3.dns",
194
"instance-id": "admin-3",
196
"current": "pending",
197
"since": "01 Apr 15 01:23+10:00",
200
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
173
"agent-state": "started",
174
"dns-name": "dummymodel-4.dns",
175
"instance-id": "dummymodel-4",
177
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
204
"current": "started",
205
"since": "01 Apr 15 01:23+10:00",
207
"dns-name": "admin-4.dns",
208
"instance-id": "admin-4",
210
"current": "pending",
211
"since": "01 Apr 15 01:23+10:00",
214
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
179
216
machine1WithContainers = M{
180
"agent-state": "started",
218
"current": "started",
219
"since": "01 Apr 15 01:23+10:00",
183
"agent-state": "started",
224
"current": "started",
225
"since": "01 Apr 15 01:23+10:00",
185
228
"1/lxc/0/lxc/0": M{
186
"agent-state": "started",
187
"dns-name": "dummymodel-3.dns",
188
"instance-id": "dummymodel-3",
230
"current": "started",
231
"since": "01 Apr 15 01:23+10:00",
233
"dns-name": "admin-3.dns",
234
"instance-id": "admin-3",
236
"current": "pending",
237
"since": "01 Apr 15 01:23+10:00",
192
"dns-name": "dummymodel-2.dns",
193
"instance-id": "dummymodel-2",
242
"dns-name": "admin-2.dns",
243
"instance-id": "admin-2",
245
"current": "pending",
246
"since": "01 Apr 15 01:23+10:00",
197
"agent-state": "pending",
252
"current": "pending",
253
"since": "01 Apr 15 01:23+10:00",
198
255
"instance-id": "pending",
202
"dns-name": "dummymodel-1.dns",
203
"instance-id": "dummymodel-1",
205
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
207
machine1WithContainersScoped = M{
208
"agent-state": "started",
211
"agent-state": "started",
212
"dns-name": "dummymodel-2.dns",
213
"instance-id": "dummymodel-2",
217
"dns-name": "dummymodel-1.dns",
218
"instance-id": "dummymodel-1",
220
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
257
"current": "pending",
258
"since": "01 Apr 15 01:23+10:00",
263
"dns-name": "admin-1.dns",
264
"instance-id": "admin-1",
266
"current": "pending",
267
"since": "01 Apr 15 01:23+10:00",
271
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
222
273
unexposedService = M{
223
274
"service-status": M{
279
337
startAliveMachine{"0"},
280
338
setAddresses{"0", []network.Address{
281
339
network.NewAddress("10.0.0.1"),
282
network.NewScopedAddress("dummymodel-0.dns", network.ScopePublic),
340
network.NewScopedAddress("admin-0.dns", network.ScopePublic),
285
343
"simulate the PA starting an instance in response to the state change",
287
"model": "dummymodel",
290
"agent-state": "pending",
291
"dns-name": "dummymodel-0.dns",
292
"instance-id": "dummymodel-0",
349
"current": "pending",
350
"since": "01 Apr 15 01:23+10:00",
352
"dns-name": "admin-0.dns",
353
"instance-id": "admin-0",
355
"current": "pending",
356
"since": "01 Apr 15 01:23+10:00",
293
358
"series": "quantal",
294
359
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
295
360
"controller-member-status": "adding-vote",
336
408
addMachine{machineId: "0", cons: machineCons, job: state.JobManageModel},
337
409
setAddresses{"0", []network.Address{
338
410
network.NewAddress("10.0.0.1"),
339
network.NewScopedAddress("dummymodel-0.dns", network.ScopePublic),
411
network.NewScopedAddress("admin-0.dns", network.ScopePublic),
341
413
startAliveMachine{"0"},
342
setMachineStatus{"0", state.StatusStarted, ""},
414
setMachineStatus{"0", status.StatusStarted, ""},
344
416
"machine 0 has specific hardware characteristics",
346
"model": "dummymodel",
349
"agent-state": "started",
350
"dns-name": "dummymodel-0.dns",
351
"instance-id": "dummymodel-0",
422
"current": "started",
423
"since": "01 Apr 15 01:23+10:00",
425
"dns-name": "admin-0.dns",
426
"instance-id": "admin-0",
428
"current": "pending",
429
"since": "01 Apr 15 01:23+10:00",
352
431
"series": "quantal",
353
432
"hardware": "arch=amd64 cpu-cores=2 mem=8192M root-disk=8192M",
354
433
"controller-member-status": "adding-vote",
362
441
"instance without addresses",
363
442
addMachine{machineId: "0", cons: machineCons, job: state.JobManageModel},
364
443
startAliveMachine{"0"},
365
setMachineStatus{"0", state.StatusStarted, ""},
444
setMachineStatus{"0", status.StatusStarted, ""},
367
446
"machine 0 has no dns-name",
369
"model": "dummymodel",
372
"agent-state": "started",
373
"instance-id": "dummymodel-0",
452
"current": "started",
453
"since": "01 Apr 15 01:23+10:00",
455
"instance-id": "admin-0",
457
"current": "pending",
458
"since": "01 Apr 15 01:23+10:00",
374
460
"series": "quantal",
375
461
"hardware": "arch=amd64 cpu-cores=2 mem=8192M root-disk=8192M",
376
462
"controller-member-status": "adding-vote",
462
562
addMachine{machineId: "1", job: state.JobHostUnits},
463
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
563
setAddresses{"1", network.NewAddresses("admin-1.dns")},
464
564
startAliveMachine{"1"},
465
setMachineStatus{"1", state.StatusStarted, ""},
565
setMachineStatus{"1", status.StatusStarted, ""},
466
566
addMachine{machineId: "2", job: state.JobHostUnits},
467
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
567
setAddresses{"2", network.NewAddresses("admin-2.dns")},
468
568
startAliveMachine{"2"},
469
setMachineStatus{"2", state.StatusStarted, ""},
569
setMachineStatus{"2", status.StatusStarted, ""},
471
571
"two more machines added",
473
"model": "dummymodel",
566
666
addMachine{machineId: "3", job: state.JobHostUnits},
567
667
startMachine{"3"},
568
668
// Simulate some status with info, while the agent is down.
569
setAddresses{"3", network.NewAddresses("dummymodel-3.dns")},
570
setMachineStatus{"3", state.StatusStopped, "Really?"},
669
setAddresses{"3", network.NewAddresses("admin-3.dns")},
670
setMachineStatus{"3", status.StatusStopped, "Really?"},
571
671
addMachine{machineId: "4", job: state.JobHostUnits},
572
setAddresses{"4", network.NewAddresses("dummymodel-4.dns")},
672
setAddresses{"4", network.NewAddresses("admin-4.dns")},
573
673
startAliveMachine{"4"},
574
setMachineStatus{"4", state.StatusError, "Beware the red toys"},
674
setMachineStatus{"4", status.StatusError, "Beware the red toys"},
575
675
ensureDyingUnit{"dummy-service/0"},
576
676
addMachine{machineId: "5", job: state.JobHostUnits},
577
677
ensureDeadMachine{"5"},
579
679
"add three more machine, one with a dead agent, one in error state and one dead itself; also one dying unit",
581
"model": "dummymodel",
587
"dns-name": "dummymodel-3.dns",
588
"instance-id": "dummymodel-3",
589
"agent-state": "stopped",
590
"agent-state-info": "Really?",
592
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
687
"dns-name": "admin-3.dns",
688
"instance-id": "admin-3",
690
"current": "pending",
691
"since": "01 Apr 15 01:23+10:00",
694
"current": "stopped",
695
"message": "Really?",
696
"since": "01 Apr 15 01:23+10:00",
699
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
595
"dns-name": "dummymodel-4.dns",
596
"instance-id": "dummymodel-4",
597
"agent-state": "error",
598
"agent-state-info": "Beware the red toys",
600
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
702
"dns-name": "admin-4.dns",
703
"instance-id": "admin-4",
705
"current": "pending",
706
"since": "01 Apr 15 01:23+10:00",
710
"message": "Beware the red toys",
711
"since": "01 Apr 15 01:23+10:00",
714
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
603
"agent-state": "pending",
718
"current": "pending",
719
"since": "01 Apr 15 01:23+10:00",
605
722
"instance-id": "pending",
724
"current": "pending",
725
"since": "01 Apr 15 01:23+10:00",
874
995
"a unit with a hook relation error",
875
996
addMachine{machineId: "0", job: state.JobManageModel},
876
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
997
setAddresses{"0", network.NewAddresses("admin-0.dns")},
877
998
startAliveMachine{"0"},
878
setMachineStatus{"0", state.StatusStarted, ""},
999
setMachineStatus{"0", status.StatusStarted, ""},
880
1001
addMachine{machineId: "1", job: state.JobHostUnits},
881
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
1002
setAddresses{"1", network.NewAddresses("admin-1.dns")},
882
1003
startAliveMachine{"1"},
883
setMachineStatus{"1", state.StatusStarted, ""},
1004
setMachineStatus{"1", status.StatusStarted, ""},
885
1006
addCharm{"wordpress"},
886
1007
addService{name: "wordpress", charm: "wordpress"},
967
1088
"a unit with a hook relation error when the agent is down",
968
1089
addMachine{machineId: "0", job: state.JobManageModel},
969
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
1090
setAddresses{"0", network.NewAddresses("admin-0.dns")},
970
1091
startAliveMachine{"0"},
971
setMachineStatus{"0", state.StatusStarted, ""},
1092
setMachineStatus{"0", status.StatusStarted, ""},
973
1094
addMachine{machineId: "1", job: state.JobHostUnits},
974
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
1095
setAddresses{"1", network.NewAddresses("admin-1.dns")},
975
1096
startAliveMachine{"1"},
976
setMachineStatus{"1", state.StatusStarted, ""},
1097
setMachineStatus{"1", status.StatusStarted, ""},
978
1099
addCharm{"wordpress"},
979
1100
addService{name: "wordpress", charm: "wordpress"},
1109
1238
addService{name: "dummy-service", charm: "dummy"},
1110
1239
addMachine{machineId: "0", job: state.JobHostUnits},
1111
1240
startAliveMachine{"0"},
1112
setMachineStatus{"0", state.StatusStarted, ""},
1241
setMachineStatus{"0", status.StatusStarted, ""},
1113
1242
addUnit{"dummy-service", "0"},
1114
setAgentStatus{"dummy-service/0", state.StatusIdle, "", nil},
1115
setUnitStatus{"dummy-service/0", state.StatusActive, "", nil},
1243
setAgentStatus{"dummy-service/0", status.StatusIdle, "", nil},
1244
setUnitStatus{"dummy-service/0", status.StatusActive, "", nil},
1117
1246
"unit shows that agent is lost",
1119
"model": "dummymodel",
1122
"agent-state": "started",
1123
"instance-id": "dummymodel-0",
1124
"series": "quantal",
1125
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
1252
"current": "started",
1253
"since": "01 Apr 15 01:23+10:00",
1255
"instance-id": "admin-0",
1256
"machine-status": M{
1257
"current": "pending",
1258
"since": "01 Apr 15 01:23+10:00",
1261
"series": "quantal",
1262
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
1168
1305
addService{name: "project", charm: "wordpress"},
1169
1306
setServiceExposed{"project", true},
1170
1307
addMachine{machineId: "1", job: state.JobHostUnits},
1171
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
1308
setAddresses{"1", network.NewAddresses("admin-1.dns")},
1172
1309
startAliveMachine{"1"},
1173
setMachineStatus{"1", state.StatusStarted, ""},
1310
setMachineStatus{"1", status.StatusStarted, ""},
1174
1311
addAliveUnit{"project", "1"},
1175
setAgentStatus{"project/0", state.StatusIdle, "", nil},
1176
setUnitStatus{"project/0", state.StatusActive, "", nil},
1312
setAgentStatus{"project/0", status.StatusIdle, "", nil},
1313
setUnitStatus{"project/0", status.StatusActive, "", nil},
1178
1315
addService{name: "mysql", charm: "mysql"},
1179
1316
setServiceExposed{"mysql", true},
1180
1317
addMachine{machineId: "2", job: state.JobHostUnits},
1181
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
1318
setAddresses{"2", network.NewAddresses("admin-2.dns")},
1182
1319
startAliveMachine{"2"},
1183
setMachineStatus{"2", state.StatusStarted, ""},
1320
setMachineStatus{"2", status.StatusStarted, ""},
1184
1321
addAliveUnit{"mysql", "2"},
1185
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
1186
setUnitStatus{"mysql/0", state.StatusActive, "", nil},
1322
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
1323
setUnitStatus{"mysql/0", status.StatusActive, "", nil},
1188
1325
addService{name: "varnish", charm: "varnish"},
1189
1326
setServiceExposed{"varnish", true},
1190
1327
addMachine{machineId: "3", job: state.JobHostUnits},
1191
setAddresses{"3", network.NewAddresses("dummymodel-3.dns")},
1328
setAddresses{"3", network.NewAddresses("admin-3.dns")},
1192
1329
startAliveMachine{"3"},
1193
setMachineStatus{"3", state.StatusStarted, ""},
1330
setMachineStatus{"3", status.StatusStarted, ""},
1194
1331
addAliveUnit{"varnish", "3"},
1196
1333
addService{name: "private", charm: "wordpress"},
1197
1334
setServiceExposed{"private", true},
1198
1335
addMachine{machineId: "4", job: state.JobHostUnits},
1199
setAddresses{"4", network.NewAddresses("dummymodel-4.dns")},
1336
setAddresses{"4", network.NewAddresses("admin-4.dns")},
1200
1337
startAliveMachine{"4"},
1201
setMachineStatus{"4", state.StatusStarted, ""},
1338
setMachineStatus{"4", status.StatusStarted, ""},
1202
1339
addAliveUnit{"private", "4"},
1204
1341
relateServices{"project", "mysql"},
1330
1467
"simple peer scenario",
1331
1468
addMachine{machineId: "0", job: state.JobManageModel},
1332
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
1469
setAddresses{"0", network.NewAddresses("admin-0.dns")},
1333
1470
startAliveMachine{"0"},
1334
setMachineStatus{"0", state.StatusStarted, ""},
1471
setMachineStatus{"0", status.StatusStarted, ""},
1335
1472
addCharm{"riak"},
1336
1473
addCharm{"wordpress"},
1338
1475
addService{name: "riak", charm: "riak"},
1339
1476
setServiceExposed{"riak", true},
1340
1477
addMachine{machineId: "1", job: state.JobHostUnits},
1341
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
1478
setAddresses{"1", network.NewAddresses("admin-1.dns")},
1342
1479
startAliveMachine{"1"},
1343
setMachineStatus{"1", state.StatusStarted, ""},
1480
setMachineStatus{"1", status.StatusStarted, ""},
1344
1481
addAliveUnit{"riak", "1"},
1345
setAgentStatus{"riak/0", state.StatusIdle, "", nil},
1346
setUnitStatus{"riak/0", state.StatusActive, "", nil},
1482
setAgentStatus{"riak/0", status.StatusIdle, "", nil},
1483
setUnitStatus{"riak/0", status.StatusActive, "", nil},
1347
1484
addMachine{machineId: "2", job: state.JobHostUnits},
1348
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
1485
setAddresses{"2", network.NewAddresses("admin-2.dns")},
1349
1486
startAliveMachine{"2"},
1350
setMachineStatus{"2", state.StatusStarted, ""},
1487
setMachineStatus{"2", status.StatusStarted, ""},
1351
1488
addAliveUnit{"riak", "2"},
1352
setAgentStatus{"riak/1", state.StatusIdle, "", nil},
1353
setUnitStatus{"riak/1", state.StatusActive, "", nil},
1489
setAgentStatus{"riak/1", status.StatusIdle, "", nil},
1490
setUnitStatus{"riak/1", status.StatusActive, "", nil},
1354
1491
addMachine{machineId: "3", job: state.JobHostUnits},
1355
setAddresses{"3", network.NewAddresses("dummymodel-3.dns")},
1492
setAddresses{"3", network.NewAddresses("admin-3.dns")},
1356
1493
startAliveMachine{"3"},
1357
setMachineStatus{"3", state.StatusStarted, ""},
1494
setMachineStatus{"3", status.StatusStarted, ""},
1358
1495
addAliveUnit{"riak", "3"},
1359
setAgentStatus{"riak/2", state.StatusIdle, "", nil},
1360
setUnitStatus{"riak/2", state.StatusActive, "", nil},
1496
setAgentStatus{"riak/2", status.StatusIdle, "", nil},
1497
setUnitStatus{"riak/2", status.StatusActive, "", nil},
1363
1500
"multiples related peer units",
1365
"model": "dummymodel",
1438
1575
addService{name: "wordpress", charm: "wordpress"},
1439
1576
setServiceExposed{"wordpress", true},
1440
1577
addMachine{machineId: "1", job: state.JobHostUnits},
1441
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
1578
setAddresses{"1", network.NewAddresses("admin-1.dns")},
1442
1579
startAliveMachine{"1"},
1443
setMachineStatus{"1", state.StatusStarted, ""},
1580
setMachineStatus{"1", status.StatusStarted, ""},
1444
1581
addAliveUnit{"wordpress", "1"},
1445
setAgentStatus{"wordpress/0", state.StatusIdle, "", nil},
1446
setUnitStatus{"wordpress/0", state.StatusActive, "", nil},
1582
setAgentStatus{"wordpress/0", status.StatusIdle, "", nil},
1583
setUnitStatus{"wordpress/0", status.StatusActive, "", nil},
1448
1585
addService{name: "mysql", charm: "mysql"},
1449
1586
setServiceExposed{"mysql", true},
1450
1587
addMachine{machineId: "2", job: state.JobHostUnits},
1451
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
1588
setAddresses{"2", network.NewAddresses("admin-2.dns")},
1452
1589
startAliveMachine{"2"},
1453
setMachineStatus{"2", state.StatusStarted, ""},
1590
setMachineStatus{"2", status.StatusStarted, ""},
1454
1591
addAliveUnit{"mysql", "2"},
1455
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
1456
setUnitStatus{"mysql/0", state.StatusActive, "", nil},
1592
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
1593
setUnitStatus{"mysql/0", status.StatusActive, "", nil},
1458
1595
addService{name: "logging", charm: "logging"},
1459
1596
setServiceExposed{"logging", true},
1466
1603
addSubordinate{"mysql/0", "logging"},
1468
1605
setUnitsAlive{"logging"},
1469
setAgentStatus{"logging/0", state.StatusIdle, "", nil},
1470
setUnitStatus{"logging/0", state.StatusActive, "", nil},
1471
setAgentStatus{"logging/1", state.StatusError, "somehow lost in all those logs", nil},
1606
setAgentStatus{"logging/0", status.StatusIdle, "", nil},
1607
setUnitStatus{"logging/0", status.StatusActive, "", nil},
1608
setAgentStatus{"logging/1", status.StatusError, "somehow lost in all those logs", nil},
1474
1611
"multiples related peer units",
1476
"model": "dummymodel",
1744
1881
"machines with containers",
1746
1883
addMachine{machineId: "0", job: state.JobManageModel},
1747
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
1884
setAddresses{"0", network.NewAddresses("admin-0.dns")},
1748
1885
startAliveMachine{"0"},
1749
setMachineStatus{"0", state.StatusStarted, ""},
1886
setMachineStatus{"0", status.StatusStarted, ""},
1750
1887
addCharm{"mysql"},
1751
1888
addService{name: "mysql", charm: "mysql"},
1752
1889
setServiceExposed{"mysql", true},
1755
1892
addMachine{machineId: "1", job: state.JobHostUnits},
1756
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
1893
setAddresses{"1", network.NewAddresses("admin-1.dns")},
1757
1894
startAliveMachine{"1"},
1758
setMachineStatus{"1", state.StatusStarted, ""},
1895
setMachineStatus{"1", status.StatusStarted, ""},
1759
1896
addAliveUnit{"mysql", "1"},
1760
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
1761
setUnitStatus{"mysql/0", state.StatusActive, "", nil},
1897
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
1898
setUnitStatus{"mysql/0", status.StatusActive, "", nil},
1763
1900
// step 14: A container on machine 1.
1764
1901
addContainer{"1", "1/lxc/0", state.JobHostUnits},
1765
setAddresses{"1/lxc/0", network.NewAddresses("dummymodel-2.dns")},
1902
setAddresses{"1/lxc/0", network.NewAddresses("admin-2.dns")},
1766
1903
startAliveMachine{"1/lxc/0"},
1767
setMachineStatus{"1/lxc/0", state.StatusStarted, ""},
1904
setMachineStatus{"1/lxc/0", status.StatusStarted, ""},
1768
1905
addAliveUnit{"mysql", "1/lxc/0"},
1769
setAgentStatus{"mysql/1", state.StatusIdle, "", nil},
1770
setUnitStatus{"mysql/1", state.StatusActive, "", nil},
1906
setAgentStatus{"mysql/1", status.StatusIdle, "", nil},
1907
setUnitStatus{"mysql/1", status.StatusActive, "", nil},
1771
1908
addContainer{"1", "1/lxc/1", state.JobHostUnits},
1773
1910
// step 22: A nested container.
1774
1911
addContainer{"1/lxc/0", "1/lxc/0/lxc/0", state.JobHostUnits},
1775
setAddresses{"1/lxc/0/lxc/0", network.NewAddresses("dummymodel-3.dns")},
1912
setAddresses{"1/lxc/0/lxc/0", network.NewAddresses("admin-3.dns")},
1776
1913
startAliveMachine{"1/lxc/0/lxc/0"},
1777
setMachineStatus{"1/lxc/0/lxc/0", state.StatusStarted, ""},
1914
setMachineStatus{"1/lxc/0/lxc/0", status.StatusStarted, ""},
1780
1917
"machines with nested containers",
1782
"model": "dummymodel",
1785
1922
"1": machine1WithContainers,
1826
1963
// step 27: once again, with a scope on mysql/1
1828
"machines with nested containers",
1965
"machines with nested containers 2",
1829
1966
[]string{"mysql/1"},
1831
"model": "dummymodel",
1834
"agent-state": "started",
1972
"current": "started",
1973
"since": "01 Apr 15 01:23+10:00",
1835
1975
"containers": M{
1837
"agent-state": "started",
1838
"dns-name": "dummymodel-2.dns",
1839
"instance-id": "dummymodel-2",
1840
"series": "quantal",
1978
"current": "started",
1979
"since": "01 Apr 15 01:23+10:00",
1981
"dns-name": "admin-2.dns",
1982
"instance-id": "admin-2",
1983
"machine-status": M{
1984
"current": "pending",
1985
"since": "01 Apr 15 01:23+10:00",
1988
"series": "quantal",
1843
"dns-name": "dummymodel-1.dns",
1844
"instance-id": "dummymodel-1",
1845
"series": "quantal",
1846
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
1991
"dns-name": "admin-1.dns",
1992
"instance-id": "admin-1",
1993
"machine-status": M{
1994
"current": "pending",
1995
"since": "01 Apr 15 01:23+10:00",
1998
"series": "quantal",
1999
"hardware": "arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M",
1877
2030
"service with out of date charm",
1878
2031
addMachine{machineId: "0", job: state.JobManageModel},
1879
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
2032
setAddresses{"0", network.NewAddresses("admin-0.dns")},
1880
2033
startAliveMachine{"0"},
1881
setMachineStatus{"0", state.StatusStarted, ""},
2034
setMachineStatus{"0", status.StatusStarted, ""},
1882
2035
addMachine{machineId: "1", job: state.JobHostUnits},
1883
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
2036
setAddresses{"1", network.NewAddresses("admin-1.dns")},
1884
2037
startAliveMachine{"1"},
1885
setMachineStatus{"1", state.StatusStarted, ""},
2038
setMachineStatus{"1", status.StatusStarted, ""},
1886
2039
addCharm{"mysql"},
1887
2040
addService{name: "mysql", charm: "mysql"},
1888
2041
setServiceExposed{"mysql", true},
1931
2084
"unit with out of date charm",
1932
2085
addMachine{machineId: "0", job: state.JobManageModel},
1933
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
2086
setAddresses{"0", network.NewAddresses("admin-0.dns")},
1934
2087
startAliveMachine{"0"},
1935
setMachineStatus{"0", state.StatusStarted, ""},
2088
setMachineStatus{"0", status.StatusStarted, ""},
1936
2089
addMachine{machineId: "1", job: state.JobHostUnits},
1937
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
2090
setAddresses{"1", network.NewAddresses("admin-1.dns")},
1938
2091
startAliveMachine{"1"},
1939
setMachineStatus{"1", state.StatusStarted, ""},
2092
setMachineStatus{"1", status.StatusStarted, ""},
1940
2093
addCharm{"mysql"},
1941
2094
addService{name: "mysql", charm: "mysql"},
1942
2095
setServiceExposed{"mysql", true},
1985
2138
"service and unit with out of date charms",
1986
2139
addMachine{machineId: "0", job: state.JobManageModel},
1987
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
2140
setAddresses{"0", network.NewAddresses("admin-0.dns")},
1988
2141
startAliveMachine{"0"},
1989
setMachineStatus{"0", state.StatusStarted, ""},
2142
setMachineStatus{"0", status.StatusStarted, ""},
1990
2143
addMachine{machineId: "1", job: state.JobHostUnits},
1991
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
2144
setAddresses{"1", network.NewAddresses("admin-1.dns")},
1992
2145
startAliveMachine{"1"},
1993
setMachineStatus{"1", state.StatusStarted, ""},
2146
setMachineStatus{"1", status.StatusStarted, ""},
1994
2147
addCharm{"mysql"},
1995
2148
addService{name: "mysql", charm: "mysql"},
1996
2149
setServiceExposed{"mysql", true},
2041
2194
"service with local charm not shown as out of date",
2042
2195
addMachine{machineId: "0", job: state.JobManageModel},
2043
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
2196
setAddresses{"0", network.NewAddresses("admin-0.dns")},
2044
2197
startAliveMachine{"0"},
2045
setMachineStatus{"0", state.StatusStarted, ""},
2198
setMachineStatus{"0", status.StatusStarted, ""},
2046
2199
addMachine{machineId: "1", job: state.JobHostUnits},
2047
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
2200
setAddresses{"1", network.NewAddresses("admin-1.dns")},
2048
2201
startAliveMachine{"1"},
2049
setMachineStatus{"1", state.StatusStarted, ""},
2202
setMachineStatus{"1", status.StatusStarted, ""},
2050
2203
addCharm{"mysql"},
2051
2204
addService{name: "mysql", charm: "mysql"},
2052
2205
setServiceExposed{"mysql", true},
2096
2249
"deploy two services; set meter statuses on one",
2097
2250
addMachine{machineId: "0", job: state.JobManageModel},
2098
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
2251
setAddresses{"0", network.NewAddresses("admin-0.dns")},
2099
2252
startAliveMachine{"0"},
2100
setMachineStatus{"0", state.StatusStarted, ""},
2253
setMachineStatus{"0", status.StatusStarted, ""},
2102
2255
addMachine{machineId: "1", job: state.JobHostUnits},
2103
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
2256
setAddresses{"1", network.NewAddresses("admin-1.dns")},
2104
2257
startAliveMachine{"1"},
2105
setMachineStatus{"1", state.StatusStarted, ""},
2258
setMachineStatus{"1", status.StatusStarted, ""},
2107
2260
addMachine{machineId: "2", job: state.JobHostUnits},
2108
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
2261
setAddresses{"2", network.NewAddresses("admin-2.dns")},
2109
2262
startAliveMachine{"2"},
2110
setMachineStatus{"2", state.StatusStarted, ""},
2263
setMachineStatus{"2", status.StatusStarted, ""},
2112
2265
addMachine{machineId: "3", job: state.JobHostUnits},
2113
setAddresses{"3", network.NewAddresses("dummymodel-3.dns")},
2266
setAddresses{"3", network.NewAddresses("admin-3.dns")},
2114
2267
startAliveMachine{"3"},
2115
setMachineStatus{"3", state.StatusStarted, ""},
2268
setMachineStatus{"3", status.StatusStarted, ""},
2117
2270
addMachine{machineId: "4", job: state.JobHostUnits},
2118
setAddresses{"4", network.NewAddresses("dummymodel-4.dns")},
2271
setAddresses{"4", network.NewAddresses("admin-4.dns")},
2119
2272
startAliveMachine{"4"},
2120
setMachineStatus{"4", state.StatusStarted, ""},
2273
setMachineStatus{"4", status.StatusStarted, ""},
2122
2275
addCharm{"mysql"},
2123
2276
addService{name: "mysql", charm: "mysql"},
2133
2286
setServiceExposed{"mysql", true},
2135
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
2136
setUnitStatus{"mysql/0", state.StatusActive, "", nil},
2137
setAgentStatus{"servicewithmeterstatus/0", state.StatusIdle, "", nil},
2138
setUnitStatus{"servicewithmeterstatus/0", state.StatusActive, "", nil},
2139
setAgentStatus{"servicewithmeterstatus/1", state.StatusIdle, "", nil},
2140
setUnitStatus{"servicewithmeterstatus/1", state.StatusActive, "", nil},
2141
setAgentStatus{"servicewithmeterstatus/2", state.StatusIdle, "", nil},
2142
setUnitStatus{"servicewithmeterstatus/2", state.StatusActive, "", nil},
2288
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
2289
setUnitStatus{"mysql/0", status.StatusActive, "", nil},
2290
setAgentStatus{"servicewithmeterstatus/0", status.StatusIdle, "", nil},
2291
setUnitStatus{"servicewithmeterstatus/0", status.StatusActive, "", nil},
2292
setAgentStatus{"servicewithmeterstatus/1", status.StatusIdle, "", nil},
2293
setUnitStatus{"servicewithmeterstatus/1", status.StatusActive, "", nil},
2294
setAgentStatus{"servicewithmeterstatus/2", status.StatusIdle, "", nil},
2295
setUnitStatus{"servicewithmeterstatus/2", status.StatusActive, "", nil},
2144
2297
setUnitMeterStatus{"servicewithmeterstatus/1", "GREEN", "test green status"},
2145
2298
setUnitMeterStatus{"servicewithmeterstatus/2", "RED", "test red status"},
2831
2978
addMachine{machineId: "1", job: state.JobHostUnits},
2832
2979
setAddresses{"1", network.NewAddresses("localhost")},
2833
2980
startAliveMachine{"1"},
2834
setMachineStatus{"1", state.StatusStarted, ""},
2981
setMachineStatus{"1", status.StatusStarted, ""},
2835
2982
addAliveUnit{"wordpress", "1"},
2836
setAgentStatus{"wordpress/0", state.StatusIdle, "", nil},
2837
setUnitStatus{"wordpress/0", state.StatusActive, "", nil},
2983
setAgentStatus{"wordpress/0", status.StatusIdle, "", nil},
2984
setUnitStatus{"wordpress/0", status.StatusActive, "", nil},
2838
2985
addService{name: "mysql", charm: "mysql"},
2839
2986
setServiceExposed{"mysql", true},
2840
2987
addMachine{machineId: "2", job: state.JobHostUnits},
2841
2988
setAddresses{"2", network.NewAddresses("10.0.0.1")},
2842
2989
startAliveMachine{"2"},
2843
setMachineStatus{"2", state.StatusStarted, ""},
2990
setMachineStatus{"2", status.StatusStarted, ""},
2844
2991
addAliveUnit{"mysql", "2"},
2845
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
2846
setUnitStatus{"mysql/0", state.StatusActive, "", nil},
2992
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
2993
setUnitStatus{"mysql/0", status.StatusActive, "", nil},
2847
2994
addService{name: "logging", charm: "logging"},
2848
2995
setServiceExposed{"logging", true},
2849
2996
relateServices{"wordpress", "mysql"},
2852
2999
addSubordinate{"wordpress/0", "logging"},
2853
3000
addSubordinate{"mysql/0", "logging"},
2854
3001
setUnitsAlive{"logging"},
2855
setAgentStatus{"logging/0", state.StatusIdle, "", nil},
2856
setUnitStatus{"logging/0", state.StatusActive, "", nil},
2857
setAgentStatus{"logging/1", state.StatusError, "somehow lost in all those logs", nil},
3002
setAgentStatus{"logging/0", status.StatusIdle, "", nil},
3003
setUnitStatus{"logging/0", status.StatusActive, "", nil},
3004
setAgentStatus{"logging/1", status.StatusError, "somehow lost in all those logs", nil},
2859
3006
for _, s := range steps {
2894
3041
addService{name: "wordpress", charm: "wordpress"},
2895
3042
setServiceExposed{"wordpress", true},
2896
3043
addMachine{machineId: "1", job: state.JobHostUnits},
2897
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
3044
setAddresses{"1", network.NewAddresses("admin-1.dns")},
2898
3045
startAliveMachine{"1"},
2899
setMachineStatus{"1", state.StatusStarted, ""},
3046
setMachineStatus{"1", status.StatusStarted, ""},
2900
3047
addAliveUnit{"wordpress", "1"},
2901
setAgentStatus{"wordpress/0", state.StatusIdle, "", nil},
2902
setUnitStatus{"wordpress/0", state.StatusActive, "", nil},
3048
setAgentStatus{"wordpress/0", status.StatusIdle, "", nil},
3049
setUnitStatus{"wordpress/0", status.StatusActive, "", nil},
2904
3051
addService{name: "mysql", charm: "mysql"},
2905
3052
setServiceExposed{"mysql", true},
2906
3053
addMachine{machineId: "2", job: state.JobHostUnits},
2907
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
3054
setAddresses{"2", network.NewAddresses("admin-2.dns")},
2908
3055
startAliveMachine{"2"},
2909
setMachineStatus{"2", state.StatusStarted, ""},
3056
setMachineStatus{"2", status.StatusStarted, ""},
2910
3057
addAliveUnit{"mysql", "2"},
2911
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
2912
setUnitStatus{"mysql/0", state.StatusActive, "", nil},
3058
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
3059
setUnitStatus{"mysql/0", status.StatusActive, "", nil},
2914
3061
addService{name: "logging", charm: "logging"},
2915
3062
setServiceExposed{"logging", true},
2922
3069
addSubordinate{"mysql/0", "logging"},
2924
3071
setUnitsAlive{"logging"},
2925
setAgentStatus{"logging/0", state.StatusIdle, "", nil},
2926
setUnitStatus{"logging/0", state.StatusActive, "", nil},
2927
setAgentStatus{"logging/1", state.StatusError, "somehow lost in all those logs", nil},
3072
setAgentStatus{"logging/0", status.StatusIdle, "", nil},
3073
setUnitStatus{"logging/0", status.StatusActive, "", nil},
3074
setAgentStatus{"logging/1", status.StatusError, "somehow lost in all those logs", nil},
2930
3077
ctx.run(c, steps)
2932
3079
const expected = `
2933
- mysql/0: dummymodel-2.dns (agent:idle, workload:active)
2934
- logging/1: dummymodel-2.dns (agent:idle, workload:error)
2935
- wordpress/0: dummymodel-1.dns (agent:idle, workload:active)
2936
- logging/0: dummymodel-1.dns (agent:idle, workload:active)
3080
- mysql/0: admin-2.dns (agent:idle, workload:active)
3081
- logging/1: admin-2.dns (agent:idle, workload:error)
3082
- wordpress/0: admin-1.dns (agent:idle, workload:active)
3083
- logging/0: admin-1.dns (agent:idle, workload:active)
2938
3085
assertOneLineStatus(c, expected)
2962
3109
steps := []stepper{
2963
3110
setToolsUpgradeAvailable{},
2964
3111
addMachine{machineId: "0", job: state.JobManageModel},
2965
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
3112
setAddresses{"0", network.NewAddresses("admin-0.dns")},
2966
3113
startMachineWithHardware{"0", instance.MustParseHardware("availability-zone=us-east-1a")},
2967
setMachineStatus{"0", state.StatusStarted, ""},
3114
setMachineStatus{"0", status.StatusStarted, ""},
2968
3115
addCharm{"wordpress"},
2969
3116
addCharm{"mysql"},
2970
3117
addCharm{"logging"},
2971
3118
addService{name: "wordpress", charm: "wordpress"},
2972
3119
setServiceExposed{"wordpress", true},
2973
3120
addMachine{machineId: "1", job: state.JobHostUnits},
2974
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
3121
setAddresses{"1", network.NewAddresses("admin-1.dns")},
2975
3122
startAliveMachine{"1"},
2976
setMachineStatus{"1", state.StatusStarted, ""},
3123
setMachineStatus{"1", status.StatusStarted, ""},
2977
3124
addAliveUnit{"wordpress", "1"},
2978
setAgentStatus{"wordpress/0", state.StatusIdle, "", nil},
2979
setUnitStatus{"wordpress/0", state.StatusActive, "", nil},
3125
setAgentStatus{"wordpress/0", status.StatusIdle, "", nil},
3126
setUnitStatus{"wordpress/0", status.StatusActive, "", nil},
2980
3127
setUnitTools{"wordpress/0", version.MustParseBinary("1.2.3-trusty-ppc")},
2981
3128
addService{name: "mysql", charm: "mysql"},
2982
3129
setServiceExposed{"mysql", true},
2983
3130
addMachine{machineId: "2", job: state.JobHostUnits},
2984
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
3131
setAddresses{"2", network.NewAddresses("admin-2.dns")},
2985
3132
startAliveMachine{"2"},
2986
setMachineStatus{"2", state.StatusStarted, ""},
3133
setMachineStatus{"2", status.StatusStarted, ""},
2987
3134
addAliveUnit{"mysql", "2"},
2988
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
3135
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
2991
state.StatusMaintenance,
3138
status.StatusMaintenance,
2992
3139
"installing all the things", nil},
2993
3140
setUnitTools{"mysql/0", version.MustParseBinary("1.2.3-trusty-ppc")},
2994
3141
addService{name: "logging", charm: "logging"},
2999
3146
addSubordinate{"wordpress/0", "logging"},
3000
3147
addSubordinate{"mysql/0", "logging"},
3001
3148
setUnitsAlive{"logging"},
3002
setAgentStatus{"logging/0", state.StatusIdle, "", nil},
3003
setUnitStatus{"logging/0", state.StatusActive, "", nil},
3004
setAgentStatus{"logging/1", state.StatusError, "somehow lost in all those logs", nil},
3149
setAgentStatus{"logging/0", status.StatusIdle, "", nil},
3150
setUnitStatus{"logging/0", status.StatusActive, "", nil},
3151
setAgentStatus{"logging/1", status.StatusError, "somehow lost in all those logs", nil},
3006
3153
for _, s := range steps {
3036
3183
logging wordpress logging-dir regular
3037
3184
mysql logging info subordinate
3038
3185
mysql wordpress db regular
3039
mysql wordpress db regular
3040
3186
wordpress logging logging-directory subordinate
3043
ID WORKLOAD-STATE AGENT-STATE VERSION MACHINE PORTS PUBLIC-ADDRESS MESSAGE
3044
mysql/0 maintenance idle 1.2.3 2 dummymodel-2.dns installing all the things
3045
logging/1 error idle dummymodel-2.dns somehow lost in all those logs
3046
wordpress/0 active idle 1.2.3 1 dummymodel-1.dns
3047
logging/0 active idle dummymodel-1.dns
3189
ID WORKLOAD-STATUS JUJU-STATUS VERSION MACHINE PORTS PUBLIC-ADDRESS MESSAGE
3190
mysql/0 maintenance idle 1.2.3 2 admin-2.dns installing all the things
3191
logging/1 error idle admin-2.dns somehow lost in all those logs
3192
wordpress/0 active idle 1.2.3 1 admin-1.dns
3193
logging/0 active idle admin-1.dns
3050
ID STATE DNS INS-ID SERIES AZ
3051
0 started dummymodel-0.dns dummymodel-0 quantal us-east-1a
3052
1 started dummymodel-1.dns dummymodel-1 quantal
3053
2 started dummymodel-2.dns dummymodel-2 quantal
3196
ID STATE DNS INS-ID SERIES AZ
3197
0 started admin-0.dns admin-0 quantal us-east-1a
3198
1 started admin-1.dns admin-1 quantal
3199
2 started admin-2.dns admin-2 quantal
3056
3202
nextVersionStr := nextVersion().String()
3068
3214
"foo": serviceStatus{
3069
3215
Units: map[string]unitStatus{
3070
3216
"foo/0": unitStatus{
3071
AgentStatusInfo: statusInfoContents{
3072
Current: params.StatusExecuting,
3217
JujuStatusInfo: statusInfoContents{
3218
Current: status.StatusExecuting,
3073
3219
Message: "running config-changed hook",
3075
3221
WorkloadStatusInfo: statusInfoContents{
3076
Current: params.StatusMaintenance,
3222
Current: status.StatusMaintenance,
3077
3223
Message: "doing some work",
3080
3226
"foo/1": unitStatus{
3081
AgentStatusInfo: statusInfoContents{
3082
Current: params.StatusExecuting,
3227
JujuStatusInfo: statusInfoContents{
3228
Current: status.StatusExecuting,
3083
3229
Message: "running action backup database",
3085
3231
WorkloadStatusInfo: statusInfoContents{
3086
Current: params.StatusMaintenance,
3232
Current: status.StatusMaintenance,
3087
3233
Message: "doing some work",
3170
3316
// And the machine's job is to host units
3171
3317
addMachine{machineId: "1", job: state.JobHostUnits},
3172
3318
startAliveMachine{"1"},
3173
setMachineStatus{"1", state.StatusStarted, ""},
3174
// And the machine's address is "dummymodel-1.dns"
3175
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
3319
setMachineStatus{"1", status.StatusStarted, ""},
3320
// And the machine's address is "admin-1.dns"
3321
setAddresses{"1", network.NewAddresses("admin-1.dns")},
3176
3322
// And a unit of "wordpress" is deployed to machine "1"
3177
3323
addAliveUnit{"wordpress", "1"},
3178
3324
// And the unit is started
3179
setAgentStatus{"wordpress/0", state.StatusIdle, "", nil},
3180
setUnitStatus{"wordpress/0", state.StatusActive, "", nil},
3325
setAgentStatus{"wordpress/0", status.StatusIdle, "", nil},
3326
setUnitStatus{"wordpress/0", status.StatusActive, "", nil},
3181
3327
// And a machine is started
3183
3329
// And the machine's ID is "2"
3184
3330
// And the machine's job is to host units
3185
3331
addMachine{machineId: "2", job: state.JobHostUnits},
3186
3332
startAliveMachine{"2"},
3187
setMachineStatus{"2", state.StatusStarted, ""},
3188
// And the machine's address is "dummymodel-2.dns"
3189
setAddresses{"2", network.NewAddresses("dummymodel-2.dns")},
3333
setMachineStatus{"2", status.StatusStarted, ""},
3334
// And the machine's address is "admin-2.dns"
3335
setAddresses{"2", network.NewAddresses("admin-2.dns")},
3190
3336
// And a unit of "mysql" is deployed to machine "2"
3191
3337
addAliveUnit{"mysql", "2"},
3192
3338
// And the unit is started
3193
setAgentStatus{"mysql/0", state.StatusIdle, "", nil},
3194
setUnitStatus{"mysql/0", state.StatusActive, "", nil},
3339
setAgentStatus{"mysql/0", status.StatusIdle, "", nil},
3340
setUnitStatus{"mysql/0", status.StatusActive, "", nil},
3195
3341
// And the "logging" service is added
3196
3342
addService{name: "logging", charm: "logging"},
3197
3343
// And the service is exposed
3204
3350
relateServices{"mysql", "logging"},
3205
3351
// And the "logging" service is a subordinate to unit 0 of the "wordpress" service
3206
3352
addSubordinate{"wordpress/0", "logging"},
3207
setAgentStatus{"logging/0", state.StatusIdle, "", nil},
3208
setUnitStatus{"logging/0", state.StatusActive, "", nil},
3353
setAgentStatus{"logging/0", status.StatusIdle, "", nil},
3354
setUnitStatus{"logging/0", status.StatusActive, "", nil},
3209
3355
// And the "logging" service is a subordinate to unit 0 of the "mysql" service
3210
3356
addSubordinate{"mysql/0", "logging"},
3211
setAgentStatus{"logging/1", state.StatusIdle, "", nil},
3212
setUnitStatus{"logging/1", state.StatusActive, "", nil},
3357
setAgentStatus{"logging/1", status.StatusIdle, "", nil},
3358
setUnitStatus{"logging/1", status.StatusActive, "", nil},
3213
3359
setUnitsAlive{"logging"},
3220
// Scenario: One unit is in an errored state and user filters to started
3221
func (s *StatusSuite) TestFilterToStarted(c *gc.C) {
3366
// Scenario: One unit is in an errored state and user filters to active
3367
func (s *StatusSuite) TestFilterToActive(c *gc.C) {
3222
3368
ctx := s.FilteringTestSetup(c)
3223
3369
defer s.resetContext(c, ctx)
3225
3371
// Given unit 1 of the "logging" service has an error
3226
setAgentStatus{"logging/1", state.StatusError, "mock error", nil}.step(c, ctx)
3372
setAgentStatus{"logging/1", status.StatusError, "mock error", nil}.step(c, ctx)
3227
3373
// And unit 0 of the "mysql" service has an error
3228
setAgentStatus{"mysql/0", state.StatusError, "mock error", nil}.step(c, ctx)
3374
setAgentStatus{"mysql/0", status.StatusError, "mock error", nil}.step(c, ctx)
3229
3375
// When I run juju status --format oneline started
3230
_, stdout, stderr := runStatus(c, "--format", "oneline", "started")
3376
_, stdout, stderr := runStatus(c, "--format", "oneline", "active")
3231
3377
c.Assert(string(stderr), gc.Equals, "")
3232
3378
// Then I should receive output prefixed with:
3233
3379
const expected = `
3235
- wordpress/0: dummymodel-1.dns (agent:idle, workload:active)
3236
- logging/0: dummymodel-1.dns (agent:idle, workload:active)
3381
- wordpress/0: admin-1.dns (agent:idle, workload:active)
3382
- logging/0: admin-1.dns (agent:idle, workload:active)
3238
3384
c.Assert(string(stdout), gc.Equals, expected[1:])
3276
3422
// When I run juju status --format yaml 0/lxc/0
3277
3423
_, stdout, stderr := runStatus(c, "--format", "yaml", "0/lxc/0")
3278
3424
c.Assert(string(stderr), gc.Equals, "")
3279
// Then I should receive output equal to:
3284
agent-state: started
3285
dns-name: dummymodel-0.dns
3286
instance-id: dummymodel-0
3290
agent-state: pending
3291
instance-id: pending
3293
hardware: arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M
3294
controller-member-status: adding-vote
3297
c.Assert(string(stdout), gc.Equals, expected[1:])
3425
out := substituteFakeSinceTime(c, stdout, ctx.expectIsoTime)
3426
const expected = "" +
3431
" current: started\n" +
3432
" since: 01 Apr 15 01:23+10:00\n" +
3433
" dns-name: admin-0.dns\n" +
3434
" instance-id: admin-0\n" +
3435
" machine-status:\n" +
3436
" current: pending\n" +
3437
" since: 01 Apr 15 01:23+10:00\n" +
3438
" series: quantal\n" +
3442
" current: pending\n" +
3443
" since: 01 Apr 15 01:23+10:00\n" +
3444
" instance-id: pending\n" +
3445
" machine-status:\n" +
3446
" current: pending\n" +
3447
" since: 01 Apr 15 01:23+10:00\n" +
3448
" series: quantal\n" +
3449
" hardware: arch=amd64 cpu-cores=1 mem=1024M root-disk=8192M\n" +
3450
" controller-member-status: adding-vote\n" +
3453
c.Assert(string(out), gc.Equals, expected)
3300
3456
// Scenario: One unit is in an errored state and user filters to errored
3303
3459
defer s.resetContext(c, ctx)
3305
3461
// Given unit 1 of the "logging" service has an error
3306
setAgentStatus{"logging/1", state.StatusError, "mock error", nil}.step(c, ctx)
3462
setAgentStatus{"logging/1", status.StatusError, "mock error", nil}.step(c, ctx)
3307
3463
// When I run juju status --format oneline error
3308
3464
_, stdout, stderr := runStatus(c, "--format", "oneline", "error")
3309
3465
c.Assert(stderr, gc.IsNil)
3310
3466
// Then I should receive output prefixed with:
3311
3467
const expected = `
3313
- mysql/0: dummymodel-2.dns (agent:idle, workload:active)
3314
- logging/1: dummymodel-2.dns (agent:idle, workload:error)
3469
- mysql/0: admin-2.dns (agent:idle, workload:active)
3470
- logging/1: admin-2.dns (agent:idle, workload:error)
3316
3472
c.Assert(string(stdout), gc.Equals, expected[1:])
3477
3633
ctx := s.FilteringTestSetup(c)
3478
3634
defer s.resetContext(c, ctx)
3480
_, stdout, stderr := runStatus(c, "--format", "oneline", "wordpress/0", "started")
3636
_, stdout, stderr := runStatus(c, "--format", "oneline", "wordpress/0", "active")
3481
3637
c.Assert(stderr, gc.IsNil)
3482
3638
// Then I should receive output prefixed with:
3483
3639
const expected = `
3485
- mysql/0: dummymodel-2.dns (agent:idle, workload:active)
3486
- logging/1: dummymodel-2.dns (agent:idle, workload:active)
3487
- wordpress/0: dummymodel-1.dns (agent:idle, workload:active)
3488
- logging/0: dummymodel-1.dns (agent:idle, workload:active)
3641
- mysql/0: admin-2.dns (agent:idle, workload:active)
3642
- logging/1: admin-2.dns (agent:idle, workload:active)
3643
- wordpress/0: admin-1.dns (agent:idle, workload:active)
3644
- logging/0: admin-1.dns (agent:idle, workload:active)
3490
3646
c.Assert(string(stdout), gc.Equals, expected[1:])
3541
3697
var statusTimeTest = test(
3542
3698
"status generates timestamps as UTC in ISO format",
3543
3699
addMachine{machineId: "0", job: state.JobManageModel},
3544
setAddresses{"0", network.NewAddresses("dummymodel-0.dns")},
3700
setAddresses{"0", network.NewAddresses("admin-0.dns")},
3545
3701
startAliveMachine{"0"},
3546
setMachineStatus{"0", state.StatusStarted, ""},
3702
setMachineStatus{"0", status.StatusStarted, ""},
3547
3703
addCharm{"dummy"},
3548
3704
addService{name: "dummy-service", charm: "dummy"},
3550
3706
addMachine{machineId: "1", job: state.JobHostUnits},
3551
3707
startAliveMachine{"1"},
3552
setAddresses{"1", network.NewAddresses("dummymodel-1.dns")},
3553
setMachineStatus{"1", state.StatusStarted, ""},
3708
setAddresses{"1", network.NewAddresses("admin-1.dns")},
3709
setMachineStatus{"1", status.StatusStarted, ""},
3555
3711
addAliveUnit{"dummy-service", "1"},
3557
3713
"add two units, one alive (in error state), one started",
3559
"model": "dummymodel",