Skip to content

Commit

Permalink
Remove dependency to juju cli for controller_name
Browse files Browse the repository at this point in the history
controllers.yaml is read for the controller_name after a connection is
established, and this creates a depends on the juju-cli to be
installed in the system, which is not required for pylibjuju.
  • Loading branch information
cderici committed Jan 17, 2024
1 parent beed55f commit 3786137
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 4 deletions.
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

0 comments on commit 3786137

Please sign in to comment.