import { AbstractClient } from "../../../common/abstract_client";
import { ClientConfig } from "../../../common/interface";
import { DescribeClusterInstancesResponse, DescribeHealthCheckPolicyBindingsRequest, DescribeGPUInfoResponse, DescribeClusterMachinesResponse, DeleteClusterMachinesRequest, RebootMachinesRequest, CreateNodePoolRequest, DescribeHealthCheckPolicyBindingsResponse, DescribeNodePoolsRequest, ModifyHealthCheckPolicyResponse, StopMachinesResponse, DescribeClustersRequest, CreateHealthCheckPolicyRequest, DescribeZoneInstanceConfigInfosResponse, StartMachinesRequest, ModifyNodePoolRequest, ModifyClusterMachineResponse, SetMachineLoginRequest, ModifyNodePoolResponse, DescribeHealthCheckTemplateRequest, DescribeClustersResponse, CreateNodePoolResponse, ModifyHealthCheckPolicyRequest, StartMachinesResponse, DescribeNodePoolsElasticityStrengthResponse, DeleteClusterMachinesResponse, DeleteNodePoolResponse, DescribeClusterInstancesRequest, DeleteHealthCheckPolicyResponse, DescribeGPUInfoRequest, DeleteNodePoolRequest, SetMachineLoginResponse, DescribeZoneInstanceConfigInfosRequest, DescribeNodePoolsElasticityStrengthRequest, DescribeClusterMachinesRequest, DeleteHealthCheckPolicyRequest, DescribeNodePoolsResponse, ScaleNodePoolResponse, ModifyClusterMachineRequest, DescribeHealthCheckPoliciesResponse, RebootMachinesResponse, StopMachinesRequest, DescribeHealthCheckPoliciesRequest, DescribeHealthCheckTemplateResponse, ScaleNodePoolRequest, CreateHealthCheckPolicyResponse } from "./tke_models";
/**
 * tke client
 * @class
 */
