feat: [CDE-699]: modify infra provider create resource api (#3600)

* feat: [CDE-697]: make cpu, memory and network as empty if nil
* feat: [CDE-699]: add comment
* feat: [CDE-699]: modify infra provider create resource api
main
Deepak Bhatt 2025-03-28 10:21:54 +00:00 committed by Harness
parent 93c3f324ce
commit d79d292d87
5 changed files with 56 additions and 12 deletions

View File

@ -39,7 +39,7 @@ type ResourceInput struct {
Memory *string `json:"memory" yaml:"memory"`
Disk *string `json:"disk" yaml:"disk"`
Network *string `json:"network" yaml:"network"`
Region []string `json:"region" yaml:"region"`
Region string `json:"region" yaml:"region"`
Metadata map[string]string `json:"metadata" yaml:"metadata"`
GatewayHost *string `json:"gateway_host" yaml:"gateway_host"`
GatewayPort *string `json:"gateway_port" yaml:"gateway_port"`

View File

@ -17,7 +17,6 @@ package infraprovider
import (
"context"
"fmt"
"strings"
"time"
apiauth "github.com/harness/gitness/app/api/auth"
@ -124,7 +123,7 @@ func (c *Controller) MapToResourceEntity(
Memory: res.Memory,
Disk: res.Disk,
Network: res.Network,
Region: strings.Join(res.Region, " "), // TODO fix
Region: res.Region,
Metadata: res.Metadata,
Created: now,
Updated: now,

View File

@ -19,7 +19,6 @@ import (
"errors"
"fmt"
"github.com/harness/gitness/infraprovider"
"github.com/harness/gitness/store"
"github.com/harness/gitness/types"
@ -47,10 +46,27 @@ func (c *Service) createMissingResources(
configID int64,
spaceID int64,
) error {
emptyStr := ""
for idx := range resources {
resource := &resources[idx]
resource.InfraProviderConfigID = configID
resource.SpaceID = spaceID
if resource.CPU == nil {
resource.CPU = &emptyStr
}
if resource.Memory == nil {
resource.Memory = &emptyStr
}
if resource.Network == nil {
resource.Network = &emptyStr
}
// updating metadata based on infra provider type
updatedMetadata, err := c.updateResourceMetadata(resource)
if err != nil {
return fmt.Errorf("creating missing infra resources: %w", err)
}
resource.Metadata = updatedMetadata
if err := c.validateResource(ctx, resource); err != nil {
return err
}
@ -66,6 +82,20 @@ func (c *Service) createMissingResources(
return nil
}
func (c *Service) updateResourceMetadata(resource *types.InfraProviderResource) (map[string]string, error) {
infraProvider, err := c.infraProviderFactory.GetInfraProvider(resource.InfraProviderType)
if err != nil {
return nil, fmt.Errorf("failed to fetch infra impl for type : %q %w", resource.InfraProviderType, err)
}
params, err := infraProvider.UpdateParams(toResourceParams(resource.Metadata))
if err != nil {
return nil, err
}
return toMetadata(params), nil
}
func (c *Service) validateResource(ctx context.Context, resource *types.InfraProviderResource) error {
infraProvider, err := c.infraProviderFactory.GetInfraProvider(resource.InfraProviderType)
if err != nil {
@ -79,7 +109,7 @@ func (c *Service) validateResource(ctx context.Context, resource *types.InfraPro
}
}
err = c.validateResourceParams(infraProvider, *resource)
err = infraProvider.ValidateParams(toResourceParams(resource.Metadata))
if err != nil {
return err
}
@ -87,16 +117,24 @@ func (c *Service) validateResource(ctx context.Context, resource *types.InfraPro
return err
}
func (c *Service) validateResourceParams(
infraProvider infraprovider.InfraProvider,
res types.InfraProviderResource,
) error {
infraResourceParams := make([]types.InfraProviderParameter, 0)
for key, value := range res.Metadata {
func toResourceParams(metadata map[string]string) []types.InfraProviderParameter {
var infraResourceParams []types.InfraProviderParameter
for key, value := range metadata {
infraResourceParams = append(infraResourceParams, types.InfraProviderParameter{
Name: key,
Value: value,
})
}
return infraProvider.ValidateParams(infraResourceParams)
return infraResourceParams
}
func toMetadata(params []types.InfraProviderParameter) map[string]string {
metadata := make(map[string]string)
for _, param := range params {
metadata[param.Name] = param.Value
}
return metadata
}

View File

@ -288,6 +288,10 @@ func (d DockerProvider) ValidateParams(_ []types.InfraProviderParameter) error {
return nil
}
func (d DockerProvider) UpdateParams(ip []types.InfraProviderParameter) ([]types.InfraProviderParameter, error) {
return ip, nil
}
// TemplateParams returns nil as no template params are used.
func (d DockerProvider) TemplateParams() []types.InfraProviderParameterSchema {
return nil

View File

@ -70,6 +70,9 @@ type InfraProvider interface {
// AvailableParams provides a schema to define the infrastructure.
AvailableParams() []types.InfraProviderParameterSchema
// UpdateParams updates input Parameters to add or modify given inputParameters.
UpdateParams(inputParameters []types.InfraProviderParameter) ([]types.InfraProviderParameter, error)
// ValidateParams validates the supplied params before defining the infrastructure resource .
ValidateParams(inputParameters []types.InfraProviderParameter) error