Skip to content

Commit

Permalink
feat(kuma-cp) delete all related resources only in mesh manager
Browse files Browse the repository at this point in the history
  • Loading branch information
jakubdyszkiewicz committed Oct 17, 2019
1 parent 2fcaa8a commit 5a651c8
Show file tree
Hide file tree
Showing 13 changed files with 56 additions and 62 deletions.
3 changes: 1 addition & 2 deletions pkg/api-server/resource_api_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import (
"github.com/Kong/kuma/pkg/core/resources/store"
"github.com/Kong/kuma/pkg/test"
sample_proto "github.com/Kong/kuma/pkg/test/apis/sample/v1alpha1"
test_resources "github.com/Kong/kuma/pkg/test/resources"
sample_model "github.com/Kong/kuma/pkg/test/resources/apis/sample"

. "github.com/onsi/gomega"
Expand Down Expand Up @@ -102,6 +101,6 @@ func createTestApiServer(store store.ResourceStore, config config.ApiServerConfi
TrafficRouteWsDefinition,
definitions.MeshWsDefinition,
}
resources := manager.NewResourceManager(store, test_resources.Global())
resources := manager.NewResourceManager(store)
return api_server.NewApiServer(resources, defs, config)
}
6 changes: 3 additions & 3 deletions pkg/core/bootstrap/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,10 @@ func initializeBuiltinCaManager(builder *core_runtime.Builder) {
}