export declare class Client extends AbstractClient {
    constructor(clientConfig: ClientConfig);
    /**
     * 设置是否开启节点登录
     */
    SetMachineLogin(req: SetMachineLoginRequest, cb?: (error: string, rep: SetMachineLoginResponse) => void): Promise<SetMachineLoginResponse>;
    /**
     * 删除 TKE 节点池
     */
    DeleteNodePool(req: DeleteNodePoolRequest, cb?: (error: string, rep: DeleteNodePoolResponse) => void): Promise<DeleteNodePoolResponse>;
    /**
     * 查询健康检测策略
     */
    DescribeHealthCheckPolicies(req: DescribeHealthCheckPoliciesRequest, cb?: (error: string, rep: DescribeHealthCheckPoliciesResponse) => void): Promise<DescribeHealthCheckPoliciesResponse>;
    /**
     * 本接口 (StartMachines) 用于启动一个或多个原生节点实例。

只有状态为 Stopped 的实例才可以进行此操作。
接口调用成功后，等待一分钟左右，实例会进入 Running 状态。
支持批量操作。每次请求批量实例的上限为100。
本接口为同步接口，启动实例请求发送成功后会返回一个RequestId，此时操作并未立即完成。实例操作结果可以通过调用 DescribeClusterInstances 接口查询，如果实例的状态为 Running，则代表启动实例操作成功。
     */
    StartMachines(req: StartMachinesRequest, cb?: (error: string, rep: StartMachinesResponse) => void): Promise<StartMachinesResponse>;
    /**
     * **通过 CAM 策略强制节点池安全配置**

创建原生节点池（`CreateNodePool`）接口已接入 CAM 条件鉴权，会根据请求参数计算出一组**条件键（Condition Key）**并传入 CAM 鉴权。您可以在 CAM/SCP 策略中基于这些条件键配置 `deny` 规则，从而强制约束节点池的安全配置（如必须开启磁盘加密、安全加固等）。

**支持的条件键**

| 条件键 | 含义 | 取值 | 取值判定说明 |
|--------|------|------|-------------|
| `tke:NodePoolType` | 节点池类型 | `Native` / `External` | 取请求的节点池类型，未指定时默认为 `Native` |
| `tke:SystemDiskEncrypted` | 系统盘是否加密 | `true` / `false` | 系统盘加密属性为 `ENCRYPT`（大小写不敏感）时为 `true`，否则为 `false` |
| `tke:AllDataDisksEncrypted` | 所有数据盘是否都已加密 | `true` / `false` | 全部数据盘加密属性均为 `ENCRYPT` 时为 `true`；未配置数据盘时也为 `true`；只要有任一数据盘未加密即为 `false` |
| `tke:SecurityAgentEnabled` | 是否开启安全加固（Security Agent） | `true` / `false` | 开启安全加固时为 `true`，否则为 `false` |

> 说明：所有条件键的取值均为字符串 `"true"` / `"false"`，请在策略中使用字符串形式匹配。

**使用方式**

在 CAM 策略中使用 `bool_equal` 匹配条件键值为 `"false"`，配合 `effect: deny`，即可实现"未满足安全配置则拒绝创建节点池"的强制约束。

**示例一：强制开启安全加固**

创建节点池时若未开启安全加固（`tke:SecurityAgentEnabled = "false"`），则拒绝。

```json
{
    "version": "2.0",
    "statement": [
        {
            "effect": "deny",
            "action": ["tke:CreateNodePool"],
            "resource": ["*"],
            "condition": {
                "bool_equal": {
                    "tke:SecurityAgentEnabled": "false"
                }
            }
        }
    ]
}
```

**示例二：强制数据盘加密**

创建节点池时若存在未加密的数据盘（`tke:AllDataDisksEncrypted = "false"`），则拒绝。

```json
{
    "version": "2.0",
    "statement": [
        {
            "effect": "deny",
            "action": ["tke:CreateNodePool"],
            "resource": ["*"],
            "condition": {
                "bool_equal": {
                    "tke:AllDataDisksEncrypted": "false"
                }
            }
        }
    ]
}
```

**示例三：强制系统盘加密**

创建节点池时若系统盘未加密（`tke:SystemDiskEncrypted = "false"`），则拒绝。

```json
{
    "version": "2.0",
    "statement": [
        {
            "effect": "deny",
            "action": ["tke:CreateNodePool"],
            "resource": ["*"],
            "condition": {
                "bool_equal": {
                    "tke:SystemDiskEncrypted": "false"
                }
            }
        }
    ]
}
```

**注意事项**

- 上述条件键在**未配置任何 CAM 策略**时不会影响节点池创建，仅在您显式配置了对应 `deny` 策略时才生效。
- 如需同时强制多项安全配置，必须在同一策略的 `statement` 中配置多条 `deny` 规则，不能将多个条件键写入同一条 `condition`。
- `tke:AllDataDisksEncrypted` 在**无数据盘**场景下取值为 `true`（不存在未加密的数据盘），因此仅约束"已配置的数据盘必须加密"，不会强制要求必须挂载数据盘。
     */
    CreateNodePool(req: CreateNodePoolRequest, cb?: (error: string, rep: CreateNodePoolResponse) => void): Promise<CreateNodePoolResponse>;
    /**
     * 查询健康检测策略绑定关系
     */
    DescribeHealthCheckPolicyBindings(req: DescribeHealthCheckPolicyBindingsRequest, cb?: (error: string, rep: DescribeHealthCheckPolicyBindingsResponse) => void): Promise<DescribeHealthCheckPolicyBindingsResponse>;
    /**
     * 查询健康检测策略模板
     */
    DescribeHealthCheckTemplate(req?: DescribeHealthCheckTemplateRequest, cb?: (error: string, rep: DescribeHealthCheckTemplateResponse) => void): Promise<DescribeHealthCheckTemplateResponse>;
    /**
     * 删除原生节点池节点
     */
    DeleteClusterMachines(req: DeleteClusterMachinesRequest, cb?: (error: string, rep: DeleteClusterMachinesResponse) => void): Promise<DeleteClusterMachinesResponse>;
    /**
     * 设置 TKE 节点池期望节点数
     */
    ScaleNodePool(req: ScaleNodePoolRequest, cb?: (error: string, rep: ScaleNodePoolResponse) => void): Promise<ScaleNodePoolResponse>;
    /**
     * 查询集群列表
     */
    DescribeClusters(req: DescribeClustersRequest, cb?: (error: string, rep: DescribeClustersResponse) => void): Promise<DescribeClustersResponse>;
    /**
     * 修改原生节点
     */
    ModifyClusterMachine(req: ModifyClusterMachineRequest, cb?: (error: string, rep: ModifyClusterMachineResponse) => void): Promise<ModifyClusterMachineResponse>;
    /**
     * 修改健康检测策略
     */
    ModifyHealthCheckPolicy(req: ModifyHealthCheckPolicyRequest, cb?: (error: string, rep: ModifyHealthCheckPolicyResponse) => void): Promise<ModifyHealthCheckPolicyResponse>;
    /**
     * 查询托原生点列表
     */
    DescribeClusterMachines(req: DescribeClusterMachinesRequest, cb?: (error: string, rep: DescribeClusterMachinesResponse) => void): Promise<DescribeClusterMachinesResponse>;
    /**
     * 重启原生节点实例
     */
    RebootMachines(req: RebootMachinesRequest, cb?: (error: string, rep: RebootMachinesResponse) => void): Promise<RebootMachinesResponse>;
    /**
     * 删除健康检测策略
     */
    DeleteHealthCheckPolicy(req: DeleteHealthCheckPolicyRequest, cb?: (error: string, rep: DeleteHealthCheckPolicyResponse) => void): Promise<DeleteHealthCheckPolicyResponse>;
    /**
     * 请求该接口，会返回所有适配该机型和操作系统组合的gpu驱动版本
     */
    DescribeGPUInfo(req: DescribeGPUInfoRequest, cb?: (error: string, rep: DescribeGPUInfoResponse) => void): Promise<DescribeGPUInfoResponse>;
    /**
     * 查询集群下节点实例信息
     */
    DescribeClusterInstances(req: DescribeClusterInstancesRequest, cb?: (error: string, rep: DescribeClusterInstancesResponse) => void): Promise<DescribeClusterInstancesResponse>;
    /**
     * 查询原生节点机型配置
     */
    DescribeZoneInstanceConfigInfos(req: DescribeZoneInstanceConfigInfosRequest, cb?: (error: string, rep: DescribeZoneInstanceConfigInfosResponse) => void): Promise<DescribeZoneInstanceConfigInfosResponse>;
    /**
     * 查询 TKE 节点池列表
     */
    DescribeNodePools(req: DescribeNodePoolsRequest, cb?: (error: string, rep: DescribeNodePoolsResponse) => void): Promise<DescribeNodePoolsResponse>;
    /**
     * 更新 TKE 节点池
     */
    ModifyNodePool(req: ModifyNodePoolRequest, cb?: (error: string, rep: ModifyNodePoolResponse) => void): Promise<ModifyNodePoolResponse>;
    /**
     * 查询节点池健康度相关信息
     */
    DescribeNodePoolsElasticityStrength(req?: DescribeNodePoolsElasticityStrengthRequest, cb?: (error: string, rep: DescribeNodePoolsElasticityStrengthResponse) => void): Promise<DescribeNodePoolsElasticityStrengthResponse>;
    /**
     * 本接口 (StopMachines) 用于关闭一个或多个原生节点实例。

只有状态为 Running 的实例才可以进行此操作。
接口调用成功时，实例会进入 Stopping 状态；关闭实例成功时，实例会进入 Stopped 状态。
支持强制关闭。强制关机的效果等同于关闭物理计算机的电源开关。强制关机可能会导致数据丢失或文件系统损坏，请仅在服务器不能正常关机时使用。
支持批量操作。每次请求批量实例的上限为 100。
本接口为同步接口，关闭实例请求发送成功后会返回一个RequestId，此时操作并未立即完成。实例操作结果可以通过调用 DescribeClusterInstances 接口查询，如果实例的状态为stopped_with_charging，则代表关闭实例操作成功。
     */
    StopMachines(req: StopMachinesRequest, cb?: (error: string, rep: StopMachinesResponse) => void): Promise<StopMachinesResponse>;
    /**
     * 创建健康检测策略
     */
    CreateHealthCheckPolicy(req: CreateHealthCheckPolicyRequest, cb?: (error: string, rep: CreateHealthCheckPolicyResponse) => void): Promise<CreateHealthCheckPolicyResponse>;
}
