You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过OCI Python SDK解绑并重新分配VNIC的公网IP地址

使用OCI Python SDK解绑VNIC公网IPv4并重新分配临时公网IP

前提准备

  • 安装OCI Python SDK:pip install oci
  • 配置OCI认证:确保本地存在有效的OCI配置文件(默认路径~/.oci/config),或通过环境变量设置认证信息。

完整代码实现

import oci
from oci.exceptions import OCIError

def refresh_vnic_public_ip(vnic_id, config):
    # 初始化虚拟网络客户端
    core_client = oci.core.VirtualNetworkClient(config)
    
    try:
        # 1. 获取VNIC当前关联的公网IP信息
        vnic = core_client.get_vnic(vnic_id).data
        public_ip_id = vnic.public_ip_id
        
        if public_ip_id:
            # 解绑现有公网IP
            detach_details = oci.core.models.DetachPublicIpDetails(vnic_id=vnic_id)
            core_client.detach_public_ip(public_ip_id=public_ip_id, detach_public_ip_details=detach_details)
            print(f"已成功解绑公网IP: {public_ip_id}")
        else:
            print("该VNIC未关联任何公网IP,跳过解绑步骤")
        
        # 2. 分配新的临时(EPHEMERAL)公网IP
        assign_details = oci.core.models.AssignPublicIpDetails(
            vnic_id=vnic_id,
            public_ip_type="EPHEMERAL"
        )
        new_public_ip = core_client.assign_public_ip(assign_public_ip_details=assign_details).data
        print(f"已成功分配新临时公网IP: {new_public_ip.ip_address}")
        return new_public_ip
    
    except OCIError as e:
        print(f"操作失败: {e.message}")
        raise

# 主执行逻辑
if __name__ == "__main__":
    # 加载OCI配置(默认读取~/.oci/config)
    config = oci.config.from_file()
    # 替换为你的VNIC OCID
    target_vnic_id = "ocid1.vnic.oc1.xxxxx..."
    refresh_vnic_public_ip(target_vnic_id, config)

关键说明

  • 解绑公网IP:只有当VNIC已关联公网IP时才需要执行此步骤,代码中会先判断public_ip_id是否存在。
  • 临时公网IP类型:指定public_ip_type="EPHEMERAL",这种IP会在VNIC销毁时自动释放。
  • 异常处理:捕获OCIError可以处理权限不足、资源不存在等常见错误。

内容的提问来源于stack exchange,提问作者itsmii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:48:36