If you are adventurous, and have some familiarity with ruby + bundler, and bolt, you can try this.
git clone git@github.com:dontlaugh/bolt.git
cd bolt
git checkout 2311_lxd_transport
bundle install
bundle binstubs bolt --path=~/bin # if ~/bin is on your PATH
switch to your desired remote. (I will allow targeting multiple remotes from inventory at some point).
Example bolt inventory with some container targets, configured with lxd transport, under a single group
# my remote is called "infra"
targets:
# containers
- name: cli
uri: infra
- name: edge
uri: infra
- name: gm-control
uri: infra
- name: gm-control-api
uri: infra
- name: svc
uri: infra
groups:
- name: containers
config:
transport: lxd
targets:
- cli
- edge
- gm-control
- gm-control-api
- svc
example command:
$ bolt command run -t containers 'uptime'
Finished on svc:
STDOUT:
19:54:05 up 4 days, 18:35, 0 users, load average: 0.01, 0.05, 0.00
Finished on gm-control:
STDOUT:
19:54:05 up 4 days, 18:36, 0 users, load average: 0.01, 0.05, 0.00
Finished on gm-control-api:
STDOUT:
19:54:06 up 4 days, 18:36, 0 users, load average: 0.00, 0.00, 0.00
Finished on cli:
STDOUT:
19:54:06 up 4 days, 18:35, 0 users, load average: 0.00, 0.00, 0.00
Finished on edge:
STDOUT:
19:54:06 up 4 days, 18:35, 0 users, load average: 0.00, 0.00, 0.00
Successful on 5 targets: cli,edge,gm-control,gm-control-api,svc
Ran on 5 targets in 2.63 sec
Unfortunately, “uri” right now doesn’t really configure anything. I intend to make it such that it can address the container like this <remote>:<container>
, in the typical lxc fashion. This should allow setting arbitrary target names in bolt that do not necessarily have to match the lxd container name proper.