1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-12 10:55:20 +02:00
sap-jenkins-library/cmd/abapEnvironmentCreateSystem.go
Daniel Mieg 8084ce1a94
Change to default cf create-service implementation (#4224)
* Change to default cf create-service

* Adapt test

* Adapt tests

* Remove comment

---------

Co-authored-by: tiloKo <70266685+tiloKo@users.noreply.github.com>
2023-03-08 09:44:00 +01:00

134 lines
4.7 KiB
Go

package cmd
import (
"encoding/json"
"fmt"
"github.com/SAP/jenkins-library/pkg/abaputils"
"github.com/SAP/jenkins-library/pkg/cloudfoundry"
"github.com/SAP/jenkins-library/pkg/command"
"github.com/SAP/jenkins-library/pkg/log"
"github.com/SAP/jenkins-library/pkg/telemetry"
"github.com/google/uuid"
)
func abapEnvironmentCreateSystem(config abapEnvironmentCreateSystemOptions, telemetryData *telemetry.CustomData) {
cf := cloudfoundry.CFUtils{Exec: &command.Command{}}
u := &googleUUID{}
// error situations should stop execution through log.Entry().Fatal() call which leads to an os.Exit(1) in the end
err := runAbapEnvironmentCreateSystem(&config, telemetryData, cf, u)
if err != nil {
log.Entry().WithError(err).Fatal("step execution failed")
}
}
func runAbapEnvironmentCreateSystem(config *abapEnvironmentCreateSystemOptions, telemetryData *telemetry.CustomData, cf cloudfoundry.CFUtils, u uuidGenerator) error {
if config.ServiceManifest != "" {
// if the manifest file is provided, it is directly passed through to cloudFoundryCreateService
createServiceConfig := cloudFoundryCreateServiceOptions{
CfAPIEndpoint: config.CfAPIEndpoint,
CfOrg: config.CfOrg,
CfSpace: config.CfSpace,
Username: config.Username,
Password: config.Password,
ServiceManifest: config.ServiceManifest,
}
return runCloudFoundryCreateService(&createServiceConfig, telemetryData, cf)
}
cfConfig, err := generateServiceParameterString(config)
if err != nil {
log.Entry().Fatalf("Could not generate parameter string")
}
// Calling cloudFoundryCreateService with the respective parameters
createServiceConfig := cloudFoundryCreateServiceOptions{
CfAPIEndpoint: config.CfAPIEndpoint,
CfOrg: config.CfOrg,
CfSpace: config.CfSpace,
Username: config.Username,
Password: config.Password,
CfService: config.CfService,
CfServicePlan: config.CfServicePlan,
CfServiceInstanceName: config.CfServiceInstance,
CfCreateServiceConfig: cfConfig,
CfAsync: false,
}
return runCloudFoundryCreateService(&createServiceConfig, telemetryData, cf)
}
func generateServiceParameterString(config *abapEnvironmentCreateSystemOptions) (string, error) {
addonProduct := ""
addonVersion := ""
parentSaaSAppName := ""
if config.AddonDescriptorFileName != "" && config.IncludeAddon {
descriptor, err := abaputils.ReadAddonDescriptor(config.AddonDescriptorFileName)
if err != nil {
log.SetErrorCategory(log.ErrorConfiguration)
return "", fmt.Errorf("Cloud not read addonProduct and addonVersion from %s: %w", config.AddonDescriptorFileName, err)
}
addonProduct = descriptor.AddonProduct
addonVersion = descriptor.AddonVersionYAML
parentSaaSAppName = "addon_test"
}
params := abapSystemParameters{
AdminEmail: config.AbapSystemAdminEmail,
Description: config.AbapSystemDescription,
IsDevelopmentAllowed: &config.AbapSystemIsDevelopmentAllowed,
SapSystemName: config.AbapSystemID,
SizeOfPersistence: config.AbapSystemSizeOfPersistence,
SizeOfRuntime: config.AbapSystemSizeOfRuntime,
AddonProductName: addonProduct,
AddonProductVersion: addonVersion,
ParentSaaSAppName: parentSaaSAppName,
}
serviceParameters, err := json.Marshal(params)
serviceParametersString := string(serviceParameters)
log.Entry().Debugf("Service Parameters: %s", serviceParametersString)
if err != nil {
log.SetErrorCategory(log.ErrorConfiguration)
return "", fmt.Errorf("Could not generate parameter string for the cloud foundry cli: %w", err)
}
return serviceParametersString, nil
}
type abapSystemParameters struct {
AdminEmail string `json:"admin_email,omitempty"`
Description string `json:"description,omitempty"`
IsDevelopmentAllowed *bool `json:"is_development_allowed,omitempty"`
SapSystemName string `json:"sapsystemname,omitempty"`
SizeOfPersistence int `json:"size_of_persistence,omitempty"`
SizeOfRuntime int `json:"size_of_runtime,omitempty"`
AddonProductName string `json:"addon_product_name,omitempty"`
AddonProductVersion string `json:"addon_product_version,omitempty"`
ParentSaaSAppName string `json:"parent_saas_appname,omitempty"`
}
type serviceManifest struct {
CreateServices []Service `json:"create-services"`
}
// Service struct for creating a cloud foundry service
type Service struct {
Name string `json:"name"`
Broker string `json:"broker"`
Plan string `json:"plan"`
Parameters string `json:"parameters,omitempty"`
}
type uuidGenerator interface {
getUUID() string
}
type googleUUID struct {
}
func (u *googleUUID) getUUID() string {
return uuid.New().String()
}