重构客户端实体模型¶
https://blueprints.launchpad.net/python-barbicanclient/+spec/client-refactor-models
当前客户端中的实体模型使用起来有些笨拙。此蓝图建议重构一些功能,以使 API 更加易用和一致。
问题描述¶
在 barbicanclient 中的实体模型应该被重构,以提供更符合 Python 风格的 API。此次重构将使现有的实体与最近批准的容器蓝图保持一致。 [1]
提议的变更¶
重构现有模型,为影响单个实体的操作提供在实体类内部的方法。这将允许仅影响单个实体的流程在无需引用相应的 EntityManager 子类的情况下完成。
应该重构 Secret 实体,以添加一个 store() 方法和一个 payload 属性
from barbicanclient import client
# Set up client connection
connection = client.Client(tenant_id="1", endpoint=ENDPOINT, insecure=True)
# Create a new Secret
my_secret = connection.secrets.Secret(name="My secret name",
payload="the secret sauce")
my_secret.store()
# Alternatively set Secret properties instead of passing args
my_secret = connection.secrets.Secret()
my_secret.name = "My secret name"
my_secret.payload = "the secret sauce"
my_secret.store()
类似地,Orders 应该允许构造函数同时接受所有参数,并可以直接设置属性。我们还应该添加一个 submit() 方法,以将订单提交到 API
from barbicanclient import client
# Set up client connection
connection = client.Client(tenant_id="1", endpoint=ENDPOINT, insecure=True)
# Create and submit a new Order
my_order = connection.orders.Order(
name="My Order",
payload_content_type="application/octet-stream"
algorithm="AES",
mode="CBC",
bit_length=256,
expiration=None
)
my_order.submit()
# Alternatively set the Order properties instead of passing args
my_order = connection.orders.Order()
my_order.name = "My Order"
my_order.payload_content_type = "application/octet-stream"
my_order.algorithm = "AES"
my_order.mode = "CBC"
my_order.bit_length = 256
my_order.expiration = None
my_order.submit()
仍然应该通过相应的 EntityManager 处理实体列表。但是,解密密钥的能力应该移动到 Secret 类,并从 SecretManager 中移除。
应该将从 EntityManager 检索实体(替换 get() 函数)的功能移动到 Entity 构造函数。例如
my_secret = connection.secrets.Secret(secret_ref=SECRET_REF)
my_order = connection.orders.Order(order_ref=ORDER_REF)
删除实体可以通过现有的 EntityManager delete(entity_ref) 或使用新的 Entity 函数 delete() 来完成。使用 Secret 的示例
# New method
my_secret = connection.secrets.Secret(secret_ref=SECRET_REF)
my_secret.delete()
# Old way still works
connection.secrets.delete(secret_ref=SECRET_REF)
备选方案¶
我们可以继续像当前一样使用这些对象。
另外请注意,一旦 Typed Orders 实现完成,就需要重新审视 Orders 功能。 [2]
https://specs.openstack.org/openstack/barbican-specs/specs/juno/api-orders-add-more-types.html
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知与审计影响¶
日志记录应该以与库的其余部分一致的方式进行。
其他最终用户影响¶
此更改需要重写 Secret 对象的使用方式,并且需要客户端库的新主要版本。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
蓝图草案:Douglas Mendizábal (redrobot) 实现:Adam Harwell (rm_work)
工作项¶
重构 Secret 实体
重构 Order 实体
依赖项¶
无
测试¶
测试应该与库中现有的测试保持一致。
文档影响¶
需要更新常见的工作流程,以提供有关如何使用重构类的示例。
参考资料¶
客户端中的容器 etherpad:https://etherpad.openstack.org/p/python-barbicanclient-containers 容器蓝图:https://specs.openstack.org/openstack/barbican-specs/specs/juno/client-add-containers.html