From 155b0c915791e0c3277e0b95e03f1ed0ca11f944 Mon Sep 17 00:00:00 2001 From: Alvin Garcia Date: Wed, 18 Jul 2012 13:31:01 +0800 Subject: [PATCH] [openstack|image] Added update_members function --- lib/fog/openstack/image.rb | 1 + lib/fog/openstack/models/image/image.rb | 5 +++ .../requests/image/update_image_members.rb | 37 +++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 lib/fog/openstack/requests/image/update_image_members.rb diff --git a/lib/fog/openstack/image.rb b/lib/fog/openstack/image.rb index 3ae6460c6..5b034f99b 100644 --- a/lib/fog/openstack/image.rb +++ b/lib/fog/openstack/image.rb @@ -24,6 +24,7 @@ module Fog request :create_image request :update_image request :get_image_members + request :update_image_members request :get_shared_images request :add_member_to_image request :remove_member_from_image diff --git a/lib/fog/openstack/models/image/image.rb b/lib/fog/openstack/models/image/image.rb index 51d6847cf..8d805e619 100644 --- a/lib/fog/openstack/models/image/image.rb +++ b/lib/fog/openstack/models/image/image.rb @@ -69,6 +69,11 @@ module Fog connection.remove_member_from_image(self.id, member_id) end + def update_members(members) + requires :id + connection.update_image_members(self.id, members) + end + def members requires :id connection.get_image_members(self.id).body['members'] diff --git a/lib/fog/openstack/requests/image/update_image_members.rb b/lib/fog/openstack/requests/image/update_image_members.rb new file mode 100644 index 000000000..a7010fd61 --- /dev/null +++ b/lib/fog/openstack/requests/image/update_image_members.rb @@ -0,0 +1,37 @@ +module Fog + module Image + class OpenStack + class Real + def update_image_members(image_id, members) + # Sample members + # [ + # {'member_id' => 'tenant1', 'can_share' => true }, + # {'member_id' => 'tenant2', 'can_share' => false } + # ] + data = { 'memberships' => members } + + request( + :body => MultiJson.encode(data), + :expects => [200, 202], + :method => 'PUT', + :path => "images/#{image_id}/members" + ) + end + end # class Real + + class Mock + def update_image_members(image_id, members) + response = Excon::Response.new + response.status = [200, 202][rand(1)] + response.body = { + 'members' => [ + { 'member_id'=>'ff528b20431645ebb5fa4b0a71ca002f', 'can_share' => false }, + { 'member_id'=>'ff528b20431645ebb5fa4b0a71ca002f', 'can_share' => true } + ] + } + response + end + end # class Mock + end # class OpenStack + end # module Identity +end # module Fog