2019-12-05 15:22:38 +02:00
package cmd
import (
2020-01-31 15:06:08 +02:00
"fmt"
2019-12-05 15:22:38 +02:00
"os"
2020-01-31 15:06:08 +02:00
"time"
2019-12-05 15:22:38 +02:00
"github.com/SAP/jenkins-library/pkg/config"
"github.com/SAP/jenkins-library/pkg/log"
2020-01-29 14:17:54 +02:00
"github.com/SAP/jenkins-library/pkg/telemetry"
2019-12-05 15:22:38 +02:00
"github.com/spf13/cobra"
)
type xsDeployOptions struct {
DeployOpts string ` json:"deployOpts,omitempty" `
OperationIDLogPattern string ` json:"operationIdLogPattern,omitempty" `
MtaPath string ` json:"mtaPath,omitempty" `
Action string ` json:"action,omitempty" `
Mode string ` json:"mode,omitempty" `
OperationID string ` json:"operationId,omitempty" `
APIURL string ` json:"apiUrl,omitempty" `
User string ` json:"user,omitempty" `
Password string ` json:"password,omitempty" `
Org string ` json:"org,omitempty" `
Space string ` json:"space,omitempty" `
LoginOpts string ` json:"loginOpts,omitempty" `
XsSessionFile string ` json:"xsSessionFile,omitempty" `
}
// XsDeployCommand Performs xs deployment
func XsDeployCommand ( ) * cobra . Command {
metadata := xsDeployMetadata ( )
2020-02-04 11:46:43 +02:00
var stepConfig xsDeployOptions
2020-01-31 15:06:08 +02:00
var startTime time . Time
2020-01-15 13:16:25 +02:00
2019-12-05 15:22:38 +02:00
var createXsDeployCmd = & cobra . Command {
Use : "xsDeploy" ,
Short : "Performs xs deployment" ,
Long : ` Performs xs deployment ` ,
PreRunE : func ( cmd * cobra . Command , args [ ] string ) error {
2020-01-31 15:06:08 +02:00
startTime = time . Now ( )
2019-12-05 15:22:38 +02:00
log . SetStepName ( "xsDeploy" )
log . SetVerbose ( GeneralConfig . Verbose )
2020-02-04 11:46:43 +02:00
return PrepareConfig ( cmd , & metadata , "xsDeploy" , & stepConfig , config . OpenPiperFile )
2019-12-05 15:22:38 +02:00
} ,
2020-02-04 11:46:43 +02:00
Run : func ( cmd * cobra . Command , args [ ] string ) {
2020-01-31 15:06:08 +02:00
telemetryData := telemetry . CustomData { }
telemetryData . ErrorCode = "1"
handler := func ( ) {
telemetryData . Duration = fmt . Sprintf ( "%v" , time . Since ( startTime ) . Milliseconds ( ) )
telemetry . Send ( & telemetryData )
}
log . DeferExitHandler ( handler )
defer handler ( )
2020-01-29 14:17:54 +02:00
telemetry . Initialize ( GeneralConfig . NoTelemetry , "xsDeploy" )
2020-02-04 11:46:43 +02:00
xsDeploy ( stepConfig , & telemetryData )
2020-01-31 15:06:08 +02:00
telemetryData . ErrorCode = "0"
2019-12-05 15:22:38 +02:00
} ,
}
2020-02-04 11:46:43 +02:00
addXsDeployFlags ( createXsDeployCmd , & stepConfig )
2019-12-05 15:22:38 +02:00
return createXsDeployCmd
}
2020-02-04 11:46:43 +02:00
func addXsDeployFlags ( cmd * cobra . Command , stepConfig * xsDeployOptions ) {
cmd . Flags ( ) . StringVar ( & stepConfig . DeployOpts , "deployOpts" , os . Getenv ( "PIPER_deployOpts" ) , "Additional options appended to the deploy command. Only needed for sophisticated cases. When provided it is the duty of the provider to ensure proper quoting / escaping." )
cmd . Flags ( ) . StringVar ( & stepConfig . OperationIDLogPattern , "operationIdLogPattern" , "^.*xs bg-deploy -i (.*) -a.*$" , "Regex pattern for retrieving the ID of the operation from the xs log." )
cmd . Flags ( ) . StringVar ( & stepConfig . MtaPath , "mtaPath" , os . Getenv ( "PIPER_mtaPath" ) , "Path to deployable" )
cmd . Flags ( ) . StringVar ( & stepConfig . Action , "action" , "NONE" , "Used for finalizing the blue-green deployment." )
cmd . Flags ( ) . StringVar ( & stepConfig . Mode , "mode" , "DEPLOY" , "Controls if there is a standard deployment or a blue green deployment. Values: 'DEPLOY', 'BG_DEPLOY'" )
cmd . Flags ( ) . StringVar ( & stepConfig . OperationID , "operationId" , os . Getenv ( "PIPER_operationId" ) , "The operation ID. Used in case of bg-deploy in order to resume or abort a previously started deployment." )
cmd . Flags ( ) . StringVar ( & stepConfig . APIURL , "apiUrl" , os . Getenv ( "PIPER_apiUrl" ) , "The api url (e.g. https://example.org:12345" )
cmd . Flags ( ) . StringVar ( & stepConfig . User , "user" , os . Getenv ( "PIPER_user" ) , "User" )
cmd . Flags ( ) . StringVar ( & stepConfig . Password , "password" , os . Getenv ( "PIPER_password" ) , "Password" )
cmd . Flags ( ) . StringVar ( & stepConfig . Org , "org" , os . Getenv ( "PIPER_org" ) , "The org" )
cmd . Flags ( ) . StringVar ( & stepConfig . Space , "space" , os . Getenv ( "PIPER_space" ) , "The space" )
cmd . Flags ( ) . StringVar ( & stepConfig . LoginOpts , "loginOpts" , os . Getenv ( "PIPER_loginOpts" ) , "Additional options appended to the login command. Only needed for sophisticated cases. When provided it is the duty of the provider to ensure proper quoting / escaping." )
cmd . Flags ( ) . StringVar ( & stepConfig . XsSessionFile , "xsSessionFile" , os . Getenv ( "PIPER_xsSessionFile" ) , "The file keeping the xs session." )
2019-12-05 15:22:38 +02:00
cmd . MarkFlagRequired ( "mtaPath" )
cmd . MarkFlagRequired ( "mode" )
cmd . MarkFlagRequired ( "apiUrl" )
cmd . MarkFlagRequired ( "user" )
cmd . MarkFlagRequired ( "password" )
cmd . MarkFlagRequired ( "org" )
cmd . MarkFlagRequired ( "space" )
cmd . MarkFlagRequired ( "loginOpts" )
}
// retrieve step metadata
func xsDeployMetadata ( ) config . StepData {
var theMetaData = config . StepData {
Spec : config . StepSpec {
Inputs : config . StepInputs {
Parameters : [ ] config . StepParameters {
{
2020-01-15 13:16:25 +02:00
Name : "deployOpts" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "operationIdLogPattern" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { { Name : "deployIdLogPattern" } } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "mtaPath" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "action" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "mode" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "operationId" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "apiUrl" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "user" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "password" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "org" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "space" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "loginOpts" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
{
2020-01-15 13:16:25 +02:00
Name : "xsSessionFile" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
2019-12-05 15:22:38 +02:00
} ,
} ,
} ,
} ,
}
return theMetaData
}