Skip to content

Commit

Permalink
fix issues from manual testing and remote deploy (#3411) (#3413)
Browse files Browse the repository at this point in the history
* fix: remote destroy parsing

Signed-off-by: Javier López Barba <javier@okteto.com>

* feat: destroy marshalling

Signed-off-by: Javier López Barba <javier@okteto.com>

* fix: extertnals not going throught proxy

Signed-off-by: Javier López Barba <javier@okteto.com>

* fix: logger

Signed-off-by: Javier López Barba <javier@okteto.com>

* fix: unit tests

Signed-off-by: Javier López Barba <javier@okteto.com>

* address feedback

Signed-off-by: Javier López Barba <javier@okteto.com>

---------

Signed-off-by: Javier López Barba <javier@okteto.com>
(cherry picked from commit d1f141f)

Co-authored-by: Javier López Barba <javier@okteto.com>
  • Loading branch information
github-actions[bot] and jLopezbarb committed Mar 1, 2023
1 parent 6204c4c commit 42456b2
Show file tree
Hide file tree
Showing 8 changed files with 306 additions and 15 deletions.
6 changes: 5 additions & 1 deletion cmd/deploy/deploy.go
Expand Up @@ -90,10 +90,14 @@ type DeployCommand struct {
isRemote bool
}

type ExternalResourceValidatorInterface interface {
Validate(ctx context.Context, name string, ns string, externalInfo *externalresource.ExternalResource) error
}

type ExternalResourceInterface interface {
Deploy(ctx context.Context, name string, ns string, externalInfo *externalresource.ExternalResource) error
List(ctx context.Context, ns string, labelSelector string) ([]externalresource.ExternalResource, error)
Validate(ctx context.Context, name string, ns string, externalInfo *externalresource.ExternalResource) error
ExternalResourceValidatorInterface
}

type deployerInterface interface {
Expand Down
6 changes: 5 additions & 1 deletion cmd/deploy/deploy_test.go
Expand Up @@ -734,6 +734,10 @@ func (f *fakeExternalControlProvider) getFakeExternalControl(cp okteto.K8sClient
return f.control, f.err
}

func (f *fakeExternalControlProvider) getFakeExternalControlValidator(cp okteto.K8sClientProvider) (ExternalResourceValidatorInterface, error) {
return f.control, f.err
}

func TestDeployExternals(t *testing.T) {
ctx := context.Background()
okteto.CurrentStore = &okteto.OktetoContextStore{
Expand Down Expand Up @@ -915,7 +919,7 @@ func TestValidateK8sResources(t *testing.T) {
}

ld := localDeployer{
GetExternalControl: cp.getFakeExternalControl,
GetExternalControlForValidator: cp.getFakeExternalControlValidator,
}

if tc.expectedErr {
Expand Down
14 changes: 13 additions & 1 deletion cmd/deploy/endpoints.go
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/okteto/okteto/pkg/externalresource"
k8sExternalResources "github.com/okteto/okteto/pkg/externalresource/k8s"
"github.com/okteto/okteto/pkg/format"
kconfig "github.com/okteto/okteto/pkg/k8s/kubeconfig"
oktetoLog "github.com/okteto/okteto/pkg/log"
"github.com/okteto/okteto/pkg/model"
"github.com/okteto/okteto/pkg/okteto"
Expand Down Expand Up @@ -228,8 +229,19 @@ func (dc *endpointGetter) showEndpoints(ctx context.Context, opts *EndpointsOpti
return nil
}

func getExternalControlForValidator(cp okteto.K8sClientProvider) (ExternalResourceValidatorInterface, error) {
_, cfg, err := cp.Provide(okteto.Context().Cfg)
if err != nil {
return nil, err
}
return &externalresource.K8sControl{
ClientProvider: k8sExternalResources.GetExternalClient,
Cfg: cfg,
}, nil
}

func getExternalControlFromCtx(cp okteto.K8sClientProvider, filename string) (ExternalResourceInterface, error) {
_, proxyConfig, err := cp.Provide(okteto.Context().Cfg)
_, proxyConfig, err := cp.Provide(kconfig.Get([]string{filename}))
if err != nil {
return nil, err
}
Expand Down
25 changes: 14 additions & 11 deletions cmd/deploy/local.go
Expand Up @@ -44,7 +44,9 @@ type localDeployer struct {
Executor executor.ManifestExecutor
TempKubeconfigFile string
K8sClientProvider okteto.K8sClientProvider
GetExternalControl func(cp okteto.K8sClientProvider, filename string) (ExternalResourceInterface, error)

GetExternalControlForValidator func(cp okteto.K8sClientProvider) (ExternalResourceValidatorInterface, error)
GetExternalControl func(cp okteto.K8sClientProvider, filename string) (ExternalResourceInterface, error)

cwd string
deployWaiter deployWaiter
Expand Down Expand Up @@ -82,15 +84,16 @@ func newLocalDeployer(ctx context.Context, cwd string, options *Options) (*local

clientProvider := okteto.NewK8sClientProvider()
return &localDeployer{
Kubeconfig: kubeconfig,
Executor: executor.NewExecutor(oktetoLog.GetOutputFormat(), options.RunWithoutBash),
Proxy: proxy,
TempKubeconfigFile: GetTempKubeConfigFile(tempKubeconfigName),
K8sClientProvider: clientProvider,
GetExternalControl: getExternalControlFromCtx,
deployWaiter: newDeployWaiter(clientProvider),
isRemote: true,
Fs: afero.NewOsFs(),
Kubeconfig: kubeconfig,
Executor: executor.NewExecutor(oktetoLog.GetOutputFormat(), options.RunWithoutBash),
Proxy: proxy,
TempKubeconfigFile: GetTempKubeConfigFile(tempKubeconfigName),
K8sClientProvider: clientProvider,
GetExternalControlForValidator: getExternalControlForValidator,
GetExternalControl: getExternalControlFromCtx,
deployWaiter: newDeployWaiter(clientProvider),
isRemote: true,
Fs: afero.NewOsFs(),
}, nil
}

Expand Down Expand Up @@ -385,7 +388,7 @@ func (ld *localDeployer) validateK8sResources(ctx context.Context, manifest *mod
// In a cluster not managed by Okteto it is not necessary to validate the externals
// because they will not be deployed.
if okteto.IsOkteto() {
control, err := ld.GetExternalControl(ld.K8sClientProvider, ld.TempKubeconfigFile)
control, err := ld.GetExternalControlForValidator(ld.K8sClientProvider)
if err != nil {
return err
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/cmd/build/logger.go
Expand Up @@ -31,7 +31,6 @@ const (
)

func deployDisplayer(ctx context.Context, ch chan *client.SolveStatus) error {

// TODO: import build timeout
timeout := time.NewTicker(10 * time.Minute)
defer timeout.Stop()
Expand All @@ -46,6 +45,7 @@ func deployDisplayer(ctx context.Context, ch chan *client.SolveStatus) error {
for {
select {
case <-ctx.Done():
oktetoLog.StopSpinner()
return ctx.Err()
case <-timeout.C:
case ss, ok := <-ch:
Expand All @@ -60,6 +60,7 @@ func deployDisplayer(ctx context.Context, ch chan *client.SolveStatus) error {
done = true
}
if done {
oktetoLog.StopSpinner()
return nil
}
}
Expand Down
7 changes: 7 additions & 0 deletions pkg/model/manifest.go
Expand Up @@ -237,6 +237,13 @@ func NewDeployInfo() *DeployInfo {
}
}

// NewDeployInfo creates a deploy Info
func NewDestroyInfo() *DestroyInfo {
return &DestroyInfo{
Commands: []DeployCommand{},
}
}

func getManifestFromOktetoFile(cwd string) (*Manifest, error) {
manifestPath, err := discovery.GetOktetoManifestPath(cwd)
if err != nil {
Expand Down
55 changes: 55 additions & 0 deletions pkg/model/serializer.go
Expand Up @@ -1078,6 +1078,61 @@ func isManifestFieldNotFound(err error) bool {
return false
}

func (d *DestroyInfo) UnmarshalYAML(unmarshal func(interface{}) error) error {
var commandsString []string
err := unmarshal(&commandsString)
if err == nil {
d.Commands = []DeployCommand{}
for _, cmdString := range commandsString {
d.Commands = append(d.Commands, DeployCommand{
Name: cmdString,
Command: cmdString,
})
}
return nil
}
var commands []DeployCommand
err = unmarshal(&commands)
if err == nil {
d.Commands = commands
return nil
}
type destroyInfoRaw DestroyInfo
var destroy destroyInfoRaw
err = unmarshal(&destroy)
if err != nil {
return err
}

*d = DestroyInfo(destroy)
return nil
}

func (d *DestroyInfo) MarshalYAML() (interface{}, error) {
isCommandList := true
for _, cmd := range d.Commands {
if cmd.Command != cmd.Name {
isCommandList = false
}
}
if isCommandList {
result := []string{}
for _, cmd := range d.Commands {
result = append(result, cmd.Command)
}
return result, nil
}
return d, nil
}

func (m *Manifest) MarshalYAML() (interface{}, error) {
if m.Destroy == nil || len(m.Destroy.Commands) == 0 {
m.Destroy = nil
return m, nil
}
return m, nil
}

func (d *Dev) MarshalYAML() (interface{}, error) {
type dev Dev // prevent recursion
toMarshall := dev(*d)
Expand Down

0 comments on commit 42456b2

Please sign in to comment.