2016-05-10 9 views
0

Ich habe öffentlich lesbar Openstack Objektspeicher-Container wie diese zu erstellen versucht: über meinen CodeWie erstellt man öffentlich lesbare Objektspeicher mit Ruby Openstack Gem?

os = OpenStack::Connection.create(...)  
container = os.create_container(container_name) 
container.set_metadata({'X-Container-Read' => '.r:*'}) 

Verwendung, die neu geschaffenen Container sind privat.

Was ist der richtige Weg, um Container mit öffentlichen Leseberechtigungen mit dem Edelstein Ruby Openstack zu erstellen?

Antwort

2

Sie können den folgenden Weg versuchen.

Sie können die create_container Methode

dann

class MyStack < OpenStack::Swift::Connection 
    def create_container(containername) 
    super 
    @connection.req("PUT", path, {:headers=>{"Content-Length"=>"0", "X-Container-Read" => ".r:*", "X-Container-Write" => ".r:*}}) 
    OpenStack::Swift::Container.new(self, containername) 
end 
end 

Diese "X-Container-Read" => ".r:*", "X-Container-Write" => ".r:*" Header eingestellte Wert müssen redfine zu.

oder

container.set_metadata({"X-Container-Read" => ".r:*", "X-Container-Write" => ".r:*"}) 
+0

Danke für die Antwort! Von den zwei alternativen Ansätzen, die Sie zur Verfügung gestellt haben, scheint nur der erste in meinem Fall zu funktionieren. Ich habe das OpenStack-Juwel geöffnet und den zusätzlichen Header "X-Container-Read" hinzugefügt und es hat funktioniert. –

0

Hier ist, was ich tun endete:

module PubliclyRedableContainerMonkeyPatch 
    def create_publicy_readable_container(containername) 
    raise OpenStack::Exception::InvalidArgument.new("Container name cannot contain '/'") if containername.match("/") 
    raise OpenStack::Exception::InvalidArgument.new("Container name is limited to 256 characters") if containername.length > 256 
    path = "/#{URI.encode(containername.to_s)}" 
    @connection.req("PUT", path, {:headers=>{"Content-Length"=>"0", "X-Container-Read" => ".r:*"}}) 
    OpenStack::Swift::Container.new(self, containername) 
    end 
end 

OpenStack::Swift::Connection.include PubliclyRedableContainerMonkeyPatch 

os = OpenStack::Connection.create(...)     
container = os.create_publicy_readable_container(container_name) 

WORKSFORME. :)