Skip to content

Commit 2a8b81c

Browse files
authored
fix: some problems of remote state backend (#585)
1 parent 6be5849 commit 2a8b81c

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

pkg/engine/states/remote/db/db_state.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,15 @@ func (s *DBState) Apply(state *states.State) error {
4040
err = json.Unmarshal(marshal, &m)
4141
util.CheckNotError(err, fmt.Sprintf("unmarshal state failed:%+v", marshal))
4242
m["resources"] = jsonutil.MustMarshal2String(m["resources"])
43+
// convert the camel case formatted key to underscore formatted key
44+
// before we insert the state data into the database
45+
m["kusion_version"] = m["kusionVersion"]
46+
delete(m, "kusionVersion")
4347
// timestamp is generated by DB, we ignore zero timestamp here
4448
delete(m, "createTime")
4549
delete(m, "modifiedTime")
50+
// id should be an auto-increment key, we also ignore here
51+
delete(m, "id")
4652
id, err := mapper.Insert(s.DB, []map[string]interface{}{m})
4753
state.ID = id
4854
return err
@@ -55,20 +61,17 @@ func (s *DBState) Delete(id string) error {
5561
func (s *DBState) GetLatestState(q *states.StateQuery) (*states.State, error) {
5662
where := make(map[string]interface{})
5763

58-
if len(q.Tenant) == 0 {
59-
msg := "no Tenant in query"
60-
log.Errorf(msg)
61-
return nil, fmt.Errorf(msg)
62-
}
63-
where["tenant"] = q.Tenant
64-
6564
if len(q.Project) == 0 {
6665
msg := "no Project in query"
6766
log.Errorf(msg)
6867
return nil, fmt.Errorf(msg)
6968
}
7069
where["project"] = q.Project
7170

71+
if len(q.Tenant) != 0 {
72+
where["tenant"] = q.Tenant
73+
}
74+
7275
if len(q.Stack) != 0 {
7376
where["stack"] = q.Stack
7477
}

pkg/engine/states/remote/oss/oss_state.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,14 @@ func (s *OssState) Apply(state *states.State) error {
4545
if err != nil {
4646
return err
4747
}
48-
prefix := state.Tenant + "/" + state.Project + "/" + state.Stack + "/" + OSSStateName
48+
49+
var prefix string
50+
if state.Tenant != "" {
51+
prefix = state.Tenant + "/" + state.Project + "/" + state.Stack + "/" + OSSStateName
52+
} else {
53+
prefix = state.Project + "/" + state.Stack + "/" + OSSStateName
54+
}
55+
4956
err = s.bucket.PutObject(prefix, bytes.NewReader(jsonByte))
5057
if err != nil {
5158
return err
@@ -58,7 +65,13 @@ func (s *OssState) Delete(id string) error {
5865
}
5966

6067
func (s *OssState) GetLatestState(query *states.StateQuery) (*states.State, error) {
61-
prefix := query.Tenant + "/" + query.Project + "/" + query.Stack + "/" + OSSStateName
68+
var prefix string
69+
if query.Tenant != "" {
70+
prefix = query.Tenant + "/" + query.Project + "/" + query.Stack + "/" + OSSStateName
71+
} else {
72+
prefix = query.Project + "/" + query.Stack + "/" + OSSStateName
73+
}
74+
6275
objects, err := s.bucket.ListObjects(oss.Delimiter("/"), oss.Prefix(prefix))
6376
if err != nil {
6477
return nil, err

pkg/engine/states/remote/s3/s3_state.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,14 @@ func (s *S3State) Apply(state *states.State) error {
4848
if err != nil {
4949
return err
5050
}
51-
prefix := state.Tenant + "/" + state.Project + "/" + state.Stack + "/" + S3StateName
51+
52+
var prefix string
53+
if state.Tenant != "" {
54+
prefix = state.Tenant + "/" + state.Project + "/" + state.Stack + "/" + S3StateName
55+
} else {
56+
prefix = state.Project + "/" + state.Stack + "/" + S3StateName
57+
}
58+
5259
s3Client := s3.New(s.sess)
5360
_, err = s3Client.PutObject(&s3.PutObjectInput{
5461
Bucket: aws.String(s.bucketName),
@@ -67,7 +74,12 @@ func (s *S3State) Delete(id string) error {
6774
}
6875

6976
func (s *S3State) GetLatestState(query *states.StateQuery) (*states.State, error) {
70-
prefix := query.Tenant + "/" + query.Project + "/" + query.Stack + "/" + S3StateName
77+
var prefix string
78+
if query.Tenant != "" {
79+
prefix = query.Tenant + "/" + query.Project + "/" + query.Stack + "/" + S3StateName
80+
} else {
81+
prefix = query.Project + "/" + query.Stack + "/" + S3StateName
82+
}
7183
s3Client := s3.New(s.sess)
7284

7385
params := &s3.ListObjectsInput{

0 commit comments

Comments
 (0)