如何使用 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)
工作方式。 :)
我试过创建 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)
工作方式。 :)