Skip to content

LXDInstance.exists() can error if project doesn't exist in LXD 6.6 #856

Description

@jonathan-conder

Bug Description

When a project doesn't exist, lxc --project <project> list now fails instead of succeeding with no output. This causes downstream commands like *craft clean to fail sometimes in our CI.

To Reproduce

$ sudo snap remove --purge lxd
lxd removed
$ sudo snap install --revision 36020 lxd
lxd 6.5-ccdfb39 from Canonical✓ installed
$ uv run python -c 'from craft_providers.lxd import LXDInstance; LXDInstance(name="u1", project="p1").exists()'
$ sudo snap refresh --channel 6/stable lxd
lxd (6/stable) 6.6-3c9aa6d from Canonical✓ refreshed
$ uv run python -c 'from craft_providers.lxd import LXDInstance; LXDInstance(name="u1", project="p1").exists()'
Traceback (most recent call last):
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxc.py", line 917, in list
    proc = self._run_lxc(
           ^^^^^^^^^^^^^^
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxc.py", line 206, in _run_lxc
    return subprocess.run(
           ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['lxc', '--project', 'p1', 'list', 'local:', '--format=yaml']' returned non-zero exit status 1.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxd_instance.py", line 286, in exists
    return self._get_instance_information() is not None
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxd_instance.py", line 316, in _get_instance_information
    instances = self.lxc.list(project=self.project, remote=self.remote)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxc.py", line 921, in list
    raise LXDError(
craft_providers.lxd.errors.LXDError: Failed to list instances for project 'p1'.
* Command that failed: 'lxc --project p1 list local: --format=yaml'
* Command exit code: 1
* Command standard error output: 'Error: Failed to get project: Project not found\n'

part yaml

Relevant log output

Traceback (most recent call last):
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxc.py", line 917, in list
    proc = self._run_lxc(
           ^^^^^^^^^^^^^^
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxc.py", line 206, in _run_lxc
    return subprocess.run(
           ^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/subprocess.py", line 571, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['lxc', '--project', 'p1', 'list', 'local:', '--format=yaml']' returned non-zero exit status 1.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxd_instance.py", line 286, in exists
    return self._get_instance_information() is not None
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxd_instance.py", line 316, in _get_instance_information
    instances = self.lxc.list(project=self.project, remote=self.remote)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/jono/code/craft-providers/craft_providers/lxd/lxc.py", line 921, in list
    raise LXDError(
craft_providers.lxd.errors.LXDError: Failed to list instances for project 'p1'.
* Command that failed: 'lxc --project p1 list local: --format=yaml'
* Command exit code: 1
* Command standard error output: 'Error: Failed to get project: Project not found\n'

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions