Skip to content

Commit

Permalink
fix: infer stack was overriding dev and build (#2324)
Browse files Browse the repository at this point in the history
Signed-off-by: Javier López Barba <javier@okteto.com>
  • Loading branch information
jLopezbarb committed Mar 8, 2022
1 parent fea9900 commit 4e0e7d9
Show file tree
Hide file tree
Showing 2 changed files with 305 additions and 4 deletions.
19 changes: 15 additions & 4 deletions pkg/model/manifest.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,11 @@ func GetManifestV2(manifestPath string) (*Manifest, error) {
if err != nil {
return nil, err
}
inferredManifest.Deploy.Compose.Stack.Endpoints = devManifest.Deploy.Endpoints

if devManifest != nil && devManifest.Deploy != nil && len(devManifest.Deploy.Endpoints) != 0 {
inferredManifest.Deploy.Compose.Stack.Endpoints = devManifest.Deploy.Endpoints
}

}
if devManifest != nil {
inferredManifest.mergeWithOktetoManifest(devManifest)
Expand Down Expand Up @@ -568,8 +572,13 @@ func (m *Manifest) InferFromStack() (*Manifest, error) {
d.EnvFiles = svcInfo.EnvFiles
d.Environment = svcInfo.Environment
d.Name = svcName

m.Dev[svcName] = d
err := d.SetDefaults()
if err != nil {
return nil, err
}
if _, ok := m.Dev[svcName]; !ok {
m.Dev[svcName] = d
}

if svcInfo.Build == nil {
continue
Expand All @@ -579,7 +588,9 @@ func (m *Manifest) InferFromStack() (*Manifest, error) {
buildInfo.Image = svcInfo.Image
}
buildInfo.VolumesToInclude = toMount
m.Build[svcName] = buildInfo
if _, ok := m.Build[svcName]; !ok {
m.Build[svcName] = buildInfo
}
}
m.setDefaults()
return m, nil
Expand Down
290 changes: 290 additions & 0 deletions pkg/model/manifest_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,11 @@ package model
import (
"os"
"testing"
"time"

"github.com/stretchr/testify/assert"
apiv1 "k8s.io/api/core/v1"
"k8s.io/utils/pointer"
)

func TestManifestExpandEnvs(t *testing.T) {
Expand Down Expand Up @@ -78,3 +81,290 @@ devs:
})
}
}

