管理策略¶
策略类型可以被视为 Policy 对象的元类型。当 Cluster 服务启动时,会构建一个策略类型注册表。创建 Policy 对象时,您将在其 spec 属性中指定使用的策略类型。
列出策略¶
要查看策略列表
def list_policies(conn):
print("List Policies:")
for policy in conn.clustering.policies():
print(policy.to_dict())
for policy in conn.clustering.policies(sort='name:asc'):
print(policy.to_dict())
在列出策略时,您可以使用 sort 参数指定排序选项,并可以使用 limit 和 marker 参数进行分页。
完整示例:管理策略
创建策略¶
创建策略时,您将提供一个字典,其中包含键和值,具体取决于引用的策略类型。
def create_policy(conn):
print("Create Policy:")
attrs = {
'name': 'dp01',
'spec': {
'policy': 'senlin.policy.deletion',
'version': 1.0,
'properties': {
'criteria': 'oldest_first',
'destroy_after_deletion': True,
},
},
}
policy = conn.clustering.create_policy(attrs)
print(policy.to_dict())
可选地,您可以指定一个 metadata 关键字参数,其中包含一些键值对,这些键值对将与策略相关联。
完整示例:管理策略
查找策略¶
要根据其名称或 ID 查找策略
def find_policy(conn):
print("Find Policy:")
policy = conn.clustering.find_policy('dp01')
print(policy.to_dict())
完整示例:管理策略
获取策略¶
要根据其名称或 ID 获取策略
def get_policy(conn):
print("Get Policy:")
policy = conn.clustering.get_policy('dp01')
print(policy.to_dict())
完整示例:管理策略
更新策略¶
策略创建后,大部分属性都是不可变的。不过,您可以更新策略的 name 和/或 metadata。
def update_policy(conn):
print("Update Policy:")
policy = conn.clustering.update_policy('dp01', name='dp02')
print(policy.to_dict())
Cluster 服务不允许更新策略的 spec。实现此目的的唯一方法是创建新策略。
完整示例:管理策略
删除策略¶
策略在创建后可以被删除,前提是它没有被任何活动集群或节点引用。如果您尝试删除仍在使用的策略,将收到错误消息。
def delete_policy(conn):
print("Delete Policy:")
conn.clustering.delete_policy('dp01')
print("Policy deleted.")