197 lines
6.7 KiB
Go
197 lines
6.7 KiB
Go
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)
|
||
}
|