1
0
mirror of https://github.com/SAP/jenkins-library.git synced 2024-12-14 11:03:09 +02:00
sap-jenkins-library/pkg/cloudfoundry/Services.go
2022-11-08 08:47:38 +01:00

72 lines
2.0 KiB
Go

package cloudfoundry
import (
"bytes"
"fmt"
"strings"
"github.com/SAP/jenkins-library/pkg/command"
"github.com/SAP/jenkins-library/pkg/log"
)
// ReadServiceKey reads a cloud foundry service key based on provided service instance and service key name parameters
func (cf *CFUtils) ReadServiceKey(options ServiceKeyOptions) (string, error) {
_c := cf.Exec
if _c == nil {
_c = &command.Command{}
}
cfconfig := LoginOptions{
CfAPIEndpoint: options.CfAPIEndpoint,
CfOrg: options.CfOrg,
CfSpace: options.CfSpace,
Username: options.Username,
Password: options.Password,
}
err := cf.Login(cfconfig)
if err != nil {
// error while trying to run cf login
return "", fmt.Errorf("Login to Cloud Foundry failed: %w", err)
}
var serviceKeyBytes bytes.Buffer
_c.Stdout(&serviceKeyBytes)
// we are logged in --> read service key
log.Entry().WithField("cfServiceInstance", options.CfServiceInstance).WithField("cfServiceKey", options.CfServiceKeyName).Info("Read service key for service instance")
cfReadServiceKeyScript := []string{"service-key", options.CfServiceInstance, options.CfServiceKeyName}
err = _c.RunExecutable("cf", cfReadServiceKeyScript...)
if err != nil {
// error while reading service key
log.SetErrorCategory(log.ErrorConfiguration)
return "", fmt.Errorf("Reading service key failed: %w", err)
}
// parse and return service key
var serviceKeyJSON string
if len(serviceKeyBytes.String()) > 0 {
var lines []string = strings.Split(serviceKeyBytes.String(), "\n")
serviceKeyJSON = strings.Join(lines[2:], "")
}
err = cf.Logout()
if err != nil {
return serviceKeyJSON, fmt.Errorf("Logout of Cloud Foundry failed: %w", err)
}
return serviceKeyJSON, err
}
// ServiceKeyOptions for reading CF Service Key
type ServiceKeyOptions struct {
CfAPIEndpoint string
CfOrg string
CfSpace string
CfServiceInstance string
CfServiceKeyName string
Username string
Password string
}