diff --git a/juju/client/connector.py b/juju/client/connector.py index a5998c6a..6f616152 100644 --- a/juju/client/connector.py +++ b/juju/client/connector.py @@ -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') @@ -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): diff --git a/juju/client/jujudata.py b/juju/client/jujudata.py index b34c64a8..4d74a254 100644 --- a/juju/client/jujudata.py +++ b/juju/client/jujudata.py @@ -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' @@ -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 diff --git a/juju/errors.py b/juju/errors.py index a246aaa9..e2d6e7e6 100644 --- a/juju/errors.py +++ b/juju/errors.py @@ -118,3 +118,7 @@ class JujuModelConfigError(JujuConfigError): class AbstractMethodError(Exception): pass + + +class ControllerNameNotFound(Exception): + pass