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
wallyworld/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
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 base branch
1.20-client-compatible-1.23
1.20-client-compatible-1.24
1.20-client-compatible
1.20
2.2
123-beta1-version
TestAddServiceStorageConstraints-fails
TestWriteTokenReplaceExisting-fix-master
TestWriteTokenReplaceExisting-fix
active-total-conn-count
add-ci-aliases
add-cloud
add-credential-command
add-credential-maas
add-hastatus-to-megawatcher-master
add-hastatus-to-megawatcher
add-image-ff
add-missing-newline
add-restore-test
add-user-share-model
addmachine-accepts-uuid
addmodel-upgrade
addrelation-typo
admin-controller-mode
agent-version-on-startup-master
agent-version-on-startup-trunk
agent-version-on-startup
allocate-all-ec2-stores
allow-arbitrary-agent-streams
allow-config-overrides
allwatcher-dead-model
allwatcher-model-config
allwatcher-offers
ambiguous-deploy-message
anonymous-login-username
anonymous-logins
api-address-caching
apiserver-credentialwatchers
apiserver-metrics-again
apiserver-metrics
app-config-defaults
apt-cloud-image-utils-master
apt-cloud-image-utils
apt-package-quoting-master
apt-package-quoting
apt-proxy-settings-precedence
audit-logfile
autoload-credentials-part1
autoload-credentials-part2
autoload-credentials-part3
aws-ssd-root-disk
aws-us-east-2
azure-ingress-rules
azure-min-root-disk
azure-services-for-env-1.21
azure-services-for-env
backport-2.4-fixes
backport-constraints-fix
backport-lp-1307677
backport-lp-1359714
backport-lp-1382709
backport-lp1461150
backport-pr-6996
backport-pr7476
backport-pr7507
backport-replicaset-startup
backport-status-history-fix
backport-subordinate-relation-fix
backport-yosemite
bad-status
beta-uses-devel-streams
beta1-cleanup
better-add-credential
better-bootstrap-metadata-restore
better-cmr-logging
better-dup-metadata-error
better-init-messages
better-logfwd-config
better-openstack-az-placement-1.20
better-openstack-az-placement
bootstrap-auto-upgrade-fix
bootstrap-controller-hosted-model
bootstrap-metadata-master
bootstrap-metadata
bootstrap-print-clouds
bootstrap-waits-till-ready
breakup-model-facade
broken-storage-windows-tests
bump-facade-versions
bump-to-1.20.4
bundle-series-fix
caas-firewaller
caas-operator-hook-executor
caas-provisioner-part-1
caas-provisioner-part-2
caas-provisioner-part-3
caasbroker-managed-deployments
cache-controller-details
cache-lxc-images
capped-txn-log-errors
cass-expose-check
cc-joyent
centos-streams-master
centos-streams
centos7-version-master
centos7-version
certchanged-channel-close-master
certchanged-channel-close
charm-deploy-fix
charm-import-fix
charm-migration-2
charm-upgrade-fix-master
charm-upgrade-fix
cherrypick-setdefault-commands
cleanup-get-model-output
cleanup-removes-app-artefacts
cleanup-removes-app-artefacts2
client-environment-methods
clock-skew-tolerance
clone-template-flock-master
clone-template-flock
cloud-api
cloud-init-precise
cloud-name-underscore
cloud-show
cloud-validation-fix
clouds-credentials-in-state-take2-add-model
cmd-juju-dep-update
cmr-cleanup
cmr-consume-alias
cmr-controller-addr-lookup
cmr-controller-facade
cmr-default-endpoint-bindings
cmr-delete-code
cmr-egress-cidrs
cmr-expose-remote
cmr-facade-boilerplate
cmr-facade-permissions
cmr-find-list-cleanup
cmr-find-show-output
cmr-firewall-rules
cmr-fix-remoteentityid
cmr-ingress-address
cmr-list-filtering
cmr-list-find-output
cmr-networkchange-macaroon
cmr-offer-connections
cmr-offers-in-status
cmr-offers-model-arg
cmr-private-address
cmr-provider-role-consumes
cmr-record-controller-info
cmr-refactor-consume-relate
cmr-relate-again
cmr-relation-publish
cmr-remote-entities
cmr-remoterelation-ids
cmr-remoterelations-macaroons
cmr-remove-appid-hack
cmr-use-offer-uuid
cmr-watchers-update
cmr-worker-consume-revoked
cmr-worker-part1
cmr-worker-publish-api
cmr-worker-publish-local
cmr-worker-register-relation
cmr-worker-skeleton
cmr-worker-test-fail-2.1
cmr-worker-test-fail
complete-san-addresses-master
complete-san-addresses
configurable-log-retention
configurable-status-history-retention
configure-container-mtu
container-harvest-mode-1.23
container-harvest-mode-1.24
container-harvest-mode
container-provisioning-error
container-startup-trunk
container-startup
controllers-ignore-jobmanagenetworking
copy-session-1.20
copy-session
create-model-admin-user
credential-apis
credentials-marshalling
credentials-missing-cloud
credentials-required-field-schema
cross-model-feature-flag
cross-model-relations
crossmodel-api-macaroon-cache
crossmodel-controller-facades
default-filesystem-storage
default-lts-trusty-trunk
default-lts-trusty
default-openstack-storage
default-pools-fresh-install
default-provider-pools
default-storage-size
delayed-public-ingress-address
delete-obsolete-configstore-usage
delete-offer-cmd
delete-old-cmr-code
delta-order-relations-last
demo-setblockdevices
deploy-config
deploy-series-force
deployer-status-error-master
deployer-status-error
deprecated-mongo-ssl-arg
deprecated-set-env
deps-update-tools-series
destroy-model-regression
destroy-units-storage
develop
die-rsyslog-die
disable-network-mgmt-option
disallow-relative-paths
double-cmr-macaroon-expiry
download-tools-retry-master
download-tools-retry
dynamic-storage-assign-policy
ebs-volume-source
enable-image-caching
enhanced-model-config
ensure-availability-to-2
ensure-availability-to
environ-config-rename
environ-resource-catalogs
environ-version-upgrade-step
exact-offer-match
executing-green
external-controller-alias
extra-bootstrap-logging
extra-simplestreams-logging
extract-common-hook-commands
filter-helpers
find-endpoints-command
firewall-icmp
firewall-rules-cli
firewaller-address-watcher
firewaller-ingress-rules
firewaller-listen-subnets
firewaller-pushes-ingress-changes
firewaller-race-2
firewaller-race
firewaller-relation-inge=ress
firewaller-remote-cidrs
fix-1447853-1.24
fix-1447853-master
fix-1564791
fix-api-network-call
fix-auto-upgrade
fix-backup-xenial
fix-certs-on-boot-1.22
fix-certs-on-boot-master
fix-certs-on-boot
fix-cli-warning
fix-deprecation-warning-1.21
fix-deprecation-warning
fix-detect-credentials-windows
fix-develop-merge-issue
fix-enable-ha-mongo3
fix-envcmd-ensure-1.20
fix-hhtp-digest
fix-hook-overwrite-status
fix-image-stream-filter
fix-implicit-relationer-test
fix-invalid-filepath-windows
fix-joyent-regions
fix-juju-version
fix-keystone-v3
fix-lp-1561555
fix-machine-test
fix-maintest-isolation
fix-missing-hook-logic-master
fix-missing-hook-logic
fix-modeldefaults
fix-remote-relation-register
fix-restore-bootstrap
fix-restore-paths
fix-test-races
fix-testaddbadfilename
fix-testnewdefaultserver
fix-winclient-bootstrap
fix_1569408
floating-ip-address-updates-trunk
floating-ip-address-updates
force-machine-destroy-master
force-machine-destroy2
gce-asia-southeast1
gce-ingress-rules
generate-metadata-delete-option-1.21
generate-metadata-delete-option
generate-old-simplestreams-index-1.21
generate-old-simplestreams-index
get-controller-config
get-default-model-config-cli
get-single-application-setting
goamz3
gomaasapi-rev53-trunk
gomaasapi-rev53
goose-json-unmarshall-dep
gosigma-race-fixes
gui-no-browser
ha-bootstrap-constraints
hacky-restore-fix
handle-abstract-sockets
handle-aws-VolumeTypeNotAvailableInZone
hide-credential-secrets
hook-test-cleanup
ignore-empty-machine-addresses
ignore-missing-maas-ids
ignore-unknown-series-master
ignore-unknown-series
improve-listcloud-text
inc-1.21
inc-beta1
initial-caas-provisioner
initial-deps-update
initial-jujud-operator
initial-storage-pools
install-cloud-image-utils
interactive-add-credentials
interactive-bootstrap-tools
invalid-relation-status-check
joyent-sdc-config
juju-status-cmd
juju-status-work
juju-utils-update-1.20
juju-utils-update
juju-v2-option-master
juju-v2-option
juju-version-context
jujud-operator-dockerfile
keep-broken-part-2-trunk
keep-broken-part-2
keep-env-flag-1.20
keep-env-flag
leadership-err-fix-1.23
leadership-err-fix-master
leadership-err-fix
lease-manager-restart-1.25
lease-manager-restart
legacy-juju-home
legacy-unit-started-status-master
legacy-unit-started-status
licence-fix-master
licence-fix
license-dependnecies-1.20
license-dependnecies
licensing-fixes-trunk
licensing-fixes
list-controller-access
list-controllers-format
list-controllers-ha-none
list-delete-images-command
list-delete-images
list-models-access
list-models-machineinfo
list-offers-no-rows
list-regions
list-show-machine
list-user-access
local-charm-memory
local-charm-upgrade-validation
local-cloud-image-utils-check
local-tools-location
logfwd-cpu
logged-apiaddresses-master
logged-apiaddresses
login-test-deadlock-1.20
login-test-deadlock
loginv3
longer-maas-wait-time
loop-provider-skeleton
lp-1328958-master
lp-1328958
lp-1392514-1.21
lp-1392514
lp-1484993
lp-1577415
lp1589670
lp1590065
lp1592210
lp1609041-race
lp1609407
lp1632541
lxc-loop-mount
lxc-tools-dir
lxd-image-source
maas-bootstrap-wait
maas-bootstrap
maas-detect-credentials
maas-hostname-address-master
maas-hostname-address
maas-i386-constant
maas-model-create
maas-node-constraints
maas-nodegroups-1.22
maas-rootdisk-constraint
maas-storage
maas-supported-architectures
maas-unsupported-storage
maasstartinstance-test-failure
machine-blockrecord-upgrade-master
machine-blockrecord-upgrade
machine-doc-insert-order-trunk
machine-doc-insert-order
machine-force-destroy
machine-placement-directives-deploy
machine-placement-directives
maltese-falcon
managed-resources
massrc-fix
master
megawatcher-status
megawatcher-update-uniterror-master
megawatcher-update-uniterror
merge-1.20
merge-1.24v2
merge-1.24
merge-2.1-060217
merge-2.1-170217
merge-2.1-23032017
merge-2.2-0612
merge-2.2-1007
merge-2.2-1207
merge-2.2-1609
merge-2.2-2306
merge-2.3-281117
merge-admin-controller-model
merge-api-command-rename
merge-caas-fb
merge-controller-rename
merge-devel-281117
merge-develop-1410
merge-develop-1810
merge-feature-cmr-consume
merge-master-0203
merge-master-0204
merge-master-0210
merge-master-0302
merge-master-0403a
merge-master-0403
merge-master-0406
merge-master-0411-2
merge-master-0606
merge-master-0607
merge-master-0701
merge-master-0703
merge-master-0801
merge-master-0809
merge-master-0902
merge-master-0911
merge-master-1007
merge-master-1101
merge-master-1102
merge-master-1201
merge-master-1211
merge-master-1410
merge-master-1502
merge-master-1510
merge-master-1602
merge-master-1603
merge-master-1612
merge-master-1702
merge-master-1803
merge-master-1903-again
merge-master-1903
merge-master-2011
merge-master-2103
merge-master-2201
merge-master-2203
merge-master-2207
merge-master-2212
merge-master-2303a
merge-master-2307
merge-master-2403
merge-master-2901
merge-master-2902a
merge-master-2902
merge-master-3001
merge-master-3011-2
merge-master-3011
merge-minver
merge-naster-1510
merge-series-in-metadata
merge-service-to-application
merge2.2-1008
merge2.2-1407
merge2.2-3006a
merge2.2-3006
metadata-search-improved
migrate-application-password
migration-fixes
min-controller-mem-2.0
min-controller-mem
missing-address-panic-1.25
missing-address-panic-master
missing-address-panic
missing-aws-region
missing-controller-uuid
missing-default-config
mixed-ha-address-master
mixed-ha-address
model-config-empty-string
model-config-sources
model-default-config
model-defaults-for-region
model-destroy-blocks
model-get-defaults
modeldefaults-setunset-api
modeldefaults-setunset-cli
models-machines-list-controllers
mongo-refactor-timeout-tweaks
mongo-socket-pool-limit
more-bootstra-message-cleanup
more-charm-storage-metadata
more-clouds-info
more-config-fixes
more-crossmodel-featureflag
more-licence-fixes-1.20
more-licence-fixes
more-logfwd-fixes
more-status-v2
move-consume-to-controller
move-destroy-model
move-modelconfig-apis
move-modeldefault-apis
move-service-apis
move-service-methods
multi-controller-cmr
network-get-info
network-get-relation-aware
network-info-addresses-again
new-add-remote-relation
new-azure-instance-types-master
new-azure-instance-types
new-azure-regions
new-charm-store-multi
new-consume
new-gui-url
new-txn-package
next-upgrade-version-trunk
next-upgrade-version
nil-pointer-fixes-1.20
nil-pointer-fixes
no-cloud-settings
no-remote-app-proxy-status
no-session-copy-in-watcher-1.20
no-session-copy-in-watcher
novarc-detect
offer-acl-backend
offer-acl-frontend
offer-app-removal
offer-display-permissions
offer-list-user-details
offer-macaroon-auth
offer-status-output
offer-status-watcher-facade
offered-service-listener
offers-controller-facade
offers-filter-by-user
official-build
oldgui-newcontroller
openstack-ports
operator-contextfactory-apis
operator-hook-tools
operator-juju-log
operator-runner
optional-ca-cert
oracle-provider
oracle-reions
other-model-relations
peergrouper-publish-ignore-empty
persistent-volumes-2
persistent-volumes
pingbatcher-test-race
port-1.23-test-fixes
port-1.24-bugs
port-firewaller-fix-1.23
port-firewaller-fix-1.24
port-firewaller-fix-master
port-history-worker-tests
port-maas-fixes
pre-upgrade-checks-2
pre-upgrade-checks
precreate-txns-collection
prevent-apiserver-restart
print-clouds-fix
proof-of-access
propagate-suspended-reason
provider-default-config
provider-ingress-rules
provision-loop-devices
provisioner-destroys-instances-incorrectly-1.20
provisioner-destroys-instances-incorrectly
provisioning-status-not-found
pruner-workers-config
quieter-apiserver-logs
quiter-metrics-workers
rackspace-config-fix
random-apiserver
reduce-cmr-cidrs
reduce-mongo-logspam
refactor-application-url
region-order
relate-via
relation-data-egress
relation-egress-cidr-workaround
relation-egress-networks
relation-get-invalid
relation-init-leader
relation-status-again
relation-status-watcher-api
relation-status-watcher
relation-suspend-resume
relationingress-flag
relations-tests-fix
relationscopes-index
release-tools-path-2
release-tools-path
remodel-shared-config
remote-app-exists
remote-app-icon-url
remote-app-tags
remote-application-icon
remote-controller-workers-errors
remote-relation-worker-handle-status
remote-relations-race
remote-relations-watcher
remote-service-state
remote-service-status
remoteapplication-info-api
remotefirewaller-facade
remoteservice-allwatcher
remove-bad-watcher-collection-2.0
remove-bad-watcher-collection
remove-cached-local-charm-1.25
remove-cached-local-charm
remove-cmr-featureflag
remove-consume-sets-suspended
remove-credential-command
remove-directmodel-cmr
remove-firewall-blacklist
remove-juju-conn
remove-jujuhome-fallback
remove-local-prefix
remove-local-provider
remove-local-repo
remove-local-user-suffix
remove-lock-dirs
remove-machine-keep
remove-manta-master
remove-manta
remove-model-controlleruuid
remove-more-1.16-stuff
remove-obsolete-imageurl
remove-offer-error
remove-offer-urls
remove-relation-id
remove-remote-applications
remove-remote-relation
remove-saas-cli
remove-socket-on-close
remove-some-skipped-tests
remove-storage-ff
remove-upload-tools
removed-model-error
rename-AddTestingService
rename-agent-stateinfo
rename-application-config-methods
rename-cleanup
rename-environment-facades
rename-environments-endpoint
rename-oracle-compute
rename-ppc64-2
rename-ppc64-master
rename-ppc64
rename-remoterelationarg
rename-service-methods
rename-state-servers
rename-version-service-to-application
repeatable-bootstrap
replace-environ-tag
report-machine-down
report-uniter-errors-master
report-uniter-errors
resource-http-server
resourcemanager-facade
restore-application-v2
restore-backup-alias
restore-bug-apiport
restore-cloud-name
restore-connection-retry-1.20
restore-connection-retry
restore-controller-config
restore-controller-details
restore-deploy-1.16-master
restore-deploy-1.16
restore-fix-status
restore-old-deploy-for-now
restrict-log-trace
revert-8b0a9a9
revert-apt-install-method
revert-random-address
revised-list-clouds
robust-lxc-images
rollback-to-f87ccfea89
rootfs-storage-provider
save-offer-status
secure-server-connection-fixes
separate-cloud-config
separate-controller-config
separate-machine-unit-status
series-in-metadata
service-amchine-destroy
service-directory-facade
service-directory-state
service-directory-system-env
service-machine-destroy-master
service-offer-state
service-status
service-to-application-1
service-to-application-2
service-to-application-3
service-to-application
set-cloud-defaults
set-defaultcred-inbuilt
set-empty-string
show-controller-hastatus
show-current-model
show-external-user
show-relation-ingress
simplestreams-index2-1.21
simplestreams-index2
simplestreams-inheritance
simplestreams-merge
simplestreams-ppc64
simplestreams-versions
skip-TestUpgradeStepsStateServer-PPC64
skip-bootstraptest-windows-2.0
skip-bootstraptest-windows
skip-broken-i386-tests-1.22
skip-broken-i386-tests
skip-test-1572145
skip-test-1572353
sm-cleanup-debugging
sm-rebase-master-20151222-ian
snappy-support
some-test-fixes
split-remoterelations-facade
ssh-keys-auth
sshstorage-not-found-trunk
sshstorage-not-found
state-credential-watcher
state-firewall-rules
statepool-controller-part1
status-get
status-history-dups
status-local-time-format
status-notfound-verbose
status-set
status-time-utc-format-master
status-time-utc-format
stop-metrics-listeners-on-error
storage-default-provider-rules
storage-feature
storage-get
storage-pool-model
storage-poolmanager
storage-pools
storage-provider-defaults
storage-provider-registration
storage-provider-registry
storage-provisioner
support-add-relation-2
support-add-relation
support-application-config
support-deprecated-service-option
support-new-series-1.23
support-new-series-master
support-new-series
suspend-relation-message
suspend-relation
suspended-relation-handling
swap-bootstrap-args
swift-empty-containername-master
swift-empty-containername
sync-test-ppc64
table-header-format
tabular-get-config
temp-delta-version
temp-disable-image-caching
tempfix-1495542
testcloudinit-fix-master
testcloudinit-fix
throttle-controller-connections
tidy-up-cli-output
tmpfs-storage-provider
tolerant-cloud-credentials
tolerant-controller-name
tools-metadata-multi-version
tools-retry-loop
tools-simplestreams-v2
tools-stream
tools-upgrade-before-api-master
tools-upgrade-before-api
tools-upgrade-fix
toolsupdate-preferedstream
toolsversionchecker-again-master
toolsversionchecker-again
toolsversionchecker-fix-master
toolsversionchecker-fix
tune-sysctl-network
tweak-gui-info
tweak-list-controllers-again
tweak-list-controllers
uas_split_unit_and_agent
unassigned-unit-remove
unblock-ci-1360286
unblock-panic
unique-controller-uuid
unit-agent-state
unit-public-address-ec2-1.21
unit-public-address-ec2
unit-resolved-issue
uniter-revert-common-commands
uniter-solver
unset-uses-inherited
update-blobstore-0515
update-blobstore
update-charm-deps
update-clouds-command
update-credential-args
update-credential-command
update-golxc-dependency-1.20
update-golxc-dependency
update-hpcloud-boilerplate
update-mgo-deps
update-server-certificate
update-setmodeldefaults-api
update-status-fixes
update-status-knob
update-status-only-after-started
update-status-timer
upgrade-force-series
upgrade-juju-agent-tweak
upgrade-juju-fixes
upgrade-juju-latest
upgrade-max-tnx-log-size
upgrade-upload-tools
upload-tools-fixes
use-blobstore-v2
use-cloud-tags
use-consume-acls
use-correct-mongotools
use-floatingip-as-public-address-1.20
use-floatingip-as-public-address
use-mongo32-package
use-rfc-repo
use-separate-controller-config
use-stable-charm-repos
user-clusteradmin-role
userscmd-help
validate-iops-params
validate-joyent-credentials-1.21
validate-joyent-credentials
validate-version-fix
various-cmr-renames
various-migration-fixes
various-test-fixes
varstest-windows
verbose-list-controllers
version-1-20-fix-1.20
version-1-20-fix
version-2.4-beta1
version-bump-2.2.1
watch-ingress-addresses
watch-relation-status
whitespace-fix
whoami
win-test-defaultmodel-commands
windows-compile-error
wip-restore-fix
wire-up-crossmodel-cli
wireup-caas-appconfig
wireup-cmr-macaroon-auth
wireup-service-directory
worker-polls-offer-model
xdg-home-windows-test
Nothing to show
...
Choose a Head Repository
juju/juju
wallyworld/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
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 branch
1.20-client-compatible-1.23
1.20-client-compatible-1.24
1.20-client-compatible
1.20
2.2
123-beta1-version
TestAddServiceStorageConstraints-fails
TestWriteTokenReplaceExisting-fix-master
TestWriteTokenReplaceExisting-fix
active-total-conn-count
add-ci-aliases
add-cloud
add-credential-command
add-credential-maas
add-hastatus-to-megawatcher-master
add-hastatus-to-megawatcher
add-image-ff
add-missing-newline
add-restore-test
add-user-share-model
addmachine-accepts-uuid
addmodel-upgrade
addrelation-typo
admin-controller-mode
agent-version-on-startup-master
agent-version-on-startup-trunk
agent-version-on-startup
allocate-all-ec2-stores
allow-arbitrary-agent-streams
allow-config-overrides
allwatcher-dead-model
allwatcher-model-config
allwatcher-offers
ambiguous-deploy-message
anonymous-login-username
anonymous-logins
api-address-caching
apiserver-credentialwatchers
apiserver-metrics-again
apiserver-metrics
app-config-defaults
apt-cloud-image-utils-master
apt-cloud-image-utils
apt-package-quoting-master
apt-package-quoting
apt-proxy-settings-precedence
audit-logfile
autoload-credentials-part1
autoload-credentials-part2
autoload-credentials-part3
aws-ssd-root-disk
aws-us-east-2
azure-ingress-rules
azure-min-root-disk
azure-services-for-env-1.21
azure-services-for-env
backport-2.4-fixes
backport-constraints-fix
backport-lp-1307677
backport-lp-1359714
backport-lp-1382709
backport-lp1461150
backport-pr-6996
backport-pr7476
backport-pr7507
backport-replicaset-startup
backport-status-history-fix
backport-subordinate-relation-fix
backport-yosemite
bad-status
beta-uses-devel-streams
beta1-cleanup
better-add-credential
better-bootstrap-metadata-restore
better-cmr-logging
better-dup-metadata-error
better-init-messages
better-logfwd-config
better-openstack-az-placement-1.20
better-openstack-az-placement
bootstrap-auto-upgrade-fix
bootstrap-controller-hosted-model
bootstrap-metadata-master
bootstrap-metadata
bootstrap-print-clouds
bootstrap-waits-till-ready
breakup-model-facade
broken-storage-windows-tests
bump-facade-versions
bump-to-1.20.4
bundle-series-fix
caas-firewaller
caas-operator-hook-executor
caas-provisioner-part-1
caas-provisioner-part-2
caas-provisioner-part-3
caasbroker-managed-deployments
cache-controller-details
cache-lxc-images
capped-txn-log-errors
cass-expose-check
cc-joyent
centos-streams-master
centos-streams
centos7-version-master
centos7-version
certchanged-channel-close-master
certchanged-channel-close
charm-deploy-fix
charm-import-fix
charm-migration-2
charm-upgrade-fix-master
charm-upgrade-fix
cherrypick-setdefault-commands
cleanup-get-model-output
cleanup-removes-app-artefacts
cleanup-removes-app-artefacts2
client-environment-methods
clock-skew-tolerance
clone-template-flock-master
clone-template-flock
cloud-api
cloud-init-precise
cloud-name-underscore
cloud-show
cloud-validation-fix
clouds-credentials-in-state-take2-add-model
cmd-juju-dep-update
cmr-cleanup
cmr-consume-alias
cmr-controller-addr-lookup
cmr-controller-facade
cmr-default-endpoint-bindings
cmr-delete-code
cmr-egress-cidrs
cmr-expose-remote
cmr-facade-boilerplate
cmr-facade-permissions
cmr-find-list-cleanup
cmr-find-show-output
cmr-firewall-rules
cmr-fix-remoteentityid
cmr-ingress-address
cmr-list-filtering
cmr-list-find-output
cmr-networkchange-macaroon
cmr-offer-connections
cmr-offers-in-status
cmr-offers-model-arg
cmr-private-address
cmr-provider-role-consumes
cmr-record-controller-info
cmr-refactor-consume-relate
cmr-relate-again
cmr-relation-publish
cmr-remote-entities
cmr-remoterelation-ids
cmr-remoterelations-macaroons
cmr-remove-appid-hack
cmr-use-offer-uuid
cmr-watchers-update
cmr-worker-consume-revoked
cmr-worker-part1
cmr-worker-publish-api
cmr-worker-publish-local
cmr-worker-register-relation
cmr-worker-skeleton
cmr-worker-test-fail-2.1
cmr-worker-test-fail
complete-san-addresses-master
complete-san-addresses
configurable-log-retention
configurable-status-history-retention
configure-container-mtu
container-harvest-mode-1.23
container-harvest-mode-1.24
container-harvest-mode
container-provisioning-error
container-startup-trunk
container-startup
controllers-ignore-jobmanagenetworking
copy-session-1.20
copy-session
create-model-admin-user
credential-apis
credentials-marshalling
credentials-missing-cloud
credentials-required-field-schema
cross-model-feature-flag
cross-model-relations
crossmodel-api-macaroon-cache
crossmodel-controller-facades
default-filesystem-storage
default-lts-trusty-trunk
default-lts-trusty
default-openstack-storage
default-pools-fresh-install
default-provider-pools
default-storage-size
delayed-public-ingress-address
delete-obsolete-configstore-usage
delete-offer-cmd
delete-old-cmr-code
delta-order-relations-last
demo-setblockdevices
deploy-config
deploy-series-force
deployer-status-error-master
deployer-status-error
deprecated-mongo-ssl-arg
deprecated-set-env
deps-update-tools-series
destroy-model-regression
destroy-units-storage
develop
die-rsyslog-die
disable-network-mgmt-option
disallow-relative-paths
double-cmr-macaroon-expiry
download-tools-retry-master
download-tools-retry
dynamic-storage-assign-policy
ebs-volume-source
enable-image-caching
enhanced-model-config
ensure-availability-to-2
ensure-availability-to
environ-config-rename
environ-resource-catalogs
environ-version-upgrade-step
exact-offer-match
executing-green
external-controller-alias
extra-bootstrap-logging
extra-simplestreams-logging
extract-common-hook-commands
filter-helpers
find-endpoints-command
firewall-icmp
firewall-rules-cli
firewaller-address-watcher
firewaller-ingress-rules
firewaller-listen-subnets
firewaller-pushes-ingress-changes
firewaller-race-2
firewaller-race
firewaller-relation-inge=ress
firewaller-remote-cidrs
fix-1447853-1.24
fix-1447853-master
fix-1564791
fix-api-network-call
fix-auto-upgrade
fix-backup-xenial
fix-certs-on-boot-1.22
fix-certs-on-boot-master
fix-certs-on-boot
fix-cli-warning
fix-deprecation-warning-1.21
fix-deprecation-warning
fix-detect-credentials-windows
fix-develop-merge-issue
fix-enable-ha-mongo3
fix-envcmd-ensure-1.20
fix-hhtp-digest
fix-hook-overwrite-status
fix-image-stream-filter
fix-implicit-relationer-test
fix-invalid-filepath-windows
fix-joyent-regions
fix-juju-version
fix-keystone-v3
fix-lp-1561555
fix-machine-test
fix-maintest-isolation
fix-missing-hook-logic-master
fix-missing-hook-logic
fix-modeldefaults
fix-remote-relation-register
fix-restore-bootstrap
fix-restore-paths
fix-test-races
fix-testaddbadfilename
fix-testnewdefaultserver
fix-winclient-bootstrap
fix_1569408
floating-ip-address-updates-trunk
floating-ip-address-updates
force-machine-destroy-master
force-machine-destroy2
gce-asia-southeast1
gce-ingress-rules
generate-metadata-delete-option-1.21
generate-metadata-delete-option
generate-old-simplestreams-index-1.21
generate-old-simplestreams-index
get-controller-config
get-default-model-config-cli
get-single-application-setting
goamz3
gomaasapi-rev53-trunk
gomaasapi-rev53
goose-json-unmarshall-dep
gosigma-race-fixes
gui-no-browser
ha-bootstrap-constraints
hacky-restore-fix
handle-abstract-sockets
handle-aws-VolumeTypeNotAvailableInZone
hide-credential-secrets
hook-test-cleanup
ignore-empty-machine-addresses
ignore-missing-maas-ids
ignore-unknown-series-master
ignore-unknown-series
improve-listcloud-text
inc-1.21
inc-beta1
initial-caas-provisioner
initial-deps-update
initial-jujud-operator
initial-storage-pools
install-cloud-image-utils
interactive-add-credentials
interactive-bootstrap-tools
invalid-relation-status-check
joyent-sdc-config
juju-status-cmd
juju-status-work
juju-utils-update-1.20
juju-utils-update
juju-v2-option-master
juju-v2-option
juju-version-context
jujud-operator-dockerfile
keep-broken-part-2-trunk
keep-broken-part-2
keep-env-flag-1.20
keep-env-flag
leadership-err-fix-1.23
leadership-err-fix-master
leadership-err-fix
lease-manager-restart-1.25
lease-manager-restart
legacy-juju-home
legacy-unit-started-status-master
legacy-unit-started-status
licence-fix-master
licence-fix
license-dependnecies-1.20
license-dependnecies
licensing-fixes-trunk
licensing-fixes
list-controller-access
list-controllers-format
list-controllers-ha-none
list-delete-images-command
list-delete-images
list-models-access
list-models-machineinfo
list-offers-no-rows
list-regions
list-show-machine
list-user-access
local-charm-memory
local-charm-upgrade-validation
local-cloud-image-utils-check
local-tools-location
logfwd-cpu
logged-apiaddresses-master
logged-apiaddresses
login-test-deadlock-1.20
login-test-deadlock
loginv3
longer-maas-wait-time
loop-provider-skeleton
lp-1328958-master
lp-1328958
lp-1392514-1.21
lp-1392514
lp-1484993
lp-1577415
lp1589670
lp1590065
lp1592210
lp1609041-race
lp1609407
lp1632541
lxc-loop-mount
lxc-tools-dir
lxd-image-source
maas-bootstrap-wait
maas-bootstrap
maas-detect-credentials
maas-hostname-address-master
maas-hostname-address
maas-i386-constant
maas-model-create
maas-node-constraints
maas-nodegroups-1.22
maas-rootdisk-constraint
maas-storage
maas-supported-architectures
maas-unsupported-storage
maasstartinstance-test-failure
machine-blockrecord-upgrade-master
machine-blockrecord-upgrade
machine-doc-insert-order-trunk
machine-doc-insert-order
machine-force-destroy
machine-placement-directives-deploy
machine-placement-directives
maltese-falcon
managed-resources
massrc-fix
master
megawatcher-status
megawatcher-update-uniterror-master
megawatcher-update-uniterror
merge-1.20
merge-1.24v2
merge-1.24
merge-2.1-060217
merge-2.1-170217
merge-2.1-23032017
merge-2.2-0612
merge-2.2-1007
merge-2.2-1207
merge-2.2-1609
merge-2.2-2306
merge-2.3-281117
merge-admin-controller-model
merge-api-command-rename
merge-caas-fb
merge-controller-rename
merge-devel-281117
merge-develop-1410
merge-develop-1810
merge-feature-cmr-consume
merge-master-0203
merge-master-0204
merge-master-0210
merge-master-0302
merge-master-0403a
merge-master-0403
merge-master-0406
merge-master-0411-2
merge-master-0606
merge-master-0607
merge-master-0701
merge-master-0703
merge-master-0801
merge-master-0809
merge-master-0902
merge-master-0911
merge-master-1007
merge-master-1101
merge-master-1102
merge-master-1201
merge-master-1211
merge-master-1410
merge-master-1502
merge-master-1510
merge-master-1602
merge-master-1603
merge-master-1612
merge-master-1702
merge-master-1803
merge-master-1903-again
merge-master-1903
merge-master-2011
merge-master-2103
merge-master-2201
merge-master-2203
merge-master-2207
merge-master-2212
merge-master-2303a
merge-master-2307
merge-master-2403
merge-master-2901
merge-master-2902a
merge-master-2902
merge-master-3001
merge-master-3011-2
merge-master-3011
merge-minver
merge-naster-1510
merge-series-in-metadata
merge-service-to-application
merge2.2-1008
merge2.2-1407
merge2.2-3006a
merge2.2-3006
metadata-search-improved
migrate-application-password
migration-fixes
min-controller-mem-2.0
min-controller-mem
missing-address-panic-1.25
missing-address-panic-master
missing-address-panic
missing-aws-region
missing-controller-uuid
missing-default-config
mixed-ha-address-master
mixed-ha-address
model-config-empty-string
model-config-sources
model-default-config
model-defaults-for-region
model-destroy-blocks
model-get-defaults
modeldefaults-setunset-api
modeldefaults-setunset-cli
models-machines-list-controllers
mongo-refactor-timeout-tweaks
mongo-socket-pool-limit
more-bootstra-message-cleanup
more-charm-storage-metadata
more-clouds-info
more-config-fixes
more-crossmodel-featureflag
more-licence-fixes-1.20
more-licence-fixes
more-logfwd-fixes
more-status-v2
move-consume-to-controller
move-destroy-model
move-modelconfig-apis
move-modeldefault-apis
move-service-apis
move-service-methods
multi-controller-cmr
network-get-info
network-get-relation-aware
network-info-addresses-again
new-add-remote-relation
new-azure-instance-types-master
new-azure-instance-types
new-azure-regions
new-charm-store-multi
new-consume
new-gui-url
new-txn-package
next-upgrade-version-trunk
next-upgrade-version
nil-pointer-fixes-1.20
nil-pointer-fixes
no-cloud-settings
no-remote-app-proxy-status
no-session-copy-in-watcher-1.20
no-session-copy-in-watcher
novarc-detect
offer-acl-backend
offer-acl-frontend
offer-app-removal
offer-display-permissions
offer-list-user-details
offer-macaroon-auth
offer-status-output
offer-status-watcher-facade
offered-service-listener
offers-controller-facade
offers-filter-by-user
official-build
oldgui-newcontroller
openstack-ports
operator-contextfactory-apis
operator-hook-tools
operator-juju-log
operator-runner
optional-ca-cert
oracle-provider
oracle-reions
other-model-relations
peergrouper-publish-ignore-empty
persistent-volumes-2
persistent-volumes
pingbatcher-test-race
port-1.23-test-fixes
port-1.24-bugs
port-firewaller-fix-1.23
port-firewaller-fix-1.24
port-firewaller-fix-master
port-history-worker-tests
port-maas-fixes
pre-upgrade-checks-2
pre-upgrade-checks
precreate-txns-collection
prevent-apiserver-restart
print-clouds-fix
proof-of-access
propagate-suspended-reason
provider-default-config
provider-ingress-rules
provision-loop-devices
provisioner-destroys-instances-incorrectly-1.20
provisioner-destroys-instances-incorrectly
provisioning-status-not-found
pruner-workers-config
quieter-apiserver-logs
quiter-metrics-workers
rackspace-config-fix
random-apiserver
reduce-cmr-cidrs
reduce-mongo-logspam
refactor-application-url
region-order
relate-via
relation-data-egress
relation-egress-cidr-workaround
relation-egress-networks
relation-get-invalid
relation-init-leader
relation-status-again
relation-status-watcher-api
relation-status-watcher
relation-suspend-resume
relationingress-flag
relations-tests-fix
relationscopes-index
release-tools-path-2
release-tools-path
remodel-shared-config
remote-app-exists
remote-app-icon-url
remote-app-tags
remote-application-icon
remote-controller-workers-errors
remote-relation-worker-handle-status
remote-relations-race
remote-relations-watcher
remote-service-state
remote-service-status
remoteapplication-info-api
remotefirewaller-facade
remoteservice-allwatcher
remove-bad-watcher-collection-2.0
remove-bad-watcher-collection
remove-cached-local-charm-1.25
remove-cached-local-charm
remove-cmr-featureflag
remove-consume-sets-suspended
remove-credential-command
remove-directmodel-cmr
remove-firewall-blacklist
remove-juju-conn
remove-jujuhome-fallback
remove-local-prefix
remove-local-provider
remove-local-repo
remove-local-user-suffix
remove-lock-dirs
remove-machine-keep
remove-manta-master
remove-manta
remove-model-controlleruuid
remove-more-1.16-stuff
remove-obsolete-imageurl
remove-offer-error
remove-offer-urls
remove-relation-id
remove-remote-applications
remove-remote-relation
remove-saas-cli
remove-socket-on-close
remove-some-skipped-tests
remove-storage-ff
remove-upload-tools
removed-model-error
rename-AddTestingService
rename-agent-stateinfo
rename-application-config-methods
rename-cleanup
rename-environment-facades
rename-environments-endpoint
rename-oracle-compute
rename-ppc64-2
rename-ppc64-master
rename-ppc64
rename-remoterelationarg
rename-service-methods
rename-state-servers
rename-version-service-to-application
repeatable-bootstrap
replace-environ-tag
report-machine-down
report-uniter-errors-master
report-uniter-errors
resource-http-server
resourcemanager-facade
restore-application-v2
restore-backup-alias
restore-bug-apiport
restore-cloud-name
restore-connection-retry-1.20
restore-connection-retry
restore-controller-config
restore-controller-details
restore-deploy-1.16-master
restore-deploy-1.16
restore-fix-status
restore-old-deploy-for-now
restrict-log-trace
revert-8b0a9a9
revert-apt-install-method
revert-random-address
revised-list-clouds
robust-lxc-images
rollback-to-f87ccfea89
rootfs-storage-provider
save-offer-status
secure-server-connection-fixes
separate-cloud-config
separate-controller-config
separate-machine-unit-status
series-in-metadata
service-amchine-destroy
service-directory-facade
service-directory-state
service-directory-system-env
service-machine-destroy-master
service-offer-state
service-status
service-to-application-1
service-to-application-2
service-to-application-3
service-to-application
set-cloud-defaults
set-defaultcred-inbuilt
set-empty-string
show-controller-hastatus
show-current-model
show-external-user
show-relation-ingress
simplestreams-index2-1.21
simplestreams-index2
simplestreams-inheritance
simplestreams-merge
simplestreams-ppc64
simplestreams-versions
skip-TestUpgradeStepsStateServer-PPC64
skip-bootstraptest-windows-2.0
skip-bootstraptest-windows
skip-broken-i386-tests-1.22
skip-broken-i386-tests
skip-test-1572145
skip-test-1572353
sm-cleanup-debugging
sm-rebase-master-20151222-ian
snappy-support
some-test-fixes
split-remoterelations-facade
ssh-keys-auth
sshstorage-not-found-trunk
sshstorage-not-found
state-credential-watcher
state-firewall-rules
statepool-controller-part1
status-get
status-history-dups
status-local-time-format
status-notfound-verbose
status-set
status-time-utc-format-master
status-time-utc-format
stop-metrics-listeners-on-error
storage-default-provider-rules
storage-feature
storage-get
storage-pool-model
storage-poolmanager
storage-pools
storage-provider-defaults
storage-provider-registration
storage-provider-registry
storage-provisioner
support-add-relation-2
support-add-relation
support-application-config
support-deprecated-service-option
support-new-series-1.23
support-new-series-master
support-new-series
suspend-relation-message
suspend-relation
suspended-relation-handling
swap-bootstrap-args
swift-empty-containername-master
swift-empty-containername
sync-test-ppc64
table-header-format
tabular-get-config
temp-delta-version
temp-disable-image-caching
tempfix-1495542
testcloudinit-fix-master
testcloudinit-fix
throttle-controller-connections
tidy-up-cli-output
tmpfs-storage-provider
tolerant-cloud-credentials
tolerant-controller-name
tools-metadata-multi-version
tools-retry-loop
tools-simplestreams-v2
tools-stream
tools-upgrade-before-api-master
tools-upgrade-before-api
tools-upgrade-fix
toolsupdate-preferedstream
toolsversionchecker-again-master
toolsversionchecker-again
toolsversionchecker-fix-master
toolsversionchecker-fix
tune-sysctl-network
tweak-gui-info
tweak-list-controllers-again
tweak-list-controllers
uas_split_unit_and_agent
unassigned-unit-remove
unblock-ci-1360286
unblock-panic
unique-controller-uuid
unit-agent-state
unit-public-address-ec2-1.21
unit-public-address-ec2
unit-resolved-issue
uniter-revert-common-commands
uniter-solver
unset-uses-inherited
update-blobstore-0515
update-blobstore
update-charm-deps
update-clouds-command
update-credential-args
update-credential-command
update-golxc-dependency-1.20
update-golxc-dependency
update-hpcloud-boilerplate
update-mgo-deps
update-server-certificate
update-setmodeldefaults-api
update-status-fixes
update-status-knob
update-status-only-after-started
update-status-timer
upgrade-force-series
upgrade-juju-agent-tweak
upgrade-juju-fixes
upgrade-juju-latest
upgrade-max-tnx-log-size
upgrade-upload-tools
upload-tools-fixes
use-blobstore-v2
use-cloud-tags
use-consume-acls
use-correct-mongotools
use-floatingip-as-public-address-1.20
use-floatingip-as-public-address
use-mongo32-package
use-rfc-repo
use-separate-controller-config
use-stable-charm-repos
user-clusteradmin-role
userscmd-help
validate-iops-params
validate-joyent-credentials-1.21
validate-joyent-credentials
validate-version-fix
various-cmr-renames
various-migration-fixes
various-test-fixes
varstest-windows
verbose-list-controllers
version-1-20-fix-1.20
version-1-20-fix
version-2.4-beta1
version-bump-2.2.1
watch-ingress-addresses
watch-relation-status
whitespace-fix
whoami
win-test-defaultmodel-commands
windows-compile-error
wip-restore-fix
wire-up-crossmodel-cli
wireup-caas-appconfig
wireup-cmr-macaroon-auth
wireup-service-directory
worker-polls-offer-model
xdg-home-windows-test
Nothing to show
Checking mergeability… Don’t worry, you can still create the pull request.
Commits on Nov 24, 2016
Commits on Nov 28, 2016
Shutdown units before issuing a reboot
The first implementation of the reboot functionallity worked
under the assumption that we use file based hook locks. This meant
that the machine agent could acquire a lock and choose not to break
it until it was restarted, thus blocking any unit agents from running
hooks.

This decission was made under the pretext that the unit agent would
soon be merged with the machine agent, and switching from file locks
to mutexes/semaphores would not break it.

Juju has moved away from file locks, and we can no longer guarantee
a lock will be held by the machine agent until the machine is fully
rebooted. On reboot/shutdown the init system can now stop the machine
agent first, allowing unit agents to start executing hooks.

This change stops all deployed juju unit agents prior to issuing the
reboot (or shutdown) command.
Added tests
* this also redefines service.ListServices and service.NewService as a variable to allow patching
* fixes logic in FakeService.Start() and FakeService.Stop()
Commits on Nov 29, 2016
Extract common.StreamDebugLog from api.Client
So we can use it from the migrationmaster worker.
Add api.state.ConnectControllerStream
And add it to the api.base.APICaller interface.

This will be used by the migrationmaster worker to transfer log messages to the
/migrate/logtransfer stream endpoint.
Change logtransfer endpoint required migration mode
The other /migrate/* endpoints require the target model to be imported,
but logtransfer happens after the model has finished importing, so it
should be in MigrationModeNone.
Extracted transferLogs from doLOGTRANSFER
Added a progress report (was useful for testing, not sure whether it's
that useful for actual use).
Added stubAPICaller.ConnectControllerStream method
These tests landed while I was working on migration logtransfer.
mjs
core/description: Separate resource revisions
It turns out in practice that the details for the same resource revision
number can be different between the charmstore and application revision,
particularly because of local resource uploads.

Instead of storing a shared map of revisions, which are referenced by
revision number, store each revision separately. This is closer to how
they're stored in Juju's state.
mjs
core/description: Separate unit resource revs
It turns out in practice that unit resource revisions can have different
details to the same revision numbers in applications and the
charmstore (primarily due to local resource uploads).
mjs
state: Update resource export
Resource revisions are now stored in a more denormalised way.
Merge pull request #6626 from howbazaar/migration-fix-error-filter
Missing cause.

The migration master was bouncing when a migration was finished because the error filter function was not checking the cause of the error.
Remove TODO
Merging DebugLogParams and params.LogStreamConfig is probably a sensible
thing to do, but since they're almost entirely disjoint it's really
equivalent to merging the logstream and debug-log endpoints.
Merge pull request #6628 from mjs/MM-resource-format-tweak
Migrations: change how resource revisions are exported

Practical testing has shown that exporting resource revisions in a normalised way, as was being done, isn't always going to work. Due to the ability for users to upload resources locally, the details for a given resource revision can vary between charmstore, application and unit.

Charmstore, application and unit resource revisions are now stored separately (much like they are in state).  This change touches the model description format and the model export code in state.

### QA

Deployed resource using models and manually verified the output of `juju dump-model`.
Use LongWait instead of ShortWait
Since we expect this to happen.
Merge pull request #6629 from howbazaar/migration-machine-down
[presence] Always sync before responding to requests.

When initiating a migration, sometimes the precheck would report an agent as down when status would show it as up. The cause of this was a timing issue in the state workers. It was possible for a request for agent alive to be processed by the presence worker before it had synced its state with the database, which would cause it to report the agent as down.

This change moves the initial call to sync with the database outside of the infinite for loop in the loop function. It appears that the intention was always to start with an initial sync as the next sync time was time.After(0). However since it was in a select, sometimes if a request came in very quickly, the request would be handled first.

A drive-by fix for a state leak in the migration pre-check code. The state returned for checking the controller machines was never closed.
Merge pull request #6622 from babbageclunk/logtransfer-worker
migrations: implement log transfer phase

Streams model logs from the source controller using the debug-log endpoint, and forwards them on to the /migrate/logtransfer endpoint in the target controller.

At the moment this isn't restartable - if the migration worker is killed and restarted while transferring logs the target model will end up with duplicates of all of the records that had already been transferred. This will be added in a follow-up PR.

QA steps: 
* bootstrap a source controller
* add a model to be migrated
* deploy something to the model
* take note of the number of log messages, and the first and last messages: `juju debug-log --replay`
* bootstrap a destination controller
* migrate the model: `juju migrate the-model dest-controller`
* verify that the log messages for the migrated model include all of the expected messages
Merge pull request #6631 from howbazaar/migrate-precheck-allow-hook-e…
…xecution

Migrate precheck allow hook execution

Loosen up the precheck criteria to allow for hooks to be executing.

This is very important due to the workload status hook that executes every thirty seconds. Given a model of large enough size, it is reasonable to consider that there would always be some hook executing somewhere.

We do need to consider perhaps an extra precheck at a later stage to ensure that no agents are in an error state.
Commits on Nov 30, 2016
Add a start time parameter to debug-log endpoint
This is needed to make the migration log transfer process step
restartable without too many duplicated log records.

Add the start time parameter to the client, but not to the debug-log
command at the moment. I'll add a bug to add it there.
Remove future check
Paranoid reviewer pointed out that it's possible for the controller to
have logs from the future (as far as it's concerned), we should allow
starting from there.
Fix merge error
Another PR of mine moved these but this is a new test so didn't get updated.
Merge pull request #6633 from babbageclunk/debuglog-start
Add a start time parameter to debug-log endpoint

This is needed to make the migration log transfer step
restartable without too many duplicated log records.

Add the start time parameter to the client, but not to the debug-log
command at the moment. I'll add a bug to add it there.
axw
state/statemetrics: state metrics collector
Introduce a Prometheus metric collector for
high-level state metrics. This collector will
gather metrics such as how many models and
machines are managed by the controller; and
how many users are defined in or known to the
controller.
axw
provider/openstack: enable goose logging
Pass a loggo logger into goose, so we can
tell what's going on. Goose logging uses
"goose" as the logger module name.
Merge pull request #6623 from axw/prometheus-state-metrics
state/statemetrics: state metrics collector

Introduce a Prometheus metric collector for
high-level state metrics. This collector will
gather metrics such as how many models and
machines are managed by the controller; and
how many users are defined in or known to the
controller.
Merge pull request #6635 from axw/provider-openstack-goose-logging
provider/openstack: enable goose logging

Pass a loggo logger into goose, so we can
tell what's going on. Goose logging uses
"goose" as the logger module name.

**QA**

- Bootstrapped canonistack with --debug, observed goose log messages
Migrate remaining hard-coded IPv4 loopback to 'localhost'
For IPv6 compatibility, use of IPv4 loopback addresses should instead
use 'localhost', which should resolve to both IPv4 and IPv6 addresses.

provider/dummy/environs.go adds both IPv4 and IPv6 loopback addresses to
the machine, rather than 'localhost', to still add scoped IP addresses
and to reflect what we expect to see in other providers.

Tests using loopback addresses have not be changed, as they should still
be correct as tests.
Refactor tests from full-stack => unit
All tests are now performed in-memory.
Merge pull request #6598 from kat-co/interactive-bootstrap-cloud-name
Refactor tests from full-stack => unit

All tests are now performed in-memory.
mjs
apiserver: Support charm user argument
Allow a charm's user component to be specified when charms are uploaded
during migration. This is required to avoid broken charms that have a
~user component.
mjs
apiserver: Safer charm schema handling
Don't assume "cs" if not "local". Fail fast if the schema isn't "cs" or "local".
mjs
api/migrationtarget: Pass charm user
In order to ensure the cs:~/user/foo style charms migrate correctly, the
user component needs to be passed when uploading.
Merge pull request #6570 from gabriel-samfira/fix-hook-error-on-reboot
Shutdown units before issuing a reboot

The first implementation of the reboot functionality worked
under the assumption that we use file based hook locks. This meant
that the machine agent could acquire a lock and choose not to break
it until it was restarted, thus blocking any unit agents from running
hooks.

This decision was made under the pretext that the unit agent would
soon be merged with the machine agent, and switching from file locks
to mutexes/semaphores would not break it.

Juju has moved away from file locks, and we can no longer guarantee
a lock will be held by the machine agent until the machine is fully
rebooted. On reboot/shutdown the init system can now stop the machine
agent first, allowing unit agents to start executing hooks.

This change stops all deployed juju unit agents prior to issuing the
reboot (or shutdown) command.
Commits on Dec 01, 2016
Merge pull request #6632 from kat-co/modify-prompt-cloudtype
Modifies the prompt for the cloud name to include cloud type

Note that this is based upon this [PR](juju#6598). Look at the latest commit for the (small) diff.
Track the last log time in migration-logtransfer
Write to the database once every two minutes of log time, and when the
connection closes. This will be used by the migration master to
determine where to start when streaming logs from the debug-log endpoint.
Add migrationtarget.LatestLogTime
This returns the time of the most recent log message seen by the
logtransfer endpoint, so that it can be used as the start time for the
log source when restarting.
Merge pull request #6641 from babbageclunk/logtransfer-track
migrations: track the latest log record seen in logtransfer

The migration logtransfer endpoint now keeps track of the latest time it's seen to enable restarting the transfer if it's interrupted. The migrationtarget facade has a LatestLogTime method so the migrationmaster can specify the start time to the debug log endpoint.

The latest time is updated every two minutes of log records seen (so as not to spam the database), and when the connection is closed. This means that the log time will be up-to-date unless the target controller is killed for some reason.
Merge pull request #6636 from macgreagoir/use-localhost
Migrate remaining hard-coded IPv4 loopback to 'localhost'

For IPv6 compatibility, use of IPv4 loopback addresses should instead
use 'localhost', which should resolve to both IPv4 and IPv6 adresses.

Tests using loopback addresses have not be changed, as they should still
be correct as tests.

QA steps:
 * Tests should pass
Merge pull request #6642 from mjs/MM-charm-url-fix
migrations: Pass charm URL user component

In order to ensure the cs:~/user/foo style charms migrate correctly, the user component needs to be passed when uploading.

Drive-by: In the upload endpoint, don't assume "cs" if not "local". Fail fast if the schema isn't "cs" or "local".

### QA

Successfully migrated a model which used cs:~user/foo style charms. These failed to migrated before.
Improve ACL testing.
* Improve ACL testing on some areas that where deemed undertested.
* Fix add-model so it support --owner when run by a user with
addmodel permission instead of superuser.
Commits on Dec 02, 2016
Merge pull request #6646 from nskaggs/inc-2.1-beta3
Increment juju to 2.1

Bump develop to 2.1
Fix intermittently-failing test
I could make it reliable in by adjusting the delay, but running it with
the race checker made that break too, so I've relaxed the exact numbers
that it checks for. Really it just needs to check that there are
multiple messages being reported - the exact counts are not likely to be
wrong.

Fixes https://bugs.launchpad.net/juju/+bug/1646504
axw
apiserver: dispose facade object on watcher.Stop
When we stop a watcher, we will now dispose of the
facade object that is cached upon creation. Unless
we do this, the cache grows every time a watcher
is started, and only cleared when the API connection
is severed.

Fixes https://bugs.launchpad.net/juju-core/+bug/1645729 (for 2.0)
Merge pull request #6637 from wallyworld/cmr-worker-publish-local
Add code to remoterelations worker to publish local changes to remoe model

The remote relations worker gather the changes in response to a relation units watcher event, and calls the publish api on the remote relations facade to get said changes sent to the remote model.

To make things efficient, the ExportLocalEntity behaviour has been tweaked so that if an entity is exported twice, the existing token is returned with an AlreadyExists error to save a second api call.

QA: bootstrap lxd to ensure no breakages
Use target LatestLogTime as start for log stream
This means that migration log transfer will restart with minimal
duplication if it's interrupted.
Log when restarting the log transfer
Mostly because it makes it easier to verify that it's working.
Giulitti Salvatore
Update code that matches the new juju/utils.
Signed-off-by: Giulitti Salvatore <sgiulitti@cloudbasesolutions.com>
Giulitti Salvatore
Update dependencies.
Signed-off-by: Giulitti Salvatore <sgiulitti@cloudbasesolutions.com>
Salvatore Giulitti
Refactor windows userdata scripts.
Contains modifications in the windows userdata scripts so
it can be run multiple times during provisioning without changing it's final outcome.

Signed-off-by: Salvatore Giulitti <sgiulitti@cloudbasesolutions.com>
Merge pull request #6650 from hoenirvili/update-utils
Update code path from juju/utils.

Update code path matching the HEAD from juju/utils.
Merge pull request #6477 from hoenirvili/refactor-userdata
Refactor windows userdata scripts.

Contains modifications in the windows userdata scripts so
it can be run multiple times during provisioning without changing it's final outcome.
Martin Packman
dependencies.tsv: Update goose for secgroup fix
Fixes lp:1625624 for develop.

With newer versions of openstack, goose fails to delete
security groups because it's sending POST requests with
a Content-Type but no body. Update the goose dependency
to pick up Liam's fix.
Merge pull request #6605 from Pekkari/staging
Enable endpoints in LXD provider.

These changes propose to unlock the endpoint configuration in the lxd provider to be able to use an endpoint that is not a gateway. It is an initial work needed to address https://bugs.launchpad.net/juju/+bug/1618798.
Merge pull request #6651 from bz2/master_goose_secgroup_1625624
dependencies.tsv: Update goose for secgroup fix

Fixes lp:1625624 for develop.

With newer versions of openstack, goose fails to delete
security groups because it's sending POST requests with
a Content-Type but no body. Update the goose dependency
to pick up Liam's fix.

QA steps
----

See go-goose/goose#37
Commits on Dec 04, 2016
Merge pull request #6652 from perrito666/fix_1640535
Fix 1640535 HA tests fail after the leader is deleted

This fixes https://bugs.launchpad.net/juju/+bug/1640535

The problem is that Prometheus does not allow to re-register the same observer so we now are unregistering before registering, there is no pre-check required as this is an idempotent operation.

### QA 
* Run the aforementioned test "assess_recovery.py" you should obtain a pass
Commits on Dec 05, 2016
Merge pull request #6384 from perrito666/acls_improve_testing
Improve ACL testing.

- Improve ACL testing on some areas that where deemed undertested.
- Fix add-model so it support --owner when run by a user with
  addmodel permission instead of superuser.

This fixes https://bugs.launchpad.net/juju/+bug/1618966
### QA Steps
- Run unit tests
- Bootstrap a controller
- Add a user
- Grant that user "addmodel" permission
- Add another user
- Log in as that user
- juju add-model --owner=theseconduser amodelname
- A new model with theseconduser as owner is created.
Andrew McDermott
provider/maas: conditionally run ifdown/up
If the nett result of bridging interfaces results in nothing-to-do,
because they are already bridged, then don't run ifdown/up
unnecessarily.

This state can exist in MAAS 2.1 because you now have the option of
bridging interfaces ahead of deployment or bootstrap. And as we move
to dynamic bridging in Juju we want to invoke this script on an
interface on an ad-hoc basis but don't want it to do anything if that
interface is already bridged.

QA steps:

On a machine run:

 $ sudo ./add-juju-bridge.py /etc/network/interfaces \
     --activate \
     --interfaces-to-bridge=enp1s0f2

And note that enp1s0f2 gets bridged.

Verify with:

 $ brctl show

Run the add-juju-bridge.py script again with the same arguments and
now you'll see no action taken as it is already bridged as
br-enp1s0f2.

I also configured a node in MAAS 2.1 that had two bridged NICs;
bootstrapping a node doesn't additionally run ifdown/up because
there's nothing to do.
Andrew McDermott
Rename print_shell_cmd
Printing is an optional by-product.
Andrew McDermott
Drop --bond-sleep-duration
This was a testing hangover.
Merge pull request #6647 from babbageclunk/fix-intermittent-progress
Fix intermittently-failing test

I could make it reliable for normal runs by adjusting the delay, but running it 
with the race checker made that break too, so I've relaxed the exact numbers
that it checks for. Really it just needs to check that there are
multiple messages being reported - the exact counts aren't likely to be
wrong.

Running under the stress tester with the race checker on showed no failures 
in 300 runs after this change.

Fixes https://bugs.launchpad.net/juju/+bug/1646504
Merge pull request #6643 from axw/lp1645729-watcher-dispose
apiserver: dispose facade object on watcher.Stop

When we stop a watcher, we will now dispose of the
facade object that is cached upon creation. Unless
we do this, the cache grows every time a watcher
is started, and only cleared when the API connection
is severed.

Fixes the issue noted in https://bugs.launchpad.net/juju-core/+bug/1645729, but for the develop branch
Merge pull request #6648 from babbageclunk/logtransfer-restart
migration: make logtransfer restartable again

Use target model LatestLogTime as the start time for the debug-log stream. This means that migration log transfer will restart with minimal duplication if it's interrupted.

During testing I realised that we also need to clear the last seen log times when removing a model, otherwise when you try to migrate back to that model it will only send the log messages after that.

Testing the restarting manually is tricky - you need to generate enough log messages that it takes a long enough time that you have a chance to kill the controller during logtransfer - so I've added a wrench point that can trigger an error to stop the transfer after 500 messages. The dependency engine automatically restarts the migration master. The worker will log when it restarts sending messages after an interruption so you can see the log time it's starting from (although it logs the message start time in UTC rather than the local time that debug-log displays).

QA steps:
* bootstrap two controllers A and B
* create model m on A
* deploy ubuntu to m (to generate log messages)
* set the wrench to activate on controller A by creating the /var/lib/juju/wrench/migrationmaster on A:controller machine 0 - containing the line:
```
die-after-500-log-messages
```
Or use this command:
```
juju run -m A:controller --machine 0 "sudo bash -c \"mkdir /var/lib/juju/wrench; echo die-after-500-log-messages > /var/lib/juju/wrench/migrationmaster\""
```
* check the number of log messages for A:m - `juju debug-log --replay -m A:m | wc -l`
* save the first ~700 messages and to a file for comparison
* `juju migrate -c A m B`
* look in the A:controller logs to confirm that the wrench error was thrown - search for "wrench in the works"
* note the time that log transfer started from when the migration master worker restarted
* check that you don't see any duplicate messages in the log at that time (after converting it to local time)
* check the number of log messages for B:m. It'll be higher, because of messages logged during the import, but it shouldn't be 500 higher.
* check that the B:m logs start with the same ~700 messages as the saved A:m logs - if the restarting wasn't working you'd expect to see lots of duplicates at the start of the B:m logs that weren't present in the A:m logs.
Commits on Dec 06, 2016
Correct bad error message
It should report the model uuid as well as the error.
Merge pull request #6657 from howbazaar/centralhub
Add pubsub/centralhub package.

Adds dependency and central hub definition.
Merge pull request #6658 from howbazaar/centralhub-2-apiserver-pubsub…
…-endpoint

Add the central hub to the apiserver.

Adds pubsub websocket endpoint for receiving messages from other controllers and republishing on the local central hub.
Merge pull request #6656 from babbageclunk/fix-error
Correct bad error message when releasing state back to the pool

It should report the model uuid as well as the error.
Merge pull request #6654 from frobware/bridge-if-different-strike3
provider/maas: conditionally run ifdown/up

If the nett result of bridging interfaces results in nothing-to-do,
because they are already bridged, then don't run ifdown/up
unnecessarily.

This state can exist in MAAS 2.1 because you now have the option of
bridging interfaces ahead of deployment or bootstrap. And as we move
to dynamic bridging in Juju we want to invoke this script on an
interface on an ad-hoc basis but don't want it to do anything if that
interface is already bridged.

QA steps:

On a machine run:

 $ sudo ./add-juju-bridge.py /etc/network/interfaces \
     --activate \
     --interfaces-to-bridge=enp1s0f2

And note that enp1s0f2 gets bridged.

Verify with:

 $ brctl show

Run the add-juju-bridge.py script again with the same arguments and
now you'll see no action taken as it is already bridged as
br-enp1s0f2.

I also configured a node in MAAS 2.1 that had two bridged NICs;
bootstrapping a node doesn't additionally run ifdown/up because
there's nothing to do.
Commits on Dec 07, 2016
Merge pull request #6665 from AlexisBruemmer/fix-worker-lease-test-ti…
…meout

increase timeout for worker lease tests

Fixes lp1631369 by increasing the timeout for manager_expire_test so that it does not timeout on a machine under load.

QA steps

On a machine under heavy load run the worker/lease tests in a loop:
while true; do go test github.com/juju/juju/worker/lease/...; done
no test failures after 4 hours (in the same test env it was failing consistently within 30min)
Also bootstrapped lxd provider and deployed ubuntu charm just for good measure.
Merge pull request #6659 from howbazaar/centralhub-3-api-pubsub
API client methods for pubsub message forwarding.

Also adds the current stack to the Login userdata when in developer mode.
Showing with 4,967 additions and 1,480 deletions.
  1. +40 −8 api/apiclient.go
  2. +14 −0 api/base/caller.go
  3. +6 −1 api/base/testing/apicaller.go
  4. +3 −107 api/client.go
  5. +34 −2 api/client_test.go
  6. +136 −0 api/common/logs.go
  7. +2 −0 api/controller/legacy_test.go
  8. +10 −0 api/migrationmaster/client.go
  9. +37 −0 api/migrationmaster/client_test.go
  10. +33 −1 api/migrationtarget/client.go
  11. +70 −4 api/migrationtarget/client_test.go
  12. +14 −0 api/pubsub/package_test.go
  13. +60 −0 api/pubsub/pubsub.go
  14. +244 −0 api/pubsub/pubsub_test.go
  15. +18 −0 api/remoterelations/remoterelations.go
  16. +39 −0 api/remoterelations/remoterelations_test.go
  17. +10 −0 api/state.go
  18. +16 −3 apiserver/apiserver.go
  19. +4 −1 apiserver/apiserver_test.go
  20. +2 −2 apiserver/application/application_test.go
  21. +9 −2 apiserver/charms.go
  22. +27 −2 apiserver/charms_test.go
  23. +3 −0 apiserver/controller/controller_test.go
  24. +10 −0 apiserver/debuglog.go
  25. +1 −0 apiserver/debuglog_db.go
  26. +3 −1 apiserver/debuglog_db_internal_test.go
  27. +6 −0 apiserver/facade/facadetest/context.go
  28. +9 −0 apiserver/facade/interface.go
  29. +8 −3 apiserver/httpcontext.go
  30. +46 −1 apiserver/logtransfer.go
  31. +94 −4 apiserver/logtransfer_test.go
  32. +45 −2 apiserver/migrationtarget/migrationtarget.go
  33. +32 −0 apiserver/migrationtarget/migrationtarget_test.go
  34. +10 −0 apiserver/modelmanager/modelinfo_test.go
  35. +13 −7 apiserver/modelmanager/modelmanager.go
  36. +84 −39 apiserver/modelmanager/modelmanager_test.go
  37. +3 −0 apiserver/observer/metricobserver/metricobserver.go
  38. +4 −0 apiserver/observer/metricobserver/observerfactory_test.go
  39. +23 −0 apiserver/params/crossmodel.go
  40. +7 −0 apiserver/params/params.go
  41. +132 −0 apiserver/pubsub.go
  42. +177 −0 apiserver/pubsub_test.go
  43. +68 −10 apiserver/remoterelations/mock_test.go
  44. +104 −1 apiserver/remoterelations/remoterelations.go
  45. +43 −2 apiserver/remoterelations/remoterelations_test.go
  46. +59 −7 apiserver/remoterelations/state.go
  47. +23 −7 apiserver/root.go
  48. +11 −0 apiserver/server_test.go
  49. +50 −6 apiserver/testing/fakeauthorizer.go
  50. +1 −1 apiserver/tools_test.go
  51. +70 −114 apiserver/watcher.go
  52. +43 −11 apiserver/watcher_test.go
  53. +21 −8 cert/cert.go
  54. +19 −17 cert/cert_test.go
  55. +21 −6 cloudconfig/windows_userdata_test.go
  56. +21 −6 cloudconfig/windowsuserdatafiles/addJujuUser.ps1
  57. +21 −6 cloudconfig/winuserdata.go
  58. +2 −2 cmd/juju/application/bundle.go
  59. +27 −110 cmd/juju/application/deploy_test.go
  60. +32 −16 cmd/juju/cloud/add.go
  61. +345 −285 cmd/juju/cloud/add_test.go
  62. +4 −4 cmd/juju/commands/debuglog.go
  63. +17 −17 cmd/juju/commands/debuglog_test.go
  64. +20 −1 cmd/juju/commands/main.go
  65. +1 −0 cmd/jujud/agent/engine_test.go
  66. +33 −6 cmd/jujud/agent/machine.go
  67. +2 −0 cmd/jujud/agent/model/manifolds.go
  68. +39 −0 cmd/jujud/reboot/reboot.go
  69. +70 −1 cmd/jujud/reboot/reboot_test.go
  70. +2 −2 container/kvm/template.go
  71. +1 −1 core/description/application_test.go
  72. +73 −157 core/description/resource.go
  73. +66 −192 core/description/resource_test.go
  74. +8 −4 core/description/unit_test.go
  75. +20 −13 core/description/unitresources.go
  76. +35 −13 core/description/unitresources_test.go
  77. +6 −4 dependencies.tsv
  78. +50 −0 featuretests/cmd_juju_addcloud_interactive.go
  79. +1 −1 featuretests/cmd_juju_relation_test.go
  80. +53 −7 featuretests/dblog_test.go
  81. +43 −16 featuretests/introspection_test.go
  82. +1 −0 featuretests/package_test.go
  83. +0 −2 juju/testing/conn.go
  84. +1 −1 juju/testing/instance.go
  85. +14 −3 migration/precheck.go
  86. +2 −2 migration/precheck_shim.go
  87. +22 −3 migration/precheck_test.go
  88. +1 −1 network/address.go
  89. +13 −0 patches/mgo_txn_flusher_pr360.diff
  90. +7 −2 provider/dummy/environs.go
  91. +10 −8 provider/lxd/environ_raw.go
  92. +30 −5 provider/lxd/environ_raw_test.go
  93. +0 −3 provider/lxd/provider.go
  94. +0 −11 provider/lxd/provider_test.go
  95. +41 −31 provider/maas/add-juju-bridge.py
  96. +41 −31 provider/maas/bridgescript.go
  97. +101 −4 provider/maas/bridgescript_test.go
  98. +13 −5 provider/openstack/provider.go
  99. +47 −0 pubsub/centralhub/centralhub.go
  100. +116 −0 pubsub/centralhub/centralhub_test.go
  101. +14 −0 pubsub/centralhub/package_test.go
  102. +1 −1 scripts/win-installer/setup.iss
  103. +2 −2 service/common/testing/fake.go
  104. +3 −2 service/service.go
  105. +1 −1 snapcraft.yaml
  106. +9 −1 state/logs.go
  107. +13 −41 state/migration_export.go
  108. +14 −23 state/migration_export_test.go
  109. +1 −4 state/migration_internal_test.go
  110. +16 −8 state/presence/presence.go
  111. +4 −4 state/relation_test.go
  112. +1 −1 state/state.go
  113. +29 −0 state/state_test.go
  114. +177 −0 state/statemetrics/mock_test.go
  115. +14 −0 state/statemetrics/package_test.go
  116. +108 −0 state/statemetrics/state.go
  117. +244 −0 state/statemetrics/statemetrics.go
  118. +252 −0 state/statemetrics/statemetrics_test.go
  119. +4 −3 testing/cert.go
  120. +1 −1 tools/lxdclient/client_network.go
  121. +1 −1 version/version.go
  122. +1 −1 worker/introspection/socket_test.go
  123. +3 −2 worker/lease/util_test.go
  124. +5 −0 worker/metrics/sender/manifold_test.go
  125. +1 −1 worker/migrationmaster/manifold.go
  126. +101 −10 worker/migrationmaster/worker.go
  127. +295 −0 worker/migrationmaster/worker_test.go
  128. +12 −3 worker/remoterelations/manifold.go
  129. +7 −0 worker/remoterelations/manifold_test.go
  130. +5 −0 worker/remoterelations/mock_test.go
  131. +41 −14 worker/remoterelations/remoterelations.go
  132. +4 −0 worker/remoterelations/remoterelations_test.go
  133. +60 −0 worker/remoterelations/shim.go
View
@@ -44,6 +44,9 @@ const PingPeriod = 1 * time.Minute
// consider it to have failed.
const pingTimeout = 30 * time.Second
+// modelRoot is the prefix that all model API paths begin with.
+const modelRoot = "/model/"
+
var logger = loggo.GetLogger("juju.api")
type rpcConnection interface {
@@ -277,6 +280,34 @@ func (t *hostSwitchingTransport) RoundTrip(req *http.Request) (*http.Response, e
// ConnectStream implements StreamConnector.ConnectStream.
func (st *state) ConnectStream(path string, attrs url.Values) (base.Stream, error) {
+ path, err := apiPath(st.modelTag, path)
+ if err != nil {
+ return nil, errors.Trace(err)
+ }
+ conn, err := st.connectStreamWithRetry(path, attrs, nil)
+ if err != nil {
+ return nil, errors.Trace(err)
+ }
+ return conn, nil
+}
+
+// ConnectControllerStream creates a stream connection to an API path
+// that isn't prefixed with /model/uuid.
+func (st *state) ConnectControllerStream(path string, attrs url.Values, headers http.Header) (base.Stream, error) {
+ if !strings.HasPrefix(path, "/") {
+ return nil, errors.Errorf("path %q is not absolute", path)
+ }
+ if strings.HasPrefix(path, modelRoot) {
+ return nil, errors.Errorf("path %q is model-specific", path)
+ }
+ conn, err := st.connectStreamWithRetry(path, attrs, headers)
+ if err != nil {
+ return nil, errors.Trace(err)
+ }
+ return conn, nil
+}
+
+func (st *state) connectStreamWithRetry(path string, attrs url.Values, headers http.Header) (base.Stream, error) {
if !st.isLoggedIn() {
return nil, errors.New("cannot use ConnectStream without logging in")
}
@@ -286,7 +317,7 @@ func (st *state) ConnectStream(path string, attrs url.Values) (base.Stream, erro
// error, the response will contain a macaroon that, when discharged,
// may allow access, so we discharge it (using bakery.Client.HandleError)
// and try the request again.
- conn, err := st.connectStream(path, attrs)
+ conn, err := st.connectStream(path, attrs, headers)
if err == nil {
return conn, err
}
@@ -297,7 +328,7 @@ func (st *state) ConnectStream(path string, attrs url.Values) (base.Stream, erro
return nil, errors.Trace(err)
}
// Try again with the discharged macaroon.
- conn, err = st.connectStream(path, attrs)
+ conn, err = st.connectStream(path, attrs, headers)
if err != nil {
return nil, errors.Trace(err)
}
@@ -307,11 +338,7 @@ func (st *state) ConnectStream(path string, attrs url.Values) (base.Stream, erro
// connectStream is the internal version of ConnectStream. It differs from
// ConnectStream only in that it will not retry the connection if it encounters
// discharge-required error.
-func (st *state) connectStream(path string, attrs url.Values) (base.Stream, error) {
- path, err := apiPath(st.modelTag, path)
- if err != nil {
- return nil, errors.Trace(err)
- }
+func (st *state) connectStream(path string, attrs url.Values, extraHeaders http.Header) (base.Stream, error) {
target := url.URL{
Scheme: "wss",
Host: st.addr,
@@ -331,6 +358,11 @@ func (st *state) connectStream(path string, attrs url.Values) (base.Stream, erro
// Add any cookies because they will not be sent to websocket
// connections by default.
st.addCookiesToHeader(cfg.Header)
+ for header, values := range extraHeaders {
+ for _, value := range values {
+ cfg.Header.Add(header, value)
+ }
+ }
cfg.TlsConfig = st.tlsConfig
connection, err := websocketDialConfig(cfg)
@@ -414,7 +446,7 @@ func apiPath(modelTag names.ModelTag, path string) (string, error) {
if modelUUID == "" {
return path, nil
}
- return "/model/" + modelUUID + path, nil
+ return modelRoot + modelUUID + path, nil
}
// tagToString returns the value of a tag's String method, or "" if the tag is nil.
View
@@ -5,6 +5,7 @@ package base
import (
"io"
+ "net/http"
"net/url"
"github.com/juju/httprequest"
@@ -39,6 +40,7 @@ type APICaller interface {
HTTPClient() (*httprequest.Client, error)
StreamConnector
+ ControllerStreamConnector
}
// StreamConnector is implemented by the client-facing State object.
@@ -53,6 +55,18 @@ type StreamConnector interface {
ConnectStream(path string, attrs url.Values) (Stream, error)
}
+// ControllerStreamConnector is implemented by the client-facing State object.
+type ControllerStreamConnector interface {
+ // ConnectControllerStream connects to the given HTTP websocket
+ // endpoint path and returns the resulting connection. The given
+ // values are used as URL query values when making the initial
+ // HTTP request. Headers passed in will be added to the HTTP
+ // request.
+ //
+ // The path must be absolute and can't start with "/model".
+ ConnectControllerStream(path string, attrs url.Values, headers http.Header) (Stream, error)
+}
+
// Stream represents a streaming connection to the API.
type Stream interface {
io.ReadWriteCloser
@@ -4,6 +4,7 @@
package testing
import (
+ "net/http"
"net/url"
"github.com/juju/errors"
@@ -45,7 +46,11 @@ func (APICallerFunc) HTTPClient() (*httprequest.Client, error) {
}
func (APICallerFunc) ConnectStream(path string, attrs url.Values) (base.Stream, error) {
- return nil, errors.New("stream connection unimplemented")
+ return nil, errors.NotImplementedf("stream connection")
+}
+
+func (APICallerFunc) ConnectControllerStream(path string, attrs url.Values, headers http.Header) (base.Stream, error) {
+ return nil, errors.NotImplementedf("controller stream connection")
}
// CheckArgs holds the possible arguments to CheckingAPICaller(). Any
View
@@ -12,10 +12,8 @@ import (
"os"
"strconv"
"strings"
- "time"
"github.com/juju/errors"
- "github.com/juju/loggo"
"github.com/juju/version"
"golang.org/x/net/websocket"
"gopkg.in/juju/charm.v6-unstable"
@@ -24,6 +22,7 @@ import (
"gopkg.in/macaroon.v1"
"github.com/juju/juju/api/base"
+ "github.com/juju/juju/api/common"
"github.com/juju/juju/apiserver/params"
"github.com/juju/juju/constraints"
"github.com/juju/juju/downloader"
@@ -524,111 +523,8 @@ func (c websocketStream) WriteJSON(v interface{}) error {
return websocket.JSON.Send(c.Conn, v)
}
-// TODO(ericsnow) Fold DebugLogParams into params.LogStreamConfig.
-
-// DebugLogParams holds parameters for WatchDebugLog that control the
-// filtering of the log messages. If the structure is zero initialized, the
-// entire log file is sent back starting from the end, and until the user
-// closes the connection.
-type DebugLogParams struct {
- // IncludeEntity lists entity tags to include in the response. Tags may
- // finish with a '*' to match a prefix e.g.: unit-mysql-*, machine-2. If
- // none are set, then all lines are considered included.
- IncludeEntity []string
- // IncludeModule lists logging modules to include in the response. If none
- // are set all modules are considered included. If a module is specified,
- // all the submodules also match.
- IncludeModule []string
- // ExcludeEntity lists entity tags to exclude from the response. As with
- // IncludeEntity the values may finish with a '*'.
- ExcludeEntity []string
- // ExcludeModule lists logging modules to exclude from the resposne. If a
- // module is specified, all the submodules are also excluded.
- ExcludeModule []string
- // Limit defines the maximum number of lines to return. Once this many
- // have been sent, the socket is closed. If zero, all filtered lines are
- // sent down the connection until the client closes the connection.
- Limit uint
- // Backlog tells the server to try to go back this many lines before
- // starting filtering. If backlog is zero and replay is false, then there
- // may be an initial delay until the next matching log message is written.
- Backlog uint
- // Level specifies the minimum logging level to be sent back in the response.
- Level loggo.Level
- // Replay tells the server to start at the start of the log file rather
- // than the end. If replay is true, backlog is ignored.
- Replay bool
- // NoTail tells the server to only return the logs it has now, and not
- // to wait for new logs to arrive.
- NoTail bool
-}
-
-func (args DebugLogParams) URLQuery() url.Values {
- attrs := url.Values{
- "includeEntity": args.IncludeEntity,
- "includeModule": args.IncludeModule,
- "excludeEntity": args.ExcludeEntity,
- "excludeModule": args.ExcludeModule,
- }
- if args.Replay {
- attrs.Set("replay", fmt.Sprint(args.Replay))
- }
- if args.NoTail {
- attrs.Set("noTail", fmt.Sprint(args.NoTail))
- }
- if args.Limit > 0 {
- attrs.Set("maxLines", fmt.Sprint(args.Limit))
- }
- if args.Backlog > 0 {
- attrs.Set("backlog", fmt.Sprint(args.Backlog))
- }
- if args.Level != loggo.UNSPECIFIED {
- attrs.Set("level", fmt.Sprint(args.Level))
- }
- return attrs
-}
-
-// LogMessage is a structured logging entry.
-type LogMessage struct {
- Entity string
- Timestamp time.Time
- Severity string
- Module string
- Location string
- Message string
-}
-
// WatchDebugLog returns a channel of structured Log Messages. Only log entries
// that match the filtering specified in the DebugLogParams are returned.
-func (c *Client) WatchDebugLog(args DebugLogParams) (<-chan LogMessage, error) {
- // Prepare URL query attributes.
- attrs := args.URLQuery()
-
- connection, err := c.st.ConnectStream("/log", attrs)
- if err != nil {
- return nil, errors.Trace(err)
- }
-
- messages := make(chan LogMessage)
- go func() {
- defer close(messages)
-
- for {
- var msg params.LogMessage
- err := connection.ReadJSON(&msg)
- if err != nil {
- return
- }
- messages <- LogMessage{
- Entity: msg.Entity,
- Timestamp: msg.Timestamp,
- Severity: msg.Severity,
- Module: msg.Module,
- Location: msg.Location,
- Message: msg.Message,
- }
- }
- }()
-
- return messages, nil
+func (c *Client) WatchDebugLog(args common.DebugLogParams) (<-chan common.LogMessage, error) {
+ return common.StreamDebugLog(c.st, args)
}
View
@@ -13,6 +13,7 @@ import (
"net/url"
"path"
"strings"
+ "time"
"github.com/juju/errors"
"github.com/juju/httprequest"
@@ -26,6 +27,7 @@ import (
"github.com/juju/juju/api"
"github.com/juju/juju/api/base"
+ "github.com/juju/juju/api/common"
"github.com/juju/juju/apiserver/params"
jujunames "github.com/juju/juju/juju/names"
jujutesting "github.com/juju/juju/juju/testing"
@@ -356,7 +358,7 @@ func (s *clientSuite) TestWatchDebugLogConnected(c *gc.C) {
// Use the no tail option so we don't try to start a tailing cursor
// on the oplog when there is no oplog configured in mongo as the tests
// don't set up mongo in replicaset mode.
- messages, err := client.WatchDebugLog(api.DebugLogParams{NoTail: true})
+ messages, err := client.WatchDebugLog(common.DebugLogParams{NoTail: true})
c.Assert(err, jc.ErrorIsNil)
c.Assert(messages, gc.NotNil)
}
@@ -404,11 +406,37 @@ func (s *clientSuite) TestConnectStreamErrorReadError(c *gc.C) {
c.Assert(reader, gc.IsNil)
}
+func (s *clientSuite) TestConnectControllerStreamRejectsRelativePaths(c *gc.C) {
+ reader, err := s.APIState.ConnectControllerStream("foo", nil, nil)
+ c.Assert(err, gc.ErrorMatches, `path "foo" is not absolute`)
+ c.Assert(reader, gc.IsNil)
+}
+
+func (s *clientSuite) TestConnectControllerStreamRejectsModelPaths(c *gc.C) {
+ reader, err := s.APIState.ConnectControllerStream("/model/foo", nil, nil)
+ c.Assert(err, gc.ErrorMatches, `path "/model/foo" is model-specific`)
+ c.Assert(reader, gc.IsNil)
+}
+
+func (s *clientSuite) TestConnectControllerStreamAppliesHeaders(c *gc.C) {
+ catcher := urlCatcher{}
+ headers := http.Header{}
+ headers.Add("thomas", "cromwell")
+ headers.Add("anne", "boleyn")
+ s.PatchValue(api.WebsocketDialConfig, catcher.recordLocation)
+
+ _, err := s.APIState.ConnectControllerStream("/something", nil, headers)
+ c.Assert(err, jc.ErrorIsNil)
+
+ c.Assert(catcher.headers.Get("thomas"), gc.Equals, "cromwell")
+ c.Assert(catcher.headers.Get("anne"), gc.Equals, "boleyn")
+}
+
func (s *clientSuite) TestWatchDebugLogParamsEncoded(c *gc.C) {
catcher := urlCatcher{}
s.PatchValue(api.WebsocketDialConfig, catcher.recordLocation)
- params := api.DebugLogParams{
+ params := common.DebugLogParams{
IncludeEntity: []string{"a", "b"},
IncludeModule: []string{"c", "d"},
ExcludeEntity: []string{"e", "f"},
@@ -418,6 +446,7 @@ func (s *clientSuite) TestWatchDebugLogParamsEncoded(c *gc.C) {
Level: loggo.ERROR,
Replay: true,
NoTail: true,
+ StartTime: time.Date(2016, 11, 30, 11, 48, 0, 100, time.UTC),
}
client := s.APIState.Client()
@@ -436,6 +465,7 @@ func (s *clientSuite) TestWatchDebugLogParamsEncoded(c *gc.C) {
"level": {"ERROR"},
"replay": {"true"},
"noTail": {"true"},
+ "startTime": {"2016-11-30T11:48:00.0000001Z"},
})
}
@@ -530,10 +560,12 @@ func (r *badReader) Read(p []byte) (n int, err error) {
type urlCatcher struct {
location *url.URL
+ headers http.Header
}
func (u *urlCatcher) recordLocation(config *websocket.Config) (base.Stream, error) {
u.location = config.Location
+ u.headers = config.Header
pr, pw := io.Pipe()
go func() {
fmt.Fprintf(pw, "null\n")
Oops, something went wrong.

No commit comments for this range