2016-05-10 3 views
0

私はこのような公に読めるOpenStackのオブジェクトストアコンテナを作成しようとしました:ruby​​ openstack gemを使って一般に読めるオブジェクトストアコンテナを作成する方法は?

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

を上記の私のコードを使用して、新しく作成されたコンテナはプライベートです。

ruby​​ openstack gemを使用してパブリック読み取り権限を持つコンテナを作成する正しい方法は何ですか?

答えて

2

次のように試すことができます。

あなたは

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 

に、あなたが設定する必要があり、これら"X-Container-Read" => ".r:*", "X-Container-Write" => ".r:*"ヘッダー値をcreate_container方法

をredfineすることができます。

または

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

お返事ありがとうございます! あなたが提供した2つの代替アプローチから、最初のものだけが私の場合に機能するようです。私はOpenStackの宝石を開き、余分なヘッダー "X-Container-Read"を追加しました。 –

0

は、ここに私がやってしまったものです:

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。 :)

関連する問題