func initializeResourceManager(builder *core_runtime.Builder) {
defaultManager := core_manager.NewResourceManager(builder.ResourceStore(), registry.Global())
defaultManager := core_manager.NewResourceManager(builder.ResourceStore())
customManagers := map[core_model.ResourceType]core_manager.ResourceManager{}
customizableManager := core_manager.NewCustomizableResourceManager(defaultManager, customManagers, registry.Global())
meshManager := mesh_managers.NewMeshManager(builder.ResourceStore(), builder.BuiltinCaManager(), customizableManager, builder.SecretManager())
customizableManager := core_manager.NewCustomizableResourceManager(defaultManager, customManagers)
meshManager := mesh_managers.NewMeshManager(builder.ResourceStore(), builder.BuiltinCaManager(), customizableManager, builder.SecretManager(), registry.Global())
customManagers[mesh.MeshType] = meshManager
builder.WithResourceManager(customizableManager)
}
Expand Down
3 changes: 1 addition & 2 deletions pkg/core/logs/matcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
core_manager "github.com/Kong/kuma/pkg/core/resources/manager"
"github.com/Kong/kuma/pkg/core/resources/store"
"github.com/Kong/kuma/pkg/plugins/resources/memory"
test_resources "github.com/Kong/kuma/pkg/test/resources"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
Expand All @@ -24,7 +23,7 @@ var _ = Describe("Matcher", func() {
var backendFile3 *mesh_proto.LoggingBackend

BeforeEach(func() {
manager = core_manager.NewResourceManager(memory.NewStore(), test_resources.Global())
manager = core_manager.NewResourceManager(memory.NewStore())
matcher = logs.TrafficLogsMatcher{manager}

// given mesh with 3 backends and file1 backend as default
Expand Down
30 changes: 24 additions & 6 deletions pkg/core/managers/apis/mesh/mesh_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
core_mesh "github.com/Kong/kuma/pkg/core/resources/apis/mesh"
core_manager "github.com/Kong/kuma/pkg/core/resources/manager"
core_model "github.com/Kong/kuma/pkg/core/resources/model"
core_registry "github.com/Kong/kuma/pkg/core/resources/registry"
core_store "github.com/Kong/kuma/pkg/core/resources/store"
secrets_manager "github.com/Kong/kuma/pkg/core/secrets/manager"
)
Expand All @@ -20,12 +21,14 @@ func NewMeshManager(
builtinCaManager builtin_ca.BuiltinCaManager,
otherManagers core_manager.ResourceManager,
secretManager secrets_manager.SecretManager,
registry core_registry.TypeRegistry,
) core_manager.ResourceManager {
return &meshManager{
store: store,
builtinCaManager: builtinCaManager,
otherManagers: otherManagers,
secretManager: secretManager,
registry: registry,
}
}

Expand All @@ -34,6 +37,7 @@ type meshManager struct {
builtinCaManager builtin_ca.BuiltinCaManager
otherManagers core_manager.ResourceManager
secretManager secrets_manager.SecretManager
registry core_registry.TypeRegistry
}

func (m *meshManager) Get(ctx context.Context, resource core_model.Resource, fs ...core_store.GetOptionsFunc) error {
Expand Down Expand Up @@ -97,24 +101,38 @@ func (m *meshManager) Delete(ctx context.Context, resource core_model.Resource,
}
}
opts := core_store.NewDeleteOptions(fs...)
// delete all the secrets including CA
// delete CA
name := core_store.NewDeleteOptions(fs...).Mesh
if err := m.builtinCaManager.Delete(ctx, name); err != nil {
return errors.Wrapf(err, "failed to delete Builtin CA for a given mesh")
}
// delete all other secrets
if err := m.secretManager.DeleteAll(ctx, core_store.DeleteAllByMesh(opts.Mesh)); err != nil {
return errors.Wrap(err, "could not delete associated secrets")
}
// delete other resources associated by mesh
if err := m.otherManagers.DeleteAll(ctx, core_store.DeleteAllByMesh(opts.Name)); err != nil {
return errors.Wrap(err, "could not delete associated resources")
for _, typ := range m.registry.ListTypes() {
list, err := m.registry.NewList(typ)
if err != nil {
return err
}
if err := m.otherManagers.DeleteAll(ctx, list, core_store.DeleteAllByMesh(opts.Name)); err != nil {
return errors.Wrap(err, "could not delete associated resources")
}
}
return nil
}

func (m *meshManager) DeleteAll(ctx context.Context, fs ...core_store.DeleteAllOptionsFunc) error {
list := &core_mesh.MeshResourceList{}
func (m *meshManager) DeleteAll(ctx context.Context, list core_model.ResourceList, fs ...core_store.DeleteAllOptionsFunc) error {
meshes, err := m.meshes(list)
if err != nil {
return err
}
opts := core_store.NewDeleteAllOptions(fs...)
if err := m.List(ctx, list, core_store.ListByMesh(opts.Mesh)); err != nil {
return err
}
for _, item := range list.Items {
for _, item := range meshes.Items {
if err := m.Delete(ctx, item, core_store.DeleteBy(core_model.MetaToResourceKey(item.Meta))); err != nil {
return err
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/core/managers/apis/mesh/mesh_manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,9 @@ var _ = Describe("Mesh Manager", func() {
resStore = memory.NewStore()
secretManager := secrets_manager.NewSecretManager(secrets_store.NewSecretStore(resStore), cipher.None())
caManager = builtin.NewBuiltinCaManager(secretManager)
manager := manager.NewResourceManager(resStore, test_resources.Global())
manager := manager.NewResourceManager(resStore)

resManager = NewMeshManager(resStore, caManager, manager, secretManager)
resManager = NewMeshManager(resStore, caManager, manager, secretManager, test_resources.Global())
})

Describe("Create()", func() {
Expand Down
14 changes: 3 additions & 11 deletions pkg/core/resources/manager/customizable_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,19 @@ import (
"context"

"github.com/Kong/kuma/pkg/core/resources/model"
"github.com/Kong/kuma/pkg/core/resources/registry"
"github.com/Kong/kuma/pkg/core/resources/store"
)

func NewCustomizableResourceManager(defaultManager ResourceManager, customManagers map[model.ResourceType]ResourceManager, typRegistry registry.TypeRegistry) ResourceManager {
func NewCustomizableResourceManager(defaultManager ResourceManager, customManagers map[model.ResourceType]ResourceManager) ResourceManager {
return &customizableResourceManager{
defaultManager: defaultManager,
customManagers: customManagers,
registry: typRegistry,
}
}

type customizableResourceManager struct {
defaultManager ResourceManager
customManagers map[model.ResourceType]ResourceManager
registry registry.TypeRegistry
}

func (m *customizableResourceManager) Get(ctx context.Context, resource model.Resource, fs ...store.GetOptionsFunc) error {
Expand All @@ -38,13 +35,8 @@ func (m *customizableResourceManager) Delete(ctx context.Context, resource model
return m.resourceManager(resource.GetType()).Delete(ctx, resource, fs...)
}

func (m *customizableResourceManager) DeleteAll(ctx context.Context, fs ...store.DeleteAllOptionsFunc) error {
for _, typ := range m.registry.ListTypes() {
if err := m.resourceManager(typ).DeleteAll(ctx, fs...); err != nil {
return err
}
}
return nil
func (m *customizableResourceManager) DeleteAll(ctx context.Context, list model.ResourceList, fs ...store.DeleteAllOptionsFunc) error {
return m.resourceManager(list.GetItemType()).DeleteAll(ctx, list, fs...)
}

func (m *customizableResourceManager) Update(ctx context.Context, resource model.Resource, fs ...store.UpdateOptionsFunc) error {
Expand Down
29 changes: 10 additions & 19 deletions pkg/core/resources/manager/manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"context"
"github.com/Kong/kuma/pkg/core/resources/apis/mesh"
"github.com/Kong/kuma/pkg/core/resources/model"
"github.com/Kong/kuma/pkg/core/resources/registry"
"github.com/Kong/kuma/pkg/core/resources/store"
"github.com/pkg/errors"
"strings"
Expand All @@ -14,23 +13,21 @@ type ResourceManager interface {
Create(context.Context, model.Resource, ...store.CreateOptionsFunc) error
Update(context.Context, model.Resource, ...store.UpdateOptionsFunc) error
Delete(context.Context, model.Resource, ...store.DeleteOptionsFunc) error
DeleteAll(context.Context, ...store.DeleteAllOptionsFunc) error
DeleteAll(context.Context, model.ResourceList, ...store.DeleteAllOptionsFunc) error
Get(context.Context, model.Resource, ...store.GetOptionsFunc) error
List(context.Context, model.ResourceList, ...store.ListOptionsFunc) error
}

func NewResourceManager(store store.ResourceStore, typeRegistry registry.TypeRegistry) ResourceManager {
func NewResourceManager(store store.ResourceStore) ResourceManager {
return &resourcesManager{
Store: store,
Registry: typeRegistry,
Store: store,
}
}

var _ ResourceManager = &resourcesManager{}

type resourcesManager struct {
Store store.ResourceStore
Registry registry.TypeRegistry
Store store.ResourceStore
}

func (r *resourcesManager) Get(ctx context.Context, resource model.Resource, fs ...store.GetOptionsFunc) error {
Expand Down Expand Up @@ -66,22 +63,16 @@ func (r *resourcesManager) Delete(ctx context.Context, resource model.Resource,
return r.Store.Delete(ctx, resource, fs...)
}

func (r *resourcesManager) DeleteAll(ctx context.Context, fs ...store.DeleteAllOptionsFunc) error {
func (r *resourcesManager) DeleteAll(ctx context.Context, list model.ResourceList, fs ...store.DeleteAllOptionsFunc) error {
opts := store.NewDeleteAllOptions(fs...)

for _, typ := range r.Registry.ListTypes() {
list, err := r.Registry.NewList(typ)
if err != nil {
return err
}
if err := r.List(ctx, list, store.ListByMesh(opts.Mesh)); err != nil {
if err := r.List(ctx, list, store.ListByMesh(opts.Mesh)); err != nil {
return err
}
for _, obj := range list.GetItems() {
if err := r.Delete(ctx, obj, store.DeleteBy(model.MetaToResourceKey(obj.GetMeta()))); err != nil {
return err
}
for _, obj := range list.GetItems() {
if err := r.Delete(ctx, obj, store.DeleteBy(model.MetaToResourceKey(obj.GetMeta()))); err != nil {
return err
}
}
}
return nil
}
Expand Down
7 changes: 3 additions & 4 deletions pkg/core/resources/manager/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"github.com/Kong/kuma/pkg/core/resources/store"
"github.com/Kong/kuma/pkg/plugins/resources/memory"
"github.com/Kong/kuma/pkg/test/apis/sample/v1alpha1"
test_resources "github.com/Kong/kuma/pkg/test/resources"
"github.com/Kong/kuma/pkg/test/resources/apis/sample"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
Expand All @@ -21,7 +20,7 @@ var _ = Describe("Resource Manager", func() {

BeforeEach(func() {
resStore = memory.NewStore()
resManager = manager.NewResourceManager(resStore, test_resources.Global())
resManager = manager.NewResourceManager(resStore)
})

createSampleMesh := func(name string) error {
Expand Down Expand Up @@ -66,7 +65,7 @@ var _ = Describe("Resource Manager", func() {
})

Describe("DeleteAll()", func() {
It("should delete all resources withing a mesh", func() {
It("should delete all resources within a mesh", func() {
// setup
Expect(createSampleMesh("mesh-1")).To(Succeed())
Expect(createSampleMesh("mesh-2")).To(Succeed())
Expand All @@ -76,7 +75,7 @@ var _ = Describe("Resource Manager", func() {
Expect(err).ToNot(HaveOccurred())

// when
err = resManager.DeleteAll(context.Background(), store.DeleteAllByMesh("mesh-1"))
err = resManager.DeleteAll(context.Background(), &sample.TrafficRouteResourceList{}, store.DeleteAllByMesh("mesh-1"))

// then
Expect(err).ToNot(HaveOccurred())
Expand Down
6 changes: 3 additions & 3 deletions pkg/test/runtime/runtime.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ func newBuiltinCaManager(builder *core_runtime.Builder) builtin_ca.BuiltinCaMana
}

func newResourceManager(builder *core_runtime.Builder) core_manager.ResourceManager {
defaultManager := core_manager.NewResourceManager(builder.ResourceStore(), registry.Global())
defaultManager := core_manager.NewResourceManager(builder.ResourceStore())
customManagers := map[core_model.ResourceType]core_manager.ResourceManager{}
customizableManager := core_manager.NewCustomizableResourceManager(defaultManager, customManagers, registry.Global())
meshManager := mesh_managers.NewMeshManager(builder.ResourceStore(), builder.BuiltinCaManager(), customizableManager, builder.SecretManager())
customizableManager := core_manager.NewCustomizableResourceManager(defaultManager, customManagers)
meshManager := mesh_managers.NewMeshManager(builder.ResourceStore(), builder.BuiltinCaManager(), customizableManager, builder.SecretManager(), registry.Global())
customManagers[core_mesh.MeshType] = meshManager
return customizableManager
}
3 changes: 1 addition & 2 deletions pkg/xds/bootstrap/server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import (
"github.com/Kong/kuma/pkg/core/resources/store"
"github.com/Kong/kuma/pkg/plugins/resources/memory"
"github.com/Kong/kuma/pkg/test"
test_resources "github.com/Kong/kuma/pkg/test/resources"
. "github.com/onsi/ginkgo"
. "github.com/onsi/ginkgo/extensions/table"
. "github.com/onsi/gomega"
Expand All @@ -29,7 +28,7 @@ var _ = Describe("Bootstrap Server", func() {
var baseUrl string

BeforeEach(func() {
resManager = manager.NewResourceManager(memory.NewStore(), test_resources.Global())
resManager = manager.NewResourceManager(memory.NewStore())
config = xds_config.DefaultBootstrapParamsConfig()

port, err := test.GetFreePort()
Expand Down
3 changes: 1 addition & 2 deletions pkg/xds/server/dataplane_status_sink_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package server
import (
"context"
"github.com/Kong/kuma/pkg/core/resources/manager"
test_resources "github.com/Kong/kuma/pkg/test/resources"
"time"

. "github.com/onsi/ginkgo"
Expand Down Expand Up @@ -150,7 +149,7 @@ var _ = Describe("DataplaneInsightSink", func() {
lastSeenVersion := ""

// given
statusStore := NewDataplaneInsightStore(manager.NewResourceManager(store, test_resources.Global()))
statusStore := NewDataplaneInsightStore(manager.NewResourceManager(store))

// when
err := statusStore.Upsert(key, proto.Clone(subscription).(*mesh_proto.DiscoverySubscription))
Expand Down
7 changes: 3 additions & 4 deletions pkg/xds/server/proxy_template_resolver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package server

import (
"context"
test_resources "github.com/Kong/kuma/pkg/test/resources"
"sort"

"github.com/Kong/kuma/pkg/core/resources/manager"
Expand Down Expand Up @@ -34,7 +33,7 @@ var _ = Describe("Reconcile", func() {

// setup
resolver := &simpleProxyTemplateResolver{
ResourceManager: manager.NewResourceManager(memory.NewStore(), test_resources.Global()),
ResourceManager: manager.NewResourceManager(memory.NewStore()),
DefaultProxyTemplate: &mesh_proto.ProxyTemplate{},
}

Expand Down Expand Up @@ -96,7 +95,7 @@ var _ = Describe("Reconcile", func() {
}

resolver := &simpleProxyTemplateResolver{
ResourceManager: manager.NewResourceManager(memStore, test_resources.Global()),
ResourceManager: manager.NewResourceManager(memStore),
DefaultProxyTemplate: &mesh_proto.ProxyTemplate{},
}

Expand All @@ -121,7 +120,7 @@ var _ = Describe("Reconcile", func() {

// setup
resolver := &simpleProxyTemplateResolver{
ResourceManager: manager.NewResourceManager(memory.NewStore(), test_resources.Global()),
ResourceManager: manager.NewResourceManager(memory.NewStore()),
DefaultProxyTemplate: &mesh_proto.ProxyTemplate{},
}

Expand Down
3 changes: 1 addition & 2 deletions pkg/xds/server/snapshot_generator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package server
import (
"github.com/Kong/kuma/pkg/core/logs"
"github.com/Kong/kuma/pkg/core/permissions"
test_resources "github.com/Kong/kuma/pkg/test/resources"
"io/ioutil"
"path/filepath"

Expand All @@ -28,7 +27,7 @@ var _ = Describe("Reconcile", func() {

gen := templateSnapshotGenerator{
ProxyTemplateResolver: &simpleProxyTemplateResolver{
ResourceManager: manager.NewResourceManager(memory.NewStore(), test_resources.Global()),
ResourceManager: manager.NewResourceManager(memory.NewStore()),
DefaultProxyTemplate: template.DefaultProxyTemplate,
},
}
Expand Down

0 comments on commit 5a651c8

Please sign in to comment.