OpenStack image sharing between projects on Jetstream2: a tested cheat-sheet

jetstream2
openstack
Author

Andrea Zonca

Published

August 19, 2026

I recently needed to share a Magnum cluster node image with a colleague on a different Jetstream2 allocation. There are a few ways to do it and the documentation is confusing, so I tested every command live against Jetstream2 OpenStack (Image v2 API). Here is what actually works, with only commands verified live.

Context: two projects. I own the image; my colleague needs to see and boot it. The example image here is snapshot-image-name, replace with your own image id.

Option 2: shared visibility plus member (more steps, needs the recipient)

This is what “sharing” usually means, and it has an extra step that is easy to miss: the recipient must accept the membership.

As the owner:

openstack image set --shared <image-id>
openstack image add project <image-id> <recipient-project-id>

openstack image add project works as the owner, but it only creates a pending membership:

openstack image member list <image-id>

status = pending

Only the recipient can accept (the owner gets a 403 “You are not authorized to complete modify_member action”):

openstack image set --accept <image-id>

(replace image-id with the image you were shared)

If the image should no longer be shared:

openstack image remove project <image-id> <recipient-project-id>

The gotcha that started this post

My colleague ran openstack image set --shared <image-id> and told me to look. But the image never became visible to me: setting shared visibility alone does not create any membership. The missing steps were image add project, and then my image set --accept. Community visibility avoids both.

How to find your project id

openstack token issue -f value -c project_id

All commands above were tested live on Jetstream2 OpenStack (Image API v2, python-openstackclient 9.0.0). The owner-side commands work with a standard project user credential; the accept step must be run by the recipient project.