如何使用 ruby openstack gem 创建公开可读的对象存储容器?

How to create publicly readable object store containers with ruby openstack gem?

我试过创建 public 可读的 openstack 对象存储容器,如下所示:

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

使用我上面的代码,新创建的容器是私有的。

使用 ruby openstack gem 创建具有 public 读取权限的容器的正确方法是什么?

您可以尝试以下方式

您可以重新定义 create_container 方法

然后

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:*" header值你需要设置。

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

这是我最后做的:

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)

工作方式。 :)