@@ -3,6 +3,7 @@ package workflows
3
3
import (
4
4
"crypto/rand"
5
5
"fmt"
6
+ "os"
6
7
"strconv"
7
8
"strings"
8
9
@@ -17,13 +18,15 @@ func NewDatabaseUpserter(ctx *common.Context, environmentName string) Executor {
17
18
workflow .codeRevision = ctx .Config .Repo .Revision
18
19
workflow .repoName = ctx .Config .Repo .Slug
19
20
21
+ cliExtension := new (common.CliAdditions )
20
22
ecsImportParams := make (map [string ]string )
21
23
22
24
return newPipelineExecutor (
23
25
workflow .databaseInput (ctx , "" , environmentName ),
24
26
workflow .databaseEnvironmentLoader (ctx .Config .Namespace , environmentName , ctx .StackManager , ecsImportParams , ctx .ElbManager ),
25
27
workflow .databaseRolesetUpserter (ctx .RolesetManager , ctx .RolesetManager , environmentName ),
26
- workflow .databaseDeployer (ctx .Config .Namespace , & ctx .Config .Service , ecsImportParams , environmentName , ctx .StackManager , ctx .StackManager , ctx .RdsManager , ctx .ParamManager ),
28
+ workflow .databaseMasterPassword (ctx .Config .Namespace , & ctx .Config .Service , & ecsImportParams , environmentName , ctx .ParamManager , cliExtension ),
29
+ workflow .databaseDeployer (ctx .Config .Namespace , & ctx .Config .Service , ecsImportParams , environmentName , ctx .StackManager , ctx .StackManager , ctx .RdsManager ),
27
30
)
28
31
}
29
32
@@ -74,7 +77,47 @@ func (workflow *databaseWorkflow) databaseRolesetUpserter(rolesetUpserter common
74
77
}
75
78
}
76
79
77
- func (workflow * databaseWorkflow ) databaseDeployer (namespace string , service * common.Service , stackParams map [string ]string , environmentName string , stackUpserter common.StackUpserter , stackWaiter common.StackWaiter , rdsSetter common.RdsIamAuthenticationSetter , paramManager common.ParamManager ) Executor {
80
+ // Fetch password parameter if needed
81
+ func (workflow * databaseWorkflow ) databaseMasterPassword (namespace string ,
82
+ service * common.Service , params * map [string ]string , environmentName string ,
83
+ paramManager common.ParamManager , cliExtension common.CliExtension ) Executor {
84
+ return func () error {
85
+
86
+ dbStackName := common .CreateStackName (namespace , common .StackTypeDatabase , workflow .serviceName , environmentName )
87
+ masterPasswordSSMParam := service .Database .MasterPasswordSSMParam
88
+ //DatabaseMasterPassword:
89
+ if masterPasswordSSMParam == "" {
90
+ dbPassSSMParam := fmt .Sprintf ("%s-%s" , dbStackName , "DatabaseMasterPassword" )
91
+ dbPassVersion , err := paramManager .ParamVersion (dbPassSSMParam )
92
+ if err != nil {
93
+ log .Warningf ("Error with ParamVersion for DatabaseMasterPassword, assuming empty: %s" , err )
94
+ answer , err := cliExtension .Prompt ("Error retrieving DatabaseMasterPassword. Set a new DatabaseMasterPassword" , false )
95
+ if err != nil {
96
+ log .Errorf ("Error with command input: %s" , err )
97
+ os .Exit (1 )
98
+ }
99
+ if ! answer {
100
+ os .Exit (126 )
101
+ }
102
+ }
103
+ if dbPassVersion == 0 {
104
+ dbPass := randomPassword (32 )
105
+ err = paramManager .SetParam (dbPassSSMParam , dbPass , workflow .databaseKeyArn )
106
+ if err != nil {
107
+ return err
108
+ }
109
+ dbPassVersion = 1
110
+ }
111
+ masterPasswordSSMParam = fmt .Sprintf ("{{resolve:ssm-secure:%s:%d}}" , dbPassSSMParam , dbPassVersion )
112
+ } else {
113
+ masterPasswordSSMParam = fmt .Sprintf ("{{resolve:ssm-secure:%s}}" , masterPasswordSSMParam )
114
+ }
115
+ (* params )["DatabaseMasterPassword" ] = masterPasswordSSMParam
116
+ return nil
117
+ }
118
+ }
119
+
120
+ func (workflow * databaseWorkflow ) databaseDeployer (namespace string , service * common.Service , stackParams map [string ]string , environmentName string , stackUpserter common.StackUpserter , stackWaiter common.StackWaiter , rdsSetter common.RdsIamAuthenticationSetter ) Executor {
78
121
return func () error {
79
122
80
123
if service .Database .Name == "" {
@@ -102,26 +145,6 @@ func (workflow *databaseWorkflow) databaseDeployer(namespace string, service *co
102
145
stackParams ["DatabaseMasterUsername" ] = "admin"
103
146
common .NewMapElementIfNotEmpty (stackParams , "DatabaseMasterUsername" , dbConfig .MasterUsername )
104
147
105
- //DatabaseMasterPassword:
106
- if service .Database .MasterPasswordSSMParam == "" {
107
- dbPassSSMParam := fmt .Sprintf ("%s-%s" , dbStackName , "DatabaseMasterPassword" )
108
- dbPassVersion , err := paramManager .ParamVersion (dbPassSSMParam )
109
- if err != nil {
110
- log .Warningf ("Error with ParamVersion for DatabaseMasterPassword, assuming empty: %s" , err )
111
- }
112
- if dbPassVersion == 0 {
113
- dbPass := randomPassword (32 )
114
- err = paramManager .SetParam (dbPassSSMParam , dbPass , workflow .databaseKeyArn )
115
- if err != nil {
116
- return err
117
- }
118
- dbPassVersion = 1
119
- }
120
- service .Database .MasterPasswordSSMParam = fmt .Sprintf ("{{resolve:ssm-secure:%s:%d}}" , dbPassSSMParam , dbPassVersion )
121
- } else {
122
- service .Database .MasterPasswordSSMParam = fmt .Sprintf ("{{resolve:ssm-secure:%s}}" , service .Database .MasterPasswordSSMParam )
123
- }
124
- stackParams ["DatabaseMasterPassword" ] = service .Database .MasterPasswordSSMParam
125
148
stackParams ["DatabaseKeyArn" ] = workflow .databaseKeyArn
126
149
127
150
tags := createTagMap (& DatabaseTags {
0 commit comments