初始提交:OCI 面板后端(含 GenAI 网关一期)
This commit is contained in:
@@ -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 列出 VCN;compartmentID 为空表示租户根。
|
||||
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 创建 VCN;in.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)
|
||||
}
|
||||
Reference in New Issue
Block a user