fix: Remove resource addresses (#982)

These were added under the impression that there was significant
user-experience impact if multiple resources share the same name.

This hasn't proven to be true yet, so figured we'd take this out
until it becomes necessary.
This commit is contained in:
Kyle Carberry
2022-04-12 14:38:02 -05:00
committed by GitHub
parent 52271ff9f8
commit e8b310166f
14 changed files with 17 additions and 171 deletions
-49
View File
@@ -1,49 +0,0 @@
package provisionersdk
import (
"fmt"
"golang.org/x/xerrors"
"github.com/coder/coder/provisionersdk/proto"
)
// ResourceAddresses returns an index-matching slice of unique addresses
// to access resources.
func ResourceAddresses(resources []*proto.Resource) ([]string, error) {
resourcesByHost := map[string]*proto.Resource{}
for _, resource := range resources {
otherByName, exists := resourcesByHost[resource.Name]
if !exists {
resourcesByHost[resource.Name] = resource
continue
}
// If we have conflicting names, to reduce confusion we prepend the types.
delete(resourcesByHost, otherByName.Name)
otherAddress := fmt.Sprintf("%s.%s", otherByName.Type, otherByName.Name)
resourcesByHost[otherAddress] = otherByName
address := fmt.Sprintf("%s.%s", resource.Type, resource.Name)
_, exists = resourcesByHost[address]
if !exists {
resourcesByHost[address] = resource
continue
}
return nil, xerrors.Errorf("found resource with conflicting address %q", otherAddress)
}
addresses := make([]string, 0, len(resources))
for _, resource := range resources {
found := false
for host, other := range resourcesByHost {
if resource != other {
continue
}
found = true
addresses = append(addresses, host)
}
if !found {
panic(fmt.Sprintf("dev error: resource %s.%s wasn't given an address", resource.Type, resource.Name))
}
}
return addresses, nil
}
-63
View File
@@ -1,63 +0,0 @@
package provisionersdk_test
import (
"testing"
"github.com/stretchr/testify/require"
"github.com/coder/coder/provisionersdk"
"github.com/coder/coder/provisionersdk/proto"
)
func TestResourceAddresses(t *testing.T) {
t.Parallel()
t.Run("Single", func(t *testing.T) {
t.Parallel()
addresses, err := provisionersdk.ResourceAddresses([]*proto.Resource{{
Type: "google_compute_instance",
Name: "dev",
}})
require.NoError(t, err)
require.Len(t, addresses, 1)
require.Equal(t, addresses[0], "dev")
})
t.Run("Multiple", func(t *testing.T) {
t.Parallel()
addresses, err := provisionersdk.ResourceAddresses([]*proto.Resource{{
Type: "google_compute_instance",
Name: "linux",
}, {
Type: "google_compute_instance",
Name: "windows",
}})
require.NoError(t, err)
require.Len(t, addresses, 2)
require.Equal(t, addresses[0], "linux")
require.Equal(t, addresses[1], "windows")
})
t.Run("ConflictingDifferent", func(t *testing.T) {
t.Parallel()
addresses, err := provisionersdk.ResourceAddresses([]*proto.Resource{{
Type: "google_compute_instance",
Name: "dev",
}, {
Type: "kubernetes_pod",
Name: "dev",
}})
require.NoError(t, err)
require.Len(t, addresses, 2)
require.Equal(t, addresses[0], "google_compute_instance.dev")
require.Equal(t, addresses[1], "kubernetes_pod.dev")
})
t.Run("ConflictingSame", func(t *testing.T) {
t.Parallel()
_, err := provisionersdk.ResourceAddresses([]*proto.Resource{{
Type: "google_compute_instance",
Name: "dev",
}, {
Type: "google_compute_instance",
Name: "dev",
}})
require.Error(t, err)
})
}