2020-10-20 09:05:17 +02:00
// Code generated by piper's step-generator. DO NOT EDIT.
package cmd
import (
"fmt"
"os"
"time"
"github.com/SAP/jenkins-library/pkg/config"
"github.com/SAP/jenkins-library/pkg/log"
2021-05-17 12:14:04 +02:00
"github.com/SAP/jenkins-library/pkg/splunk"
2020-10-20 09:05:17 +02:00
"github.com/SAP/jenkins-library/pkg/telemetry"
"github.com/spf13/cobra"
)
type gitopsUpdateDeploymentOptions struct {
2020-11-03 19:29:46 +02:00
BranchName string ` json:"branchName,omitempty" `
CommitMessage string ` json:"commitMessage,omitempty" `
ServerURL string ` json:"serverUrl,omitempty" `
Username string ` json:"username,omitempty" `
Password string ` json:"password,omitempty" `
FilePath string ` json:"filePath,omitempty" `
ContainerName string ` json:"containerName,omitempty" `
ContainerRegistryURL string ` json:"containerRegistryUrl,omitempty" `
ContainerImageNameTag string ` json:"containerImageNameTag,omitempty" `
ChartPath string ` json:"chartPath,omitempty" `
HelmValues [ ] string ` json:"helmValues,omitempty" `
DeploymentName string ` json:"deploymentName,omitempty" `
Tool string ` json:"tool,omitempty" `
2020-10-20 09:05:17 +02:00
}
// GitopsUpdateDeploymentCommand Updates Kubernetes Deployment Manifest in an Infrastructure Git Repository
func GitopsUpdateDeploymentCommand ( ) * cobra . Command {
const STEP_NAME = "gitopsUpdateDeployment"
metadata := gitopsUpdateDeploymentMetadata ( )
var stepConfig gitopsUpdateDeploymentOptions
var startTime time . Time
2021-05-17 12:14:04 +02:00
var logCollector * log . CollectorHook
2020-10-20 09:05:17 +02:00
var createGitopsUpdateDeploymentCmd = & cobra . Command {
Use : STEP_NAME ,
Short : "Updates Kubernetes Deployment Manifest in an Infrastructure Git Repository" ,
Long : ` This step allows you to update the deployment manifest for Kubernetes in a git repository .
It can for example be used for GitOps scenarios where the update of the manifests triggers an update of the corresponding deployment in Kubernetes .
2020-11-03 19:29:46 +02:00
As of today , it supports the update of deployment yaml files via kubectl patch and update a whole helm template .
For kubectl the container inside the yaml must be described within the following hierarchy : ` + " ` " + `{" spec ":{" template ":{" spec ":{" containers ":[{...}]}}}}` + " ` " + `
For helm the whole template is generated into a file and uploaded into the repository . ` ,
2020-10-20 09:05:17 +02:00
PreRunE : func ( cmd * cobra . Command , _ [ ] string ) error {
startTime = time . Now ( )
log . SetStepName ( STEP_NAME )
log . SetVerbose ( GeneralConfig . Verbose )
2021-07-08 15:26:07 +02:00
GeneralConfig . GitHubAccessTokens = ResolveAccessTokens ( GeneralConfig . GitHubTokens )
2020-10-20 09:05:17 +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 )
if err != nil {
log . SetErrorCategory ( log . ErrorConfiguration )
return err
}
log . RegisterSecret ( stepConfig . Username )
log . RegisterSecret ( stepConfig . Password )
if len ( GeneralConfig . HookConfig . SentryConfig . Dsn ) > 0 {
sentryHook := log . NewSentryHook ( GeneralConfig . HookConfig . SentryConfig . Dsn , GeneralConfig . CorrelationID )
log . RegisterHook ( & sentryHook )
}
2021-05-17 12:14:04 +02:00
if len ( GeneralConfig . HookConfig . SplunkConfig . Dsn ) > 0 {
logCollector = & log . CollectorHook { CorrelationID : GeneralConfig . CorrelationID }
log . RegisterHook ( logCollector )
}
2020-10-20 09:05:17 +02:00
return nil
} ,
Run : func ( _ * cobra . Command , _ [ ] string ) {
telemetryData := telemetry . CustomData { }
telemetryData . ErrorCode = "1"
handler := func ( ) {
2020-10-26 15:20:04 +02:00
config . RemoveVaultSecretFiles ( )
2020-10-20 09:05:17 +02:00
telemetryData . Duration = fmt . Sprintf ( "%v" , time . Since ( startTime ) . Milliseconds ( ) )
telemetryData . ErrorCategory = log . GetErrorCategory ( ) . String ( )
telemetry . Send ( & telemetryData )
2021-05-17 12:14:04 +02:00
if len ( GeneralConfig . HookConfig . SplunkConfig . Dsn ) > 0 {
splunk . Send ( & telemetryData , logCollector )
}
2020-10-20 09:05:17 +02:00
}
log . DeferExitHandler ( handler )
defer handler ( )
telemetry . Initialize ( GeneralConfig . NoTelemetry , STEP_NAME )
2021-05-17 12:14:04 +02:00
if len ( GeneralConfig . HookConfig . SplunkConfig . Dsn ) > 0 {
splunk . Initialize ( GeneralConfig . CorrelationID ,
GeneralConfig . HookConfig . SplunkConfig . Dsn ,
GeneralConfig . HookConfig . SplunkConfig . Token ,
GeneralConfig . HookConfig . SplunkConfig . Index ,
GeneralConfig . HookConfig . SplunkConfig . SendLogs )
}
2020-10-20 09:05:17 +02:00
gitopsUpdateDeployment ( stepConfig , & telemetryData )
telemetryData . ErrorCode = "0"
log . Entry ( ) . Info ( "SUCCESS" )
} ,
}
addGitopsUpdateDeploymentFlags ( createGitopsUpdateDeploymentCmd , & stepConfig )
return createGitopsUpdateDeploymentCmd
}
func addGitopsUpdateDeploymentFlags ( cmd * cobra . Command , stepConfig * gitopsUpdateDeploymentOptions ) {
cmd . Flags ( ) . StringVar ( & stepConfig . BranchName , "branchName" , ` master ` , "The name of the branch where the changes should get pushed into." )
2020-11-03 19:29:46 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . CommitMessage , "commitMessage" , os . Getenv ( "PIPER_commitMessage" ) , "The commit message of the commit that will be done to do the changes." )
2020-10-20 09:05:17 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . ServerURL , "serverUrl" , ` https://github.com ` , "GitHub server url to the repository." )
cmd . Flags ( ) . StringVar ( & stepConfig . Username , "username" , os . Getenv ( "PIPER_username" ) , "User name for git authentication" )
cmd . Flags ( ) . StringVar ( & stepConfig . Password , "password" , os . Getenv ( "PIPER_password" ) , "Password/token for git authentication." )
cmd . Flags ( ) . StringVar ( & stepConfig . FilePath , "filePath" , os . Getenv ( "PIPER_filePath" ) , "Relative path in the git repository to the deployment descriptor file that shall be updated" )
cmd . Flags ( ) . StringVar ( & stepConfig . ContainerName , "containerName" , os . Getenv ( "PIPER_containerName" ) , "The name of the container to update" )
cmd . Flags ( ) . StringVar ( & stepConfig . ContainerRegistryURL , "containerRegistryUrl" , os . Getenv ( "PIPER_containerRegistryUrl" ) , "http(s) url of the Container registry where the image is located" )
2020-10-27 14:45:34 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . ContainerImageNameTag , "containerImageNameTag" , os . Getenv ( "PIPER_containerImageNameTag" ) , "Container image name with version tag to annotate in the deployment configuration." )
2020-11-03 19:29:46 +02:00
cmd . Flags ( ) . StringVar ( & stepConfig . ChartPath , "chartPath" , os . Getenv ( "PIPER_chartPath" ) , "Defines the chart path for deployments using helm." )
cmd . Flags ( ) . StringSliceVar ( & stepConfig . HelmValues , "helmValues" , [ ] string { } , "List of helm values as YAML file reference or URL (as per helm parameter description for `-f` / `--values`)" )
cmd . Flags ( ) . StringVar ( & stepConfig . DeploymentName , "deploymentName" , os . Getenv ( "PIPER_deploymentName" ) , "Defines the name of the deployment." )
cmd . Flags ( ) . StringVar ( & stepConfig . Tool , "tool" , ` kubectl ` , "Defines the tool which should be used to update the deployment description." )
2020-10-20 09:05:17 +02:00
2020-11-03 19:29:46 +02:00
cmd . MarkFlagRequired ( "branchName" )
2020-10-20 09:05:17 +02:00
cmd . MarkFlagRequired ( "serverUrl" )
cmd . MarkFlagRequired ( "username" )
cmd . MarkFlagRequired ( "password" )
cmd . MarkFlagRequired ( "filePath" )
2020-11-03 19:29:46 +02:00
cmd . MarkFlagRequired ( "containerRegistryUrl" )
cmd . MarkFlagRequired ( "containerImageNameTag" )
cmd . MarkFlagRequired ( "tool" )
2020-10-20 09:05:17 +02:00
}
// retrieve step metadata
func gitopsUpdateDeploymentMetadata ( ) config . StepData {
var theMetaData = config . StepData {
Metadata : config . StepMetadata {
2020-11-20 09:13:59 +02:00
Name : "gitopsUpdateDeployment" ,
Aliases : [ ] config . Alias { } ,
Description : "Updates Kubernetes Deployment Manifest in an Infrastructure Git Repository" ,
2020-10-20 09:05:17 +02:00
} ,
Spec : config . StepSpec {
Inputs : config . StepInputs {
2021-06-16 08:43:30 +02:00
Secrets : [ ] config . StepSecrets {
{ Name : "gitHttpsCredentialsId" , Description : "Jenkins 'Username with password' credentials ID containing username/password for http access to your git repository." , Type : "jenkins" } ,
} ,
2021-03-01 14:03:42 +02:00
Resources : [ ] config . StepResources {
{ Name : "deployDescriptor" , Type : "stash" } ,
} ,
2020-10-20 09:05:17 +02:00
Parameters : [ ] config . StepParameters {
{
Name : "branchName" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
2020-11-03 19:29:46 +02:00
Mandatory : true ,
2020-10-20 09:05:17 +02:00
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : ` master ` ,
2020-10-20 09:05:17 +02:00
} ,
{
Name : "commitMessage" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
2020-11-03 19:29:46 +02:00
Mandatory : false ,
2020-10-20 09:05:17 +02:00
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_commitMessage" ) ,
2020-10-20 09:05:17 +02:00
} ,
{
Name : "serverUrl" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "GENERAL" , "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { { Name : "githubServerUrl" } } ,
2021-06-16 08:43:30 +02:00
Default : ` https://github.com ` ,
2020-10-20 09:05:17 +02:00
} ,
{
Name : "username" ,
ResourceRef : [ ] config . ResourceReference {
{
Name : "gitHttpsCredentialsId" ,
Param : "username" ,
Type : "secret" ,
} ,
} ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_username" ) ,
2020-10-20 09:05:17 +02:00
} ,
{
Name : "password" ,
ResourceRef : [ ] config . ResourceReference {
{
Name : "gitHttpsCredentialsId" ,
Param : "password" ,
Type : "secret" ,
} ,
} ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_password" ) ,
2020-10-20 09:05:17 +02:00
} ,
{
Name : "filePath" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_filePath" ) ,
2020-10-20 09:05:17 +02:00
} ,
{
Name : "containerName" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
2020-11-03 19:29:46 +02:00
Mandatory : false ,
2020-10-20 09:05:17 +02:00
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_containerName" ) ,
2020-10-20 09:05:17 +02:00
} ,
{
Name : "containerRegistryUrl" ,
ResourceRef : [ ] config . ResourceReference {
{
Name : "commonPipelineEnvironment" ,
Param : "container/registryUrl" ,
} ,
} ,
Scope : [ ] string { "GENERAL" , "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
2020-11-03 19:29:46 +02:00
Mandatory : true ,
2020-10-20 09:05:17 +02:00
Aliases : [ ] config . Alias { { Name : "dockerRegistryUrl" } } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_containerRegistryUrl" ) ,
2020-10-20 09:05:17 +02:00
} ,
{
2020-10-27 14:45:34 +02:00
Name : "containerImageNameTag" ,
2020-10-20 09:05:17 +02:00
ResourceRef : [ ] config . ResourceReference {
{
Name : "commonPipelineEnvironment" ,
Param : "container/imageNameTag" ,
} ,
} ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
2020-11-03 19:29:46 +02:00
Mandatory : true ,
2020-10-27 14:45:34 +02:00
Aliases : [ ] config . Alias { { Name : "image" } , { Name : "containerImage" } } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_containerImageNameTag" ) ,
2020-10-20 09:05:17 +02:00
} ,
2020-11-03 19:29:46 +02:00
{
Name : "chartPath" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { { Name : "helmChartPath" } } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_chartPath" ) ,
2020-11-03 19:29:46 +02:00
} ,
{
Name : "helmValues" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "[]string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : [ ] string { } ,
2020-11-03 19:29:46 +02:00
} ,
{
Name : "deploymentName" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : false ,
Aliases : [ ] config . Alias { { Name : "helmDeploymentName" } } ,
2021-06-16 08:43:30 +02:00
Default : os . Getenv ( "PIPER_deploymentName" ) ,
2020-11-03 19:29:46 +02:00
} ,
{
Name : "tool" ,
ResourceRef : [ ] config . ResourceReference { } ,
Scope : [ ] string { "PARAMETERS" , "STAGES" , "STEPS" } ,
Type : "string" ,
Mandatory : true ,
Aliases : [ ] config . Alias { } ,
2021-06-16 08:43:30 +02:00
Default : ` kubectl ` ,
2020-11-03 19:29:46 +02:00
} ,
2020-10-20 09:05:17 +02:00
} ,
} ,
2020-11-20 09:13:59 +02:00
Containers : [ ] config . Container {
{ Image : "dtzar/helm-kubectl:3.3.4" , WorkingDir : "/config" , Options : [ ] config . Option { { Name : "-u" , Value : "0" } } , Conditions : [ ] config . Condition { { ConditionRef : "strings-equal" , Params : [ ] config . Param { { Name : "tool" , Value : "helm" } } } } } ,
2021-07-05 12:07:22 +02:00
{ Image : "dtzar/helm-kubectl:2.17.0" , WorkingDir : "/config" , Options : [ ] config . Option { { Name : "-u" , Value : "0" } } , Conditions : [ ] config . Condition { { ConditionRef : "strings-equal" , Params : [ ] config . Param { { Name : "tool" , Value : "kubectl" } } } } } ,
2020-11-20 09:13:59 +02:00
} ,
2020-10-20 09:05:17 +02:00
} ,
}
return theMetaData
}