| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- package oracle
- import (
- "encoding/json"
- "fmt"
- "github.com/opencost/opencost/core/pkg/opencost"
- "github.com/opencost/opencost/pkg/cloud"
- "github.com/oracle/oci-go-sdk/v65/usageapi"
- )
- type UsageApiConfiguration struct {
- TenancyID string `json:"tenancyID"`
- Region string `json:"region"`
- Authorizer Authorizer `json:"authorizer"`
- }
- func (uac *UsageApiConfiguration) Validate() error {
- // Validate Authorizer
- if uac.Authorizer == nil {
- return fmt.Errorf("UsageApiConfiguration: missing Authorizer")
- }
- err := uac.Authorizer.Validate()
- if err != nil {
- return fmt.Errorf("UsageApiConfiguration: %s", err)
- }
- // Validate base properties
- if uac.TenancyID == "" {
- return fmt.Errorf("UsageApiConfiguration: missing tenancyID")
- }
- if uac.Region == "" {
- return fmt.Errorf("UsageApiConfiguration: missing region")
- }
- return nil
- }
- func (uac *UsageApiConfiguration) Equals(config cloud.Config) bool {
- if config == nil {
- return false
- }
- thatConfig, ok := config.(*UsageApiConfiguration)
- if !ok {
- return false
- }
- if uac.Authorizer != nil {
- if !uac.Authorizer.Equals(thatConfig.Authorizer) {
- return false
- }
- } else {
- if thatConfig.Authorizer != nil {
- return false
- }
- }
- if uac.TenancyID != thatConfig.TenancyID {
- return false
- }
- if uac.Region != thatConfig.Region {
- return false
- }
- return true
- }
- func (uac *UsageApiConfiguration) Sanitize() cloud.Config {
- return &UsageApiConfiguration{
- TenancyID: uac.TenancyID,
- Region: uac.Region,
- Authorizer: uac.Authorizer.Sanitize().(Authorizer),
- }
- }
- func (uac *UsageApiConfiguration) Key() string {
- return uac.TenancyID
- }
- func (uac *UsageApiConfiguration) Provider() string {
- return opencost.OracleProvider
- }
- func (uac *UsageApiConfiguration) GetUsageApiClient() (*usageapi.UsageapiClient, error) {
- configProvider, err := uac.Authorizer.CreateOCIConfig()
- if err != nil {
- return nil, fmt.Errorf("failed to create oci config: %s", err.Error())
- }
- client, err := usageapi.NewUsageapiClientWithConfigurationProvider(configProvider)
- if err != nil {
- return nil, fmt.Errorf("failed to create usage api client: %s", err.Error())
- }
- return &client, nil
- }
- func (uac *UsageApiConfiguration) UnmarshalJSON(b []byte) error {
- var f interface{}
- err := json.Unmarshal(b, &f)
- if err != nil {
- return err
- }
- fmap := f.(map[string]interface{})
- tenancyId, err := cloud.GetInterfaceValue[string](fmap, "tenancyID")
- if err != nil {
- return fmt.Errorf("UsageApiConfiguration: UnmarshalJSON: %w", err)
- }
- uac.TenancyID = tenancyId
- region, err := cloud.GetInterfaceValue[string](fmap, "region")
- if err != nil {
- return fmt.Errorf("UsageApiConfiguration: UnmarshalJSON: %w", err)
- }
- uac.Region = region
- authAny, ok := fmap["authorizer"]
- if !ok {
- return fmt.Errorf("UsageApiConfiguration: UnmarshalJSON: missing authorizer")
- }
- authorizer, err := cloud.AuthorizerFromInterface(authAny, SelectAuthorizerByType)
- if err != nil {
- return fmt.Errorf("UsageApiConfiguration: UnmarshalJSON: %w", err)
- }
- uac.Authorizer = authorizer
- return nil
- }
|