初始提交:OCI 面板后端(含 GenAI 网关一期)

This commit is contained in:
Wang Defa
2026-07-09 15:31:04 +08:00
commit b9a3e97e84
168 changed files with 31794 additions and 0 deletions
+196
View File
@@ -0,0 +1,196 @@
package service
import (
"context"
"fmt"
"oci-portal/internal/oci"
)
// Shapes 列出租户在目标区域可用的实例规格。
func (s *OciConfigService) Shapes(ctx context.Context, id uint, region, availabilityDomain string) ([]oci.ComputeShape, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return nil, err
}
return s.client.ListShapes(ctx, cred, region, availabilityDomain)
}
// Images 列出可用的实例镜像。
func (s *OciConfigService) Images(ctx context.Context, id uint, q oci.ImagesQuery) ([]oci.Image, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return nil, err
}
return s.client.ListImages(ctx, cred, q)
}
// Image 查询单个镜像。
func (s *OciConfigService) Image(ctx context.Context, id uint, region, imageID string) (oci.Image, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.Image{}, err
}
return s.client.GetImage(ctx, cred, region, imageID)
}
// VCNs 列出 VCNcompartmentID 为空表示租户根。
func (s *OciConfigService) VCNs(ctx context.Context, id uint, region, compartmentID string) ([]oci.VCN, error) {
cred, err := s.credentialsInCompartment(ctx, id, compartmentID)
if err != nil {
return nil, err
}
return s.client.ListVCNs(ctx, cred, region)
}
// CreateVCN 创建 VCNin.CompartmentID 为空时建在租户根。
func (s *OciConfigService) CreateVCN(ctx context.Context, id uint, in oci.CreateVCNInput) (oci.VCN, error) {
if in.DisplayName == "" || in.CidrBlock == "" {
return oci.VCN{}, fmt.Errorf("create vcn: displayName and cidrBlock are required")
}
cred, err := s.credentialsInCompartment(ctx, id, in.CompartmentID)
if err != nil {
return oci.VCN{}, err
}
return s.client.CreateVCN(ctx, cred, in)
}
// VCN 查询单个 VCN。
func (s *OciConfigService) VCN(ctx context.Context, id uint, region, vcnID string) (oci.VCN, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.VCN{}, err
}
return s.client.GetVCN(ctx, cred, region, vcnID)
}
// UpdateVCN 重命名 VCN。
func (s *OciConfigService) UpdateVCN(ctx context.Context, id uint, region, vcnID, displayName string) (oci.VCN, error) {
if displayName == "" {
return oci.VCN{}, fmt.Errorf("update vcn: displayName is required")
}
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.VCN{}, err
}
return s.client.UpdateVCN(ctx, cred, region, vcnID, displayName)
}
// DeleteVCN 删除 VCN。
func (s *OciConfigService) DeleteVCN(ctx context.Context, id uint, region, vcnID string) error {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return err
}
return s.client.DeleteVCN(ctx, cred, region, vcnID)
}
// EnableVCNIPv6 为 VCN 一键启用 IPv6,返回逐步执行报告。
func (s *OciConfigService) EnableVCNIPv6(ctx context.Context, id uint, region, vcnID string) ([]oci.IPv6Step, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return nil, err
}
return s.client.EnableVCNIPv6(ctx, cred, region, vcnID)
}
// Subnets 列出子网;vcnID 非空时按其所在 compartment 查询,
// 否则 compartmentID 为空表示租户根。
func (s *OciConfigService) Subnets(ctx context.Context, id uint, region, vcnID, compartmentID string) ([]oci.Subnet, error) {
cred, err := s.credentialsInCompartment(ctx, id, compartmentID)
if err != nil {
return nil, err
}
return s.client.ListSubnets(ctx, cred, region, vcnID)
}
// CreateSubnet 创建子网。
func (s *OciConfigService) CreateSubnet(ctx context.Context, id uint, in oci.CreateSubnetInput) (oci.Subnet, error) {
if in.VcnID == "" || in.DisplayName == "" || in.CidrBlock == "" {
return oci.Subnet{}, fmt.Errorf("create subnet: vcnId, displayName and cidrBlock are required")
}
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.Subnet{}, err
}
return s.client.CreateSubnet(ctx, cred, in)
}
// Subnet 查询单个子网。
func (s *OciConfigService) Subnet(ctx context.Context, id uint, region, subnetID string) (oci.Subnet, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.Subnet{}, err
}
return s.client.GetSubnet(ctx, cred, region, subnetID)
}
// UpdateSubnet 重命名子网。
func (s *OciConfigService) UpdateSubnet(ctx context.Context, id uint, region, subnetID, displayName string) (oci.Subnet, error) {
if displayName == "" {
return oci.Subnet{}, fmt.Errorf("update subnet: displayName is required")
}
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.Subnet{}, err
}
return s.client.UpdateSubnet(ctx, cred, region, subnetID, displayName)
}
// DeleteSubnet 删除子网。
func (s *OciConfigService) DeleteSubnet(ctx context.Context, id uint, region, subnetID string) error {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return err
}
return s.client.DeleteSubnet(ctx, cred, region, subnetID)
}
// SecurityLists 列出安全列表;vcnID 非空时按其所在 compartment 查询,
// 否则 compartmentID 为空表示租户根。
func (s *OciConfigService) SecurityLists(ctx context.Context, id uint, region, vcnID, compartmentID string) ([]oci.SecurityList, error) {
cred, err := s.credentialsInCompartment(ctx, id, compartmentID)
if err != nil {
return nil, err
}
return s.client.ListSecurityLists(ctx, cred, region, vcnID)
}
// CreateSecurityList 创建安全列表。
func (s *OciConfigService) CreateSecurityList(ctx context.Context, id uint, in oci.CreateSecurityListInput) (oci.SecurityList, error) {
if in.VcnID == "" || in.DisplayName == "" {
return oci.SecurityList{}, fmt.Errorf("create security list: vcnId and displayName are required")
}
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.SecurityList{}, err
}
return s.client.CreateSecurityList(ctx, cred, in)
}
// SecurityList 查询单个安全列表。
func (s *OciConfigService) SecurityList(ctx context.Context, id uint, region, securityListID string) (oci.SecurityList, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.SecurityList{}, err
}
return s.client.GetSecurityList(ctx, cred, region, securityListID)
}
// UpdateSecurityList 更新安全列表;规则字段一经提供即整体替换。
func (s *OciConfigService) UpdateSecurityList(ctx context.Context, id uint, securityListID string, in oci.UpdateSecurityListInput) (oci.SecurityList, error) {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return oci.SecurityList{}, err
}
return s.client.UpdateSecurityList(ctx, cred, securityListID, in)
}
// DeleteSecurityList 删除安全列表。
func (s *OciConfigService) DeleteSecurityList(ctx context.Context, id uint, region, securityListID string) error {
cred, err := s.credentialsByID(ctx, id)
if err != nil {
return err
}
return s.client.DeleteSecurityList(ctx, cred, region, securityListID)
}