func TestInferFromStack(t *testing.T) {
stack := &Stack{
Services: map[string]*Service{
"test": {
Build: &BuildInfo{
Name: "test",
Context: "test",
Dockerfile: "test/Dockerfile",
},
Ports: []Port{
{
HostPort: 8080,
ContainerPort: 8080,
},
},
},
},
}
tests := []struct {
name string
currentManifest *Manifest
expectedManifest *Manifest
}{
{
name: "infer from stack empty dev",
currentManifest: &Manifest{
Dev: ManifestDevs{},
Build: ManifestBuild{},
Deploy: &DeployInfo{
Compose: &ComposeInfo{
Stack: stack,
},
},
},
expectedManifest: &Manifest{
Build: ManifestBuild{
"test": &BuildInfo{
Context: "test",
Dockerfile: "test/Dockerfile",
VolumesToInclude: []StackVolume{},
},
},
Dev: ManifestDevs{
"test": &Dev{
Name: "test",
Metadata: &Metadata{
Labels: Labels{},
Annotations: Annotations{},
},
Selector: Selector{},
Forward: []Forward{
{
Local: 8080,
Remote: 8080,
},
},
EmptyImage: true,
Image: &DevBuildInfo{
Context: ".",
Dockerfile: "Dockerfile",
},
Push: &DevBuildInfo{
Context: ".",
Dockerfile: "Dockerfile",
},
ImagePullPolicy: apiv1.PullAlways,
Probes: &Probes{},
Lifecycle: &Lifecycle{},
Workdir: "/okteto",
SecurityContext: &SecurityContext{
RunAsUser: pointer.Int64(0),
RunAsGroup: pointer.Int64(0),
FSGroup: pointer.Int64(0),
},
SSHServerPort: 2222,
Volumes: []Volume{},
Timeout: Timeout{
Default: 60 * time.Second,
Resources: 120 * time.Second,
},
InitContainer: InitContainer{
Image: OktetoBinImageTag,
},
PersistentVolumeInfo: &PersistentVolumeInfo{
Enabled: true,
},
Secrets: []Secret{},
Command: Command{
Values: []string{"sh"},
},
Interface: "0.0.0.0",
Services: []*Dev{},
Sync: Sync{
RescanInterval: 300,
Folders: []SyncFolder{
{
LocalPath: ".",
RemotePath: "/okteto",
},
},
},
},
},
Deploy: &DeployInfo{
Compose: &ComposeInfo{
Stack: stack,
},
},
},
},
{
name: "infer from stack not overriding build",
currentManifest: &Manifest{
Dev: ManifestDevs{},
Build: ManifestBuild{
"test": &BuildInfo{
Context: "test-1",
Dockerfile: "test-1/Dockerfile",
},
},
Deploy: &DeployInfo{
Compose: &ComposeInfo{
Stack: stack,
},
},
},
expectedManifest: &Manifest{
Build: ManifestBuild{
"test": &BuildInfo{
Context: "test-1",
Dockerfile: "test-1/Dockerfile",
},
},
Dev: ManifestDevs{
"test": &Dev{
Name: "test",
Metadata: &Metadata{
Labels: Labels{},
Annotations: Annotations{},
},
Selector: Selector{},
Forward: []Forward{
{
Local: 8080,
Remote: 8080,
},
},
EmptyImage: true,
Image: &DevBuildInfo{
Context: ".",
Dockerfile: "Dockerfile",
},
Push: &DevBuildInfo{
Context: ".",
Dockerfile: "Dockerfile",
},
ImagePullPolicy: apiv1.PullAlways,
Probes: &Probes{},
Lifecycle: &Lifecycle{},
Workdir: "/okteto",
SecurityContext: &SecurityContext{
RunAsUser: pointer.Int64(0),
RunAsGroup: pointer.Int64(0),
FSGroup: pointer.Int64(0),
},
SSHServerPort: 2222,
Volumes: []Volume{},
Timeout: Timeout{
Default: 60 * time.Second,
Resources: 120 * time.Second,
},
InitContainer: InitContainer{
Image: OktetoBinImageTag,
},
PersistentVolumeInfo: &PersistentVolumeInfo{
Enabled: true,
},
Secrets: []Secret{},
Command: Command{
Values: []string{"sh"},
},
Interface: "0.0.0.0",
Services: []*Dev{},
Sync: Sync{
RescanInterval: 300,
Folders: []SyncFolder{
{
LocalPath: ".",
RemotePath: "/okteto",
},
},
},
},
},
Deploy: &DeployInfo{
Compose: &ComposeInfo{
Stack: stack,
},
},
},
},
{
name: "infer from stack not overriding dev",
currentManifest: &Manifest{
Dev: ManifestDevs{
"test": &Dev{
Name: "one",
Namespace: "test",
},
},
Build: ManifestBuild{},
Deploy: &DeployInfo{
Compose: &ComposeInfo{
Stack: stack,
},
},
},
expectedManifest: &Manifest{
Build: ManifestBuild{
"test": &BuildInfo{
Context: "test",
Dockerfile: "test/Dockerfile",
VolumesToInclude: []StackVolume{},
},
},
Dev: ManifestDevs{
"test": &Dev{
Name: "one",
Namespace: "test",
Metadata: &Metadata{
Labels: Labels{},
Annotations: Annotations{},
},
Selector: Selector{},
EmptyImage: true,
Image: &DevBuildInfo{
Context: ".",
Dockerfile: "Dockerfile",
},
ImagePullPolicy: apiv1.PullAlways,
Probes: &Probes{},
Lifecycle: &Lifecycle{},
Workdir: "/okteto",
SecurityContext: &SecurityContext{
RunAsUser: pointer.Int64(0),
RunAsGroup: pointer.Int64(0),
FSGroup: pointer.Int64(0),
},
SSHServerPort: 2222,
Volumes: []Volume{},
Timeout: Timeout{
Default: 60 * time.Second,
Resources: 120 * time.Second,
},
Command: Command{
Values: []string{"sh"},
},
Interface: "0.0.0.0",
Sync: Sync{
RescanInterval: 300,
Folders: []SyncFolder{
{
LocalPath: ".",
RemotePath: "/okteto",
},
},
},
},
},
Deploy: &DeployInfo{
Compose: &ComposeInfo{
Stack: stack,
},
},
},
},
}

for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result, err := tt.currentManifest.InferFromStack()
assert.NoError(t, err)
assert.Equal(t, tt.expectedManifest, result)
})
}
}

0 comments on commit 4e0e7d9

Please sign in to comment.