projects
/
osm
/
N2VC.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Make connect_model and deploy a bit more friendly
[osm/N2VC.git]
/
juju
/
client
/
connection.py
diff --git
a/juju/client/connection.py
b/juju/client/connection.py
index
9e8cb8f
..
77edda5
100644
(file)
--- a/
juju/client/connection.py
+++ b/
juju/client/connection.py
@@
-11,6
+11,7
@@
import subprocess
import websockets
from http.client import HTTPSConnection
import websockets
from http.client import HTTPSConnection
+import asyncio
import yaml
from juju import tag
import yaml
from juju import tag
@@
-36,13
+37,14
@@
class Connection:
"""
def __init__(
self, endpoint, uuid, username, password, cacert=None,
"""
def __init__(
self, endpoint, uuid, username, password, cacert=None,
- macaroons=None):
+ macaroons=None
, loop=None
):
self.endpoint = endpoint
self.uuid = uuid
self.username = username
self.password = password
self.macaroons = macaroons
self.cacert = cacert
self.endpoint = endpoint
self.uuid = uuid
self.username = username
self.password = password
self.macaroons = macaroons
self.cacert = cacert
+ self.loop = loop or asyncio.get_event_loop()
self.__request_id__ = 0
self.addr = None
self.__request_id__ = 0
self.addr = None
@@
-67,6
+69,7
@@
class Connection:
kw = dict()
kw['ssl'] = self._get_ssl(self.cacert)
kw = dict()
kw['ssl'] = self._get_ssl(self.cacert)
+ kw['loop'] = self.loop
self.addr = url
self.ws = await websockets.connect(url, **kw)
log.info("Driver connected to juju %s", url)
self.addr = url
self.ws = await websockets.connect(url, **kw)
log.info("Driver connected to juju %s", url)
@@
-153,6
+156,7
@@
class Connection:
self.password,
self.cacert,
self.macaroons,
self.password,
self.cacert,
self.macaroons,
+ self.loop,
)
async def controller(self):
)
async def controller(self):
@@
-166,19
+170,21
@@
class Connection:
self.password,
self.cacert,
self.macaroons,
self.password,
self.cacert,
self.macaroons,
+ self.loop,
)
@classmethod
async def connect(
cls, endpoint, uuid, username, password, cacert=None,
)
@classmethod
async def connect(
cls, endpoint, uuid, username, password, cacert=None,
- macaroons=None):
+ macaroons=None
, loop=None
):
"""Connect to the websocket.
If uuid is None, the connection will be to the controller. Otherwise it
will be to the model.
"""
"""Connect to the websocket.
If uuid is None, the connection will be to the controller. Otherwise it
will be to the model.
"""
- client = cls(endpoint, uuid, username, password, cacert, macaroons)
+ client = cls(endpoint, uuid, username, password, cacert, macaroons,
+ loop)
await client.open()
redirect_info = await client.redirect_info()
await client.open()
redirect_info = await client.redirect_info()
@@
-209,7
+215,7
@@
class Connection:
"Couldn't authenticate to %s", endpoint)
@classmethod
"Couldn't authenticate to %s", endpoint)
@classmethod
- async def connect_current(cls):
+ async def connect_current(cls
, loop=None
):
"""Connect to the currently active model.
"""
"""Connect to the currently active model.
"""
@@
-219,10
+225,10
@@
class Connection:
model_name = models['current-model']
return await cls.connect_model(
model_name = models['current-model']
return await cls.connect_model(
- '{}:{}'.format(controller_name, model_name))
+ '{}:{}'.format(controller_name, model_name)
, loop
)
@classmethod
@classmethod
- async def connect_current_controller(cls):
+ async def connect_current_controller(cls
, loop=None
):
"""Connect to the currently active controller.
"""
"""Connect to the currently active controller.
"""
@@
-231,10
+237,10
@@
class Connection:
if not controller_name:
raise JujuConnectionError('No current controller')
if not controller_name:
raise JujuConnectionError('No current controller')
- return await cls.connect_controller(controller_name)
+ return await cls.connect_controller(controller_name
, loop
)
@classmethod
@classmethod
- async def connect_controller(cls, controller_name):
+ async def connect_controller(cls, controller_name
, loop=None
):
"""Connect to a controller by name.
"""
"""Connect to a controller by name.
"""
@@
-248,18
+254,23
@@
class Connection:
macaroons = get_macaroons() if not password else None
return await cls.connect(
macaroons = get_macaroons() if not password else None
return await cls.connect(
- endpoint, None, username, password, cacert, macaroons)
+ endpoint, None, username, password, cacert, macaroons
, loop
)
@classmethod
@classmethod
- async def connect_model(cls, model):
+ async def connect_model(cls, model
, loop=None
):
"""Connect to a model by name.
"""Connect to a model by name.
- :param str model:
<controller>:
<model>
+ :param str model:
[<controller>:]
<model>
"""
"""
- controller_name, model_name = model.split(':')
-
jujudata = JujuData()
jujudata = JujuData()
+
+ if ':' in model:
+ controller_name, model_name = model.split(':')
+ else:
+ controller_name = jujudata.current_controller()
+ model_name = model
+
controller = jujudata.controllers()[controller_name]
endpoint = controller['api-endpoints'][0]
cacert = controller.get('ca-cert')
controller = jujudata.controllers()[controller_name]
endpoint = controller['api-endpoints'][0]
cacert = controller.get('ca-cert')
@@
-267,11
+278,13
@@
class Connection:
username = accounts['user']
password = accounts.get('password')
models = jujudata.models()[controller_name]
username = accounts['user']
password = accounts.get('password')
models = jujudata.models()[controller_name]
+ if '/' not in model_name:
+ model_name = '{}/{}'.format(username, model_name)
model_uuid = models['models'][model_name]['uuid']
macaroons = get_macaroons() if not password else None
return await cls.connect(
model_uuid = models['models'][model_name]['uuid']
macaroons = get_macaroons() if not password else None
return await cls.connect(
- endpoint, model_uuid, username, password, cacert, macaroons)
+ endpoint, model_uuid, username, password, cacert, macaroons
, loop
)
def build_facades(self, info):
self.facades.clear()
def build_facades(self, info):
self.facades.clear()
@@
-349,7
+362,7
@@
def get_macaroons():
cookie_file = os.path.expanduser('~/.go-cookies')
with open(cookie_file, 'r') as f:
cookies = json.load(f)
cookie_file = os.path.expanduser('~/.go-cookies')
with open(cookie_file, 'r') as f:
cookies = json.load(f)
- except (OSError, ValueError)
as e
:
+ except (OSError, ValueError):
log.warn("Couldn't load macaroons from %s", cookie_file)
return []
log.warn("Couldn't load macaroons from %s", cookie_file)
return []