-
Notifications
You must be signed in to change notification settings - Fork 20
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
274 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* | ||
SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
package fake | ||
|
||
import ( | ||
"errors" | ||
|
||
"github.com/gardener/gardenctl-v2/pkg/target" | ||
"sigs.k8s.io/controller-runtime/pkg/client" | ||
) | ||
|
||
type fakeClientProvider struct { | ||
fakeClient client.Client | ||
} | ||
|
||
var _ target.ClientProvider = &fakeClientProvider{} | ||
|
||
// NewFakeClientProvider returns a new ClientProvider that returns the same | ||
// client for all FromFile/FromBytes calls. | ||
func NewFakeClientProvider(fakeClient client.Client) target.ClientProvider { | ||
return &fakeClientProvider{ | ||
fakeClient: fakeClient, | ||
} | ||
} | ||
|
||
func (p *fakeClientProvider) FromFile(kubeconfigFile string) (client.Client, error) { | ||
if p.fakeClient == nil { | ||
return nil, errors.New("no fake client configured") | ||
} | ||
|
||
return p.fakeClient, nil | ||
} | ||
|
||
func (p *fakeClientProvider) FromBytes(kubeconfig []byte) (client.Client, error) { | ||
if p.fakeClient == nil { | ||
return nil, errors.New("no fake client configured") | ||
} | ||
|
||
return p.fakeClient, nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
/* | ||
SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package fake | ||
|
||
import ( | ||
"github.com/gardener/gardenctl-v2/internal/util" | ||
"github.com/gardener/gardenctl-v2/pkg/target" | ||
) | ||
|
||
// Factory implements util.Factory interface | ||
type Factory struct { | ||
// Either set a specific Manager instance, or overwrite the | ||
// individual providers/caches down below. | ||
ManagerImpl target.Manager | ||
|
||
// Override these to customize the created manager. | ||
Config *target.Config | ||
ClientProviderImpl target.ClientProvider | ||
KubeconfigCacheImpl target.KubeconfigCache | ||
TargetProviderImpl target.TargetProvider | ||
|
||
// Override the clock implementation. Will use a real clock if not set. | ||
ClockImpl util.Clock | ||
|
||
// GardenHomeDirectory is the home directory for all gardenctl | ||
// related files. While some files can be explicitly loaded from | ||
// different locations, cache files will always be placed inside | ||
// the garden home. | ||
GardenHomeDirectory string | ||
|
||
// ConfigFile is the location of the gardenctlv2 configuration file. | ||
// This can be overriden via a CLI flag and defaults to ~/.garden/gardenctlv2.yaml | ||
// if empty. | ||
ConfigFile string | ||
|
||
// TargetFile is the filename where the currently active target is located. | ||
TargetFile string | ||
} | ||
|
||
func NewFakeManagerFactory(manager target.Manager) util.Factory { | ||
return &Factory{ | ||
ManagerImpl: manager, | ||
} | ||
} | ||
|
||
func NewFakeFactory(config *target.Config, clientProvider target.ClientProvider, kubeconfigCache target.KubeconfigCache, targetProvider target.TargetProvider) util.Factory { | ||
if config == nil { | ||
config = &target.Config{} | ||
} | ||
|
||
if clientProvider == nil { | ||
clientProvider = NewFakeClientProvider(nil) | ||
} | ||
|
||
if kubeconfigCache == nil { | ||
kubeconfigCache = NewFakeKubeconfigCache() | ||
} | ||
|
||
if targetProvider == nil { | ||
targetProvider = NewFakeTargetProvider(nil) | ||
} | ||
|
||
return &Factory{ | ||
Config: config, | ||
ClientProviderImpl: clientProvider, | ||
KubeconfigCacheImpl: kubeconfigCache, | ||
TargetProviderImpl: targetProvider, | ||
} | ||
} | ||
|
||
func (f *Factory) Manager() (target.Manager, error) { | ||
if f.ManagerImpl != nil { | ||
return f.ManagerImpl, nil | ||
} | ||
|
||
return target.NewManager(f.Config, f.TargetProviderImpl, f.ClientProviderImpl, f.KubeconfigCacheImpl) | ||
} | ||
|
||
func (f *Factory) HomeDir() string { | ||
return f.GardenHomeDirectory | ||
} | ||
|
||
func (f *Factory) Clock() util.Clock { | ||
if f.ClockImpl != nil { | ||
return f.ClockImpl | ||
} | ||
|
||
return &util.RealClock{} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
/* | ||
SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
|
||
package fake | ||
|
||
import ( | ||
"errors" | ||
"fmt" | ||
|
||
"github.com/gardener/gardenctl-v2/pkg/target" | ||
) | ||
|
||
type fakeKubeconfigCache struct { | ||
kubeconfigs map[string][]byte | ||
} | ||
|
||
var _ target.KubeconfigCache = &fakeKubeconfigCache{} | ||
|
||
func NewFakeKubeconfigCache() target.KubeconfigCache { | ||
return &fakeKubeconfigCache{ | ||
kubeconfigs: map[string][]byte{}, | ||
} | ||
} | ||
|
||
func (c *fakeKubeconfigCache) key(t target.Target) string { | ||
return fmt.Sprintf("%s;%s;%s;%s", t.GardenName(), t.ProjectName(), t.SeedName(), t.ShootName()) | ||
} | ||
|
||
func (c *fakeKubeconfigCache) Read(t target.Target) ([]byte, error) { | ||
kubeconfig, ok := c.kubeconfigs[c.key(t)] | ||
if !ok { | ||
return nil, errors.New("could not find kubeconfig") | ||
} | ||
|
||
return kubeconfig, nil | ||
} | ||
|
||
func (c *fakeKubeconfigCache) Write(t target.Target, kubeconfig []byte) error { | ||
c.kubeconfigs[c.key(t)] = kubeconfig | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* | ||
SPDX-FileCopyrightText: 2021 SAP SE or an SAP affiliate company and Gardener contributors | ||
SPDX-License-Identifier: Apache-2.0 | ||
*/ | ||
package fake | ||
|
||
import ( | ||
"errors" | ||
|
||
"github.com/gardener/gardenctl-v2/pkg/target" | ||
) | ||
|
||
type fakeTargetProvider struct { | ||
t target.Target | ||
} | ||
|
||
var _ target.TargetProvider = &fakeTargetProvider{} | ||
|
||
// NewFakeTargetProvider returns a new TargetProvider that | ||
// reads and writes from memory. | ||
func NewFakeTargetProvider(t target.Target) target.TargetProvider { | ||
return &fakeTargetProvider{ | ||
t: t, | ||
} | ||
} | ||
|
||
// Read returns the current target. | ||
func (p *fakeTargetProvider) Read() (target.Target, error) { | ||
if p.t == nil { | ||
return nil, errors.New("no target set") | ||
} | ||
|
||
return p.t, nil | ||
} | ||
|
||
// Write takes a target and saves it permanently. | ||
func (p *fakeTargetProvider) Write(t target.Target) error { | ||
p.t = t | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters