From: Tim Van Steenburgh Date: Tue, 22 Nov 2016 13:49:19 +0000 (-0500) Subject: Merge pull request #15 from juju/run-action X-Git-Tag: 0.1.0~41 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=d613f8d8ae11dc96c240219884f44f2e3f9d004c;hp=c7aa2a9872c31ca6be58f3a95b42e7bd0c14c116;p=osm%2FN2VC.git Merge pull request #15 from juju/run-action Implement Unit.run_action --- diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..37dc566 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,19 @@ +dist: trusty +sudo: required +language: python +python: + - "3.5" +before_install: + - sudo add-apt-repository ppa:ubuntu-lxc/lxd-stable -y + - sudo add-apt-repository ppa:juju/stable -y + - sudo apt-get update -q + - sudo apt-get install lxd juju-2.0 -y + - sudo usermod -a -G lxd $USER + - groups + - sudo lxd init --auto +install: pip install tox-travis +before_script: + - juju bootstrap localhost test +script: tox +after_script: + - juju destroy-controller --destroy-all-models -y test diff --git a/examples/leadership.py b/examples/leadership.py new file mode 100644 index 0000000..c52de60 --- /dev/null +++ b/examples/leadership.py @@ -0,0 +1,26 @@ +""" +This example: + +1. Connects to the current model. +2. Prints out leadership status for all deployed units in the model. +3. Cleanly disconnects. + +""" +import asyncio + +from juju.model import Model + +async def report_leadership(): + model = Model() + await model.connect_current() + + print("Leadership: ") + for app in model.applications.values(): + for unit in app.units: + print("{}: {}".format( + unit.name, await unit.is_leader_from_status())) + + await model.disconnect() + +loop = asyncio.get_event_loop() +loop.run_until_complete(report_leadership()) diff --git a/juju/unit.py b/juju/unit.py index 37d45d3..d0a70bd 100644 --- a/juju/unit.py +++ b/juju/unit.py @@ -206,3 +206,26 @@ class Unit(model.ModelEntity): """ pass + + async def is_leader_from_status(self): + """ + Check to see if this unit is the leader. Returns True if so, and + False if it is not, or if leadership does not make sense + (e.g., there is no leader in this application.) + + This method is a kluge that calls FullStatus in the + ClientFacade to get its information. Once + https://bugs.launchpad.net/juju/+bug/1643691 is resolved, we + should add a simple .is_leader property, and deprecate this + method. + + """ + app = self.name.split("/")[0] + + c = client.ClientFacade() + c.connect(self.model.connection) + + status = await c.FullStatus(None) + + return status.applications[app]['units'][self.name].get( + 'leader', False)