管理策略

策略类型可以被视为 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 参数指定排序选项,并可以使用 limitmarker 参数进行分页。

完整示例:管理策略

创建策略

创建策略时,您将提供一个字典,其中包含键和值,具体取决于引用的策略类型。

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.")