2020-02-21 12:56:09 +01:00
// Code generated by piper's step-generator. DO NOT EDIT.
2019-12-05 14:22:38 +01:00
package cmd
import (
2020-01-31 14:06:08 +01:00
"fmt"
2019-12-05 14:22:38 +01:00
"os"
2020-02-28 11:01:09 +01:00
"path/filepath"
2020-01-31 14:06:08 +01:00
"time"
2019-12-05 14:22:38 +01:00
"github.com/SAP/jenkins-library/pkg/config"
"github.com/SAP/jenkins-library/pkg/log"
2020-02-28 11:01:09 +01:00
"github.com/SAP/jenkins-library/pkg/piperenv"
2020-01-29 13:17:54 +01:00
"github.com/SAP/jenkins-library/pkg/telemetry"
2019-12-05 14:22:38 +01: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"`
2020-09-16 11:33:03 +02:00
Username string `json:"username,omitempty"`
2019-12-05 14:22:38 +01:00
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"`
}
2020-02-28 11:01:09 +01:00
type xsDeployCommonPipelineEnvironment struct {
operationID string
}
func ( p * xsDeployCommonPipelineEnvironment ) persist ( path , resourceName string ) {
content := [] struct {
category string
name string
value string
}{
{ category : "" , name : "operationId" , value : p . operationID },
}
errCount := 0
for _ , param := range content {
err := piperenv . SetResourceParameter ( path , resourceName , filepath . Join ( param . category , param . name ), param . value )
if err != nil {
log . Entry (). WithError ( err ). Error ( "Error persisting piper environment." )
errCount ++
}
}
if errCount > 0 {
2020-04-20 16:52:57 +02:00
log . Entry (). Fatal ( "failed to persist Piper environment" )
2020-02-28 11:01:09 +01:00
}
}
2019-12-05 14:22:38 +01:00
// XsDeployCommand Performs xs deployment
func XsDeployCommand () * cobra . Command {
2020-04-28 07:42:02 +02:00
const STEP_NAME = "xsDeploy"
2019-12-05 14:22:38 +01:00
metadata := xsDeployMetadata ()
2020-02-04 10:46:43 +01:00
var stepConfig xsDeployOptions
2020-01-31 14:06:08 +01:00
var startTime time . Time
2020-02-28 11:01:09 +01:00
var commonPipelineEnvironment xsDeployCommonPipelineEnvironment
2020-01-15 12:16:25 +01:00
2019-12-05 14:22:38 +01:00
var createXsDeployCmd = & cobra . Command {
2020-04-28 07:42:02 +02:00
Use : STEP_NAME ,
2019-12-05 14:22:38 +01:00
Short : "Performs xs deployment" ,
Long : `Performs xs deployment` ,
2020-06-23 18:05:21 +02:00
PreRunE : func ( cmd * cobra . Command , _ [] string ) error {
2020-01-31 14:06:08 +01:00
startTime = time . Now ()
2020-04-28 07:42:02 +02:00
log . SetStepName ( STEP_NAME )
2019-12-05 14:22:38 +01:00
log . SetVerbose ( GeneralConfig . Verbose )
2020-04-28 07:42:02 +02:00
path , _ := os . Getwd ()
fatalHook := & log . FatalHook { CorrelationID : GeneralConfig . CorrelationID , Path : path }
log . RegisterHook ( fatalHook )
err := PrepareConfig ( cmd , & metadata , STEP_NAME , & stepConfig , config . OpenPiperFile )
2020-04-16 14:37:45 +02:00
if err != nil {
2020-06-24 10:04:05 +02:00
log . SetErrorCategory ( log . ErrorConfiguration )
2020-04-16 14:37:45 +02:00
return err
}
2020-09-16 11:33:03 +02:00
log . RegisterSecret ( stepConfig . Username )
2020-04-16 14:37:45 +02:00
log . RegisterSecret ( stepConfig . Password )
2020-05-05 08:36:24 +02:00
if len ( GeneralConfig . HookConfig . SentryConfig . Dsn ) > 0 {
sentryHook := log . NewSentryHook ( GeneralConfig . HookConfig . SentryConfig . Dsn , GeneralConfig . CorrelationID )
log . RegisterHook ( & sentryHook )
}
2020-04-16 14:37:45 +02:00
return nil
2019-12-05 14:22:38 +01:00
},
2020-06-23 18:05:21 +02:00
Run : func ( _ * cobra . Command , _ [] string ) {
2020-01-31 14:06:08 +01:00
telemetryData := telemetry . CustomData {}
telemetryData . ErrorCode = "1"
handler := func () {
2020-02-28 11:01:09 +01:00
commonPipelineEnvironment . persist ( GeneralConfig . EnvRootPath , "commonPipelineEnvironment" )
2020-01-31 14:06:08 +01:00
telemetryData . Duration = fmt . Sprintf ( "%v" , time . Since ( startTime ). Milliseconds ())
telemetry . Send ( & telemetryData )
}
log . DeferExitHandler ( handler )
defer handler ()
2020-04-28 07:42:02 +02:00
telemetry . Initialize ( GeneralConfig . NoTelemetry , STEP_NAME )
2020-02-28 11:01:09 +01:00
xsDeploy ( stepConfig , & telemetryData , & commonPipelineEnvironment )
2020-01-31 14:06:08 +01:00
telemetryData . ErrorCode = "0"
2020-05-18 21:52:54 +02:00
log . Entry (). Info ( "SUCCESS" )
2019-12-05 14:22:38 +01:00
},
}
2020-02-04 10:46:43 +01:00
addXsDeployFlags ( createXsDeployCmd , & stepConfig )
2019-12-05 14:22:38 +01:00
return createXsDeployCmd
}
2020-02-04 10:46:43 +01: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." )
2020-05-25 19:48:59 +02:00
cmd . Flags (). StringVar ( & stepConfig . OperationIDLogPattern , "operationIdLogPattern" , `^.*xs bg-deploy -i (.*) -a.*$` , "Regex pattern for retrieving the ID of the operation from the xs log." )
2020-02-04 10:46:43 +01:00
cmd . Flags (). StringVar ( & stepConfig . MtaPath , "mtaPath" , os . Getenv ( "PIPER_mtaPath" ), "Path to deployable" )
2020-05-25 19:48:59 +02:00
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'" )
2020-02-04 10:46:43 +01:00
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" )
2020-09-16 11:33:03 +02:00
cmd . Flags (). StringVar ( & stepConfig . Username , "username" , os . Getenv ( "PIPER_username" ), "Username" )
2020-02-04 10:46:43 +01:00
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 14:22:38 +01:00
cmd . MarkFlagRequired ( "mtaPath" )
cmd . MarkFlagRequired ( "mode" )
cmd . MarkFlagRequired ( "apiUrl" )
2020-09-16 11:33:03 +02:00
cmd . MarkFlagRequired ( "username" )
2019-12-05 14:22:38 +01:00
cmd . MarkFlagRequired ( "password" )
cmd . MarkFlagRequired ( "org" )
cmd . MarkFlagRequired ( "space" )
cmd . MarkFlagRequired ( "loginOpts" )
}
// retrieve step metadata
func xsDeployMetadata () config . StepData {
var theMetaData = config . StepData {
2020-03-19 17:24:35 +01:00
Metadata : config . StepMetadata {
Name : "xsDeploy" ,
Aliases : [] config . Alias {},
},
2019-12-05 14:22:38 +01:00
Spec : config . StepSpec {
Inputs : config . StepInputs {
Parameters : [] config . StepParameters {
{
2020-01-15 12:16:25 +01:00
Name : "deployOpts" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : false ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "operationIdLogPattern" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : false ,
Aliases : [] config . Alias {{ Name : "deployIdLogPattern" }},
2019-12-05 14:22:38 +01:00
},
{
2020-09-16 14:50:09 +02:00
Name : "mtaPath" ,
ResourceRef : [] config . ResourceReference {
{
Name : "commonPipelineEnvironment" ,
Param : "mtaPath" ,
},
},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "action" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : false ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "mode" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-09-16 14:50:09 +02:00
Name : "operationId" ,
ResourceRef : [] config . ResourceReference {
{
Name : "commonPipelineEnvironment" ,
Param : "operationId" ,
},
},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : false ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "apiUrl" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-09-16 14:50:09 +02:00
Name : "username" ,
ResourceRef : [] config . ResourceReference {
{
Name : "credentialsId" ,
Param : "username" ,
Type : "secret" ,
},
},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {{ Name : "user" }},
2019-12-05 14:22:38 +01:00
},
{
2020-09-16 14:50:09 +02:00
Name : "password" ,
ResourceRef : [] config . ResourceReference {
{
Name : "credentialsId" ,
Param : "password" ,
Type : "secret" ,
},
},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "org" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "space" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "loginOpts" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : true ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
{
2020-01-15 12:16:25 +01:00
Name : "xsSessionFile" ,
ResourceRef : [] config . ResourceReference {},
Scope : [] string { "PARAMETERS" , "STAGES" , "STEPS" },
Type : "string" ,
Mandatory : false ,
Aliases : [] config . Alias {},
2019-12-05 14:22:38 +01:00
},
},
},
},
}
return theMetaData
}