mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
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:
@@ -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
|
||||
}
|
||||
@@ -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)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user