初始提交:OCI 面板后端(含 GenAI 网关一期)
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package oci
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/oracle/oci-go-sdk/v65/common"
|
||||
"github.com/oracle/oci-go-sdk/v65/identity"
|
||||
)
|
||||
|
||||
// Compartment 是租户下的一个 compartment(不含租户根本身)。
|
||||
type Compartment struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description"`
|
||||
ParentID string `json:"parentId"`
|
||||
LifecycleState string `json:"lifecycleState"`
|
||||
TimeCreated *time.Time `json:"timeCreated"`
|
||||
}
|
||||
|
||||
// ListCompartments 实现 Client:递归列出租户下全部 ACTIVE compartment。
|
||||
func (c *RealClient) ListCompartments(ctx context.Context, cred Credentials) ([]Compartment, error) {
|
||||
ic, err := identity.NewIdentityClientWithConfigurationProvider(provider(cred))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("new identity client: %w", err)
|
||||
}
|
||||
applyProxy(&ic.BaseClient, cred)
|
||||
var items []Compartment
|
||||
var page *string
|
||||
for {
|
||||
resp, err := ic.ListCompartments(ctx, identity.ListCompartmentsRequest{
|
||||
CompartmentId: &cred.TenancyOCID,
|
||||
CompartmentIdInSubtree: common.Bool(true),
|
||||
AccessLevel: identity.ListCompartmentsAccessLevelAny,
|
||||
LifecycleState: identity.CompartmentLifecycleStateActive,
|
||||
Page: page,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("list compartments: %w", err)
|
||||
}
|
||||
for _, item := range resp.Items {
|
||||
items = append(items, toCompartment(item))
|
||||
}
|
||||
if resp.OpcNextPage == nil {
|
||||
return orEmpty(items), nil
|
||||
}
|
||||
page = resp.OpcNextPage
|
||||
}
|
||||
}
|
||||
|
||||
func toCompartment(item identity.Compartment) Compartment {
|
||||
out := Compartment{
|
||||
ID: deref(item.Id),
|
||||
Name: deref(item.Name),
|
||||
Description: deref(item.Description),
|
||||
ParentID: deref(item.CompartmentId),
|
||||
LifecycleState: string(item.LifecycleState),
|
||||
}
|
||||
if item.TimeCreated != nil {
|
||||
out.TimeCreated = &item.TimeCreated.Time
|
||||
}
|
||||
return out
|
||||
}
|
||||
Reference in New Issue
Block a user