Skip to content

Commit

Permalink
refactor: merge pkg operation/models and operation/types (#198)
Browse files Browse the repository at this point in the history
  • Loading branch information
howieyuen committed Dec 21, 2022
1 parent 5de105c commit 3378e6a
Show file tree
Hide file tree
Showing 25 changed files with 135 additions and 173 deletions.
13 changes: 5 additions & 8 deletions pkg/engine/operation/apply.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,15 @@ import (
"fmt"
"sync"

opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"
"kusionstack.io/kusion/third_party/terraform/dag"
"kusionstack.io/kusion/third_party/terraform/tfdiags"

"kusionstack.io/kusion/pkg/engine/models"
"kusionstack.io/kusion/pkg/engine/operation/graph"
opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"
"kusionstack.io/kusion/pkg/engine/operation/parser"
"kusionstack.io/kusion/pkg/engine/operation/types"

"kusionstack.io/kusion/pkg/engine/models"
"kusionstack.io/kusion/pkg/engine/states"
"kusionstack.io/kusion/pkg/log"
"kusionstack.io/kusion/pkg/status"
"kusionstack.io/kusion/third_party/terraform/dag"
"kusionstack.io/kusion/third_party/terraform/tfdiags"
)

type ApplyOperation struct {
Expand Down Expand Up @@ -92,7 +89,7 @@ func (ao *ApplyOperation) Apply(request *ApplyRequest) (rsp *ApplyResponse, st s

applyOperation := &ApplyOperation{
Operation: opsmodels.Operation{
OperationType: types.Apply,
OperationType: opsmodels.Apply,
StateStorage: o.StateStorage,
CtxResourceIndex: map[string]*models.Resource{},
PriorStateResourceIndex: priorStateResourceIndex,
Expand Down
14 changes: 5 additions & 9 deletions pkg/engine/operation/apply_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,20 +9,16 @@ import (
"sync"
"testing"

"kusionstack.io/kusion/pkg/engine/states/local"

opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"

"kusionstack.io/kusion/pkg/engine/operation/graph"
"kusionstack.io/kusion/pkg/engine/operation/types"

"bou.ke/monkey"
_ "github.com/go-sql-driver/mysql"
"github.com/stretchr/testify/assert"

"kusionstack.io/kusion/pkg/engine/models"
"kusionstack.io/kusion/pkg/engine/operation/graph"
opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"
"kusionstack.io/kusion/pkg/engine/runtime"
"kusionstack.io/kusion/pkg/engine/states"
"kusionstack.io/kusion/pkg/engine/states/local"
"kusionstack.io/kusion/pkg/status"
)

Expand Down Expand Up @@ -64,7 +60,7 @@ func Test_validateRequest(t *testing.T) {

func TestOperation_Apply(t *testing.T) {
type fields struct {
OperationType types.OperationType
OperationType opsmodels.OperationType
StateStorage states.StateStorage
CtxResourceIndex map[string]*models.Resource
PriorStateResourceIndex map[string]*models.Resource
Expand Down Expand Up @@ -120,7 +116,7 @@ func TestOperation_Apply(t *testing.T) {
{
name: "apply test",
fields: fields{
OperationType: types.Apply,
OperationType: opsmodels.Apply,
StateStorage: &local.FileSystemState{Path: filepath.Join("test_data", local.KusionState)},
Runtime: &runtime.KubernetesRuntime{},
MsgCh: make(chan opsmodels.Message, 5),
Expand Down
13 changes: 4 additions & 9 deletions pkg/engine/operation/destory.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,14 @@ import (
"fmt"
"sync"

"kusionstack.io/kusion/pkg/engine/models"
"kusionstack.io/kusion/pkg/engine/operation/graph"
"kusionstack.io/kusion/third_party/terraform/dag"
"kusionstack.io/kusion/third_party/terraform/tfdiags"

opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"

"kusionstack.io/kusion/pkg/engine/operation/parser"
"kusionstack.io/kusion/pkg/engine/operation/types"

"kusionstack.io/kusion/pkg/engine/models"

"kusionstack.io/kusion/pkg/log"
"kusionstack.io/kusion/pkg/status"
"kusionstack.io/kusion/third_party/terraform/dag"
"kusionstack.io/kusion/third_party/terraform/tfdiags"
)

type DestroyOperation struct {
Expand Down Expand Up @@ -79,7 +74,7 @@ func (do *DestroyOperation) Destroy(request *DestroyRequest) (st status.Status)

newDo := &DestroyOperation{
Operation: opsmodels.Operation{
OperationType: types.Destroy,
OperationType: opsmodels.Destroy,
StateStorage: o.StateStorage,
CtxResourceIndex: map[string]*models.Resource{},
PriorStateResourceIndex: priorStateResourceIndex,
Expand Down
12 changes: 4 additions & 8 deletions pkg/engine/operation/destory_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,18 +9,14 @@ import (
"path/filepath"
"testing"

"kusionstack.io/kusion/pkg/engine/states/local"

opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"

"kusionstack.io/kusion/pkg/engine/operation/graph"
"kusionstack.io/kusion/pkg/engine/operation/types"

"bou.ke/monkey"
"github.com/stretchr/testify/assert"

"kusionstack.io/kusion/pkg/engine/models"
"kusionstack.io/kusion/pkg/engine/operation/graph"
opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"
"kusionstack.io/kusion/pkg/engine/runtime"
"kusionstack.io/kusion/pkg/engine/states/local"
"kusionstack.io/kusion/pkg/status"
)

Expand All @@ -42,7 +38,7 @@ func TestOperation_Destroy(t *testing.T) {
mf := &models.Spec{Resources: []models.Resource{resourceState}}
o := &DestroyOperation{
opsmodels.Operation{
OperationType: types.Destroy,
OperationType: opsmodels.Destroy,
StateStorage: &local.FileSystemState{Path: filepath.Join("test_data", local.KusionState)},
Runtime: &runtime.KubernetesRuntime{},
},
Expand Down
4 changes: 2 additions & 2 deletions pkg/engine/operation/graph/executable_node.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package graph

import (
"kusionstack.io/kusion/pkg/engine/operation/models"
opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"
"kusionstack.io/kusion/pkg/status"
)

type ExecutableNode interface {
Execute(operation *models.Operation) status.Status
Execute(operation *opsmodels.Operation) status.Status
}
33 changes: 16 additions & 17 deletions pkg/engine/operation/graph/resource_node.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (

"kusionstack.io/kusion/pkg/engine/models"
opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"
"kusionstack.io/kusion/pkg/engine/operation/types"
"kusionstack.io/kusion/pkg/engine/runtime"
"kusionstack.io/kusion/pkg/log"
"kusionstack.io/kusion/pkg/status"
Expand All @@ -21,7 +20,7 @@ import (

type ResourceNode struct {
*baseNode
Action types.ActionType
Action opsmodels.ActionType
state *models.Resource
}

Expand All @@ -33,7 +32,7 @@ const (

func (rn *ResourceNode) Execute(operation *opsmodels.Operation) status.Status {
log.Debugf("execute node:%s", rn.ID)
if operation.OperationType == types.Apply {
if operation.OperationType == opsmodels.Apply {
// replace implicit references
value := reflect.ValueOf(rn.state.Attributes)
_, implicitValue, s := ParseImplicitRef(value, operation.CtxResourceIndex, ImplicitReplaceFun)
Expand All @@ -45,7 +44,7 @@ func (rn *ResourceNode) Execute(operation *opsmodels.Operation) status.Status {

// 1. prepare planedState
planedState := rn.state
if rn.Action == types.Delete {
if rn.Action == opsmodels.Delete {
planedState = nil
}
// predictableState represents dry-run result
Expand All @@ -67,13 +66,13 @@ func (rn *ResourceNode) Execute(operation *opsmodels.Operation) status.Status {

// 4. compute ActionType of current resource node between planState and liveState
switch operation.OperationType {
case types.Destroy, types.DestroyPreview:
rn.Action = types.Delete
case types.Apply, types.ApplyPreview:
case opsmodels.Destroy, opsmodels.DestroyPreview:
rn.Action = opsmodels.Delete
case opsmodels.Apply, opsmodels.ApplyPreview:
if planedState == nil {
rn.Action = types.Delete
rn.Action = opsmodels.Delete
} else if priorState == nil && liveState == nil {
rn.Action = types.Create
rn.Action = opsmodels.Create
} else {
// Dry run to fetch predictable state
dryRunResp := operation.Runtime.Apply(context.Background(), &runtime.ApplyRequest{
Expand All @@ -96,9 +95,9 @@ func (rn *ResourceNode) Execute(operation *opsmodels.Operation) status.Status {
return status.NewErrorStatus(err)
}
if len(report.Diffs) == 0 {
rn.Action = types.UnChange
rn.Action = opsmodels.UnChange
} else {
rn.Action = types.Update
rn.Action = opsmodels.Update
}
}
default:
Expand All @@ -107,9 +106,9 @@ func (rn *ResourceNode) Execute(operation *opsmodels.Operation) status.Status {

// 5. apply or return
switch operation.OperationType {
case types.ApplyPreview, types.DestroyPreview:
case opsmodels.ApplyPreview, opsmodels.DestroyPreview:
fillResponseChangeSteps(operation, rn, liveState, predictableState)
case types.Apply, types.Destroy:
case opsmodels.Apply, opsmodels.Destroy:
if s = rn.applyResource(operation, priorState, planedState); status.IsErr(s) {
return s
}
Expand All @@ -128,21 +127,21 @@ func (rn *ResourceNode) applyResource(operation *opsmodels.Operation, priorState
var s status.Status

switch rn.Action {
case types.Create, types.Update:
case opsmodels.Create, opsmodels.Update:
response := operation.Runtime.Apply(context.Background(), &runtime.ApplyRequest{PriorResource: priorState, PlanResource: planedState})
res = response.Resource
s = response.Status
log.Debugf("apply resource:%s, result: %v", planedState.ID, jsonutil.Marshal2String(res))
if s != nil {
log.Debugf("apply status: %v", s.String())
}
case types.Delete:
case opsmodels.Delete:
response := operation.Runtime.Delete(context.Background(), &runtime.DeleteRequest{Resource: priorState})
s = response.Status
if s != nil {
log.Debugf("delete state: %v", s.String())
}
case types.UnChange:
case opsmodels.UnChange:
log.Infof("planed resource not update live state")
res = priorState
}
Expand All @@ -167,7 +166,7 @@ func (rn *ResourceNode) State() *models.Resource {
return rn.state
}

func NewResourceNode(key string, state *models.Resource, action types.ActionType) (*ResourceNode, status.Status) {
func NewResourceNode(key string, state *models.Resource, action opsmodels.ActionType) (*ResourceNode, status.Status) {
node, s := NewBaseNode(key)
if status.IsErr(s) {
return nil, s
Expand Down
15 changes: 7 additions & 8 deletions pkg/engine/operation/graph/resource_node_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (

"kusionstack.io/kusion/pkg/engine/models"
opsmodels "kusionstack.io/kusion/pkg/engine/operation/models"
"kusionstack.io/kusion/pkg/engine/operation/types"
"kusionstack.io/kusion/pkg/engine/runtime"
"kusionstack.io/kusion/pkg/engine/states"
"kusionstack.io/kusion/pkg/engine/states/local"
Expand All @@ -25,7 +24,7 @@ import (
func TestResourceNode_Execute(t *testing.T) {
type fields struct {
BaseNode baseNode
Action types.ActionType
Action opsmodels.ActionType
state *models.Resource
}
type args struct {
Expand Down Expand Up @@ -100,11 +99,11 @@ func TestResourceNode_Execute(t *testing.T) {
name: "update",
fields: fields{
BaseNode: baseNode{ID: Jack},
Action: types.Update,
Action: opsmodels.Update,
state: newResourceState,
},
args: args{operation: opsmodels.Operation{
OperationType: types.Apply,
OperationType: opsmodels.Apply,
StateStorage: local.NewFileSystemState(),
CtxResourceIndex: priorStateResourceIndex,
PriorStateResourceIndex: priorStateResourceIndex,
Expand All @@ -121,11 +120,11 @@ func TestResourceNode_Execute(t *testing.T) {
name: "delete",
fields: fields{
BaseNode: baseNode{ID: Jack},
Action: types.Delete,
Action: opsmodels.Delete,
state: newResourceState,
},
args: args{operation: opsmodels.Operation{
OperationType: types.Apply,
OperationType: opsmodels.Apply,
StateStorage: local.NewFileSystemState(),
CtxResourceIndex: priorStateResourceIndex,
PriorStateResourceIndex: priorStateResourceIndex,
Expand All @@ -141,11 +140,11 @@ func TestResourceNode_Execute(t *testing.T) {
name: "illegalRef",
fields: fields{
BaseNode: baseNode{ID: Jack},
Action: types.Update,
Action: opsmodels.Update,
state: illegalResourceState,
},
args: args{operation: opsmodels.Operation{
OperationType: types.Apply,
OperationType: opsmodels.Apply,
StateStorage: local.NewFileSystemState(),
CtxResourceIndex: priorStateResourceIndex,
PriorStateResourceIndex: priorStateResourceIndex,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package types
package models

import "kusionstack.io/kusion/pkg/util/pretty"

Expand Down
25 changes: 12 additions & 13 deletions pkg/engine/operation/models/change.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,17 @@ import (
"github.com/pterm/pterm"

"kusionstack.io/kusion/pkg/engine/models"
"kusionstack.io/kusion/pkg/engine/operation/types"
"kusionstack.io/kusion/pkg/log"
"kusionstack.io/kusion/pkg/projectstack"
"kusionstack.io/kusion/pkg/util/diff"
"kusionstack.io/kusion/pkg/util/pretty"
)

type ChangeStep struct {
ID string // the resource id
Action types.ActionType // the operation performed by this step.
From interface{} // old data
To interface{} // new data
ID string // the resource id
Action ActionType // the operation performed by this step.
From interface{} // old data
To interface{} // new data
}

// Diff compares objects(from and to) which stores in ChangeStep,
Expand All @@ -46,12 +45,12 @@ func (cs *ChangeStep) Diff() (string, error) {
buf.WriteString(pretty.GreenBold("ID: "))
buf.WriteString(pretty.Green("%s\n", cs.ID))
}
if cs.Action != types.Undefined {
if cs.Action != Undefined {
buf.WriteString(pretty.GreenBold("Plan: "))
buf.WriteString(pterm.Sprintf("%s\n", cs.Action.PrettyString()))
}
buf.WriteString(pretty.GreenBold("Diff: "))
if len(strings.TrimSpace(reportString)) == 0 && cs.Action == types.UnChange {
if len(strings.TrimSpace(reportString)) == 0 && cs.Action == UnChange {
buf.WriteString(pretty.Gray("<EMPTY>"))
} else {
buf.WriteString("\n" + strings.TrimSpace(reportString))
Expand All @@ -60,7 +59,7 @@ func (cs *ChangeStep) Diff() (string, error) {
return buf.String(), nil
}

func NewChangeStep(id string, op types.ActionType, from, to interface{}) *ChangeStep {
func NewChangeStep(id string, op ActionType, from, to interface{}) *ChangeStep {
return &ChangeStep{
ID: id,
Action: op,
Expand All @@ -72,10 +71,10 @@ func NewChangeStep(id string, op types.ActionType, from, to interface{}) *Change
type ChangeStepFilterFunc func(*ChangeStep) bool

var (
CreateChangeStepFilter = func(c *ChangeStep) bool { return c.Action == types.Create }
UpdateChangeStepFilter = func(c *ChangeStep) bool { return c.Action == types.Update }
DeleteChangeStepFilter = func(c *ChangeStep) bool { return c.Action == types.Delete }
UnChangeChangeStepFilter = func(c *ChangeStep) bool { return c.Action == types.UnChange }
CreateChangeStepFilter = func(c *ChangeStep) bool { return c.Action == Create }
UpdateChangeStepFilter = func(c *ChangeStep) bool { return c.Action == Update }
DeleteChangeStepFilter = func(c *ChangeStep) bool { return c.Action == Delete }
UnChangeChangeStepFilter = func(c *ChangeStep) bool { return c.Action == UnChange }
)

type Changes struct {
Expand Down Expand Up @@ -151,7 +150,7 @@ func (o *ChangeOrder) Diffs() string {

func (p *Changes) AllUnChange() bool {
for _, v := range p.ChangeSteps {
if v.Action != types.UnChange {
if v.Action != UnChange {
return false
}
}
Expand Down
Loading

0 comments on commit 3378e6a

Please sign in to comment.