I have tested the new proposed workaround listed in comment #13 using the 2013.2 release (in devstack). The workaround is behaving correctly for me: [nkinder@localhost devstack]$ source openrc admin admin [nkinder@localhost devstack]$ glance image-create --property provider_foo=foo --name foo +-------------------------+--------------------------------------+ | Property | Value | +-------------------------+--------------------------------------+ | Property 'provider_foo' | foo | | checksum | None | | container_format | None | | created_at | 2014-05-31T00:04:44 | | deleted | False | | deleted_at | None | | disk_format | None | | id | a8fbd50a-5871-433d-9097-5d3320339d98 | | is_public | False | | min_disk | 0 | | min_ram | 0 | | name | foo | | owner | 6cad2594f37549798970593027b587b3 | | protected | False | | size | 0 | | status | queued | | updated_at | 2014-05-31T00:04:44 | | virtual_size | None | +-------------------------+--------------------------------------+ [nkinder@localhost devstack]$ source openrc demo demo [nkinder@localhost devstack]$ glance image-create --property provider_bar=bar --name bar 403 Forbidden Property 'provider_bar' is protected (HTTP 403) [nkinder@localhost devstack]$ glance image-create --property junk_bar=bar --name bar +---------------------+--------------------------------------+ | Property | Value | +---------------------+--------------------------------------+ | Property 'junk_bar' | bar | | checksum | None | | container_format | None | | created_at | 2014-05-31T00:05:46 | | deleted | False | | deleted_at | None | | disk_format | None | | id | 4ce3b1de-d5ad-46ac-acbe-2d0ed50d53c8 | | is_public | False | | min_disk | 0 | | min_ram | 0 | | name | bar | | owner | 6cad2594f37549798970593027b587b3 | | protected | False | | size | 0 | | status | queued | | updated_at | 2014-05-31T00:05:46 | | virtual_size | None | +---------------------+--------------------------------------+