Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions juju/client/connector.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from juju.client.gocookies import GoCookieJar, go_to_py_cookie
from juju.client.jujudata import FileJujuData, API_ENDPOINTS_KEY
from juju.client.proxy.factory import proxy_from_config
from juju.errors import JujuConnectionError, JujuError, PylibjujuProgrammingError
from juju.errors import JujuConnectionError, JujuError, PylibjujuProgrammingError, ControllerNameNotFound
from juju.client import client

log = logging.getLogger('connector')
Expand Down Expand Up @@ -97,7 +97,11 @@ async def connect(self, **kwargs):
if not self.controller_name:
if 'endpoint' not in kwargs:
raise PylibjujuProgrammingError("Please report this error to the maintainers.")
self.controller_name = self.jujudata.controller_name_by_endpoint(kwargs['endpoint'])
try:
self.controller_name = self.jujudata.controller_name_by_endpoint(kwargs['endpoint'])
except ControllerNameNotFound:
# It's ok because we might not have the juju cli (controllers.yaml)
pass

# Check if we support the target controller
if not self._connection.info['server-version'].startswith(SUPPORTED_JUJU_API_PREFIX):
Expand Down
8 changes: 6 additions & 2 deletions juju/client/jujudata.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import yaml
from juju import tag
from juju.client.gocookies import GoCookieJar
from juju.errors import JujuError, PylibjujuProgrammingError
from juju.errors import JujuError, PylibjujuProgrammingError, ControllerNameNotFound
from juju.utils import juju_config_dir

API_ENDPOINTS_KEY = 'api-endpoints'
Expand Down Expand Up @@ -133,7 +133,11 @@ def controller_name_by_endpoint(self, endpoint):

:param str endpoint: The endpoint of the controller we're looking for
"""
for controller_name, controller in self.controllers().items():
try:
contrs = self.controllers()
except FileNotFoundError:
raise ControllerNameNotFound()
for controller_name, controller in contrs.items():
if isinstance(endpoint, str):
if endpoint in controller[API_ENDPOINTS_KEY]:
return controller_name
Expand Down
4 changes: 4 additions & 0 deletions juju/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,7 @@ class JujuModelConfigError(JujuConfigError):

class AbstractMethodError(Exception):
pass


class ControllerNameNotFound(Exception):
pass
14 changes: 14 additions & 0 deletions tests/integration/test_connection.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,20 @@
logger = logging.getLogger(__name__)


@base.bootstrapped
@pytest.mark.asyncio
async def test_connection_happy_path(event_loop):
async with base.CleanController() as contr:
conn = contr.connection()
new_cont = Controller()
await new_cont.connect(endpoint=conn.endpoint,
username=conn.username,
password=conn.password,
cacert=conn.cacert,
)
await new_cont.disconnect()


@base.bootstrapped
@pytest.mark.asyncio
async def test_monitor(event_loop):
Expand Down