2023-08-07 21:37:03 +00:00
|
|
|
// Copyright (c) HashiCorp, Inc.
|
2023-08-11 13:12:13 +00:00
|
|
|
// SPDX-License-Identifier: BUSL-1.1
|
2023-08-07 21:37:03 +00:00
|
|
|
|
|
|
|
//go:build !consulent
|
|
|
|
|
|
|
|
package resource
|
|
|
|
|
|
|
|
import (
|
2023-10-27 13:55:02 +00:00
|
|
|
"google.golang.org/grpc/codes"
|
|
|
|
"google.golang.org/grpc/status"
|
|
|
|
|
2023-08-07 21:37:03 +00:00
|
|
|
"github.com/hashicorp/consul/acl"
|
|
|
|
"github.com/hashicorp/consul/internal/resource"
|
|
|
|
"github.com/hashicorp/consul/proto-public/pbresource"
|
2023-10-27 13:55:02 +00:00
|
|
|
pbtenancy "github.com/hashicorp/consul/proto-public/pbtenancy/v2beta1"
|
2023-08-07 21:37:03 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func v2TenancyToV1EntMeta(tenancy *pbresource.Tenancy) *acl.EnterpriseMeta {
|
|
|
|
return acl.DefaultEnterpriseMeta()
|
|
|
|
}
|
|
|
|
|
|
|
|
func v1EntMetaToV2Tenancy(reg *resource.Registration, entMeta *acl.EnterpriseMeta, tenancy *pbresource.Tenancy) {
|
|
|
|
if (reg.Scope == resource.ScopeNamespace || reg.Scope == resource.ScopePartition) && tenancy.Partition == "" {
|
|
|
|
tenancy.Partition = entMeta.PartitionOrDefault()
|
|
|
|
}
|
|
|
|
|
|
|
|
if reg.Scope == resource.ScopeNamespace && tenancy.Namespace == "" {
|
|
|
|
tenancy.Namespace = entMeta.NamespaceOrDefault()
|
|
|
|
}
|
|
|
|
}
|
2023-10-27 13:55:02 +00:00
|
|
|
|
|
|
|
// checkV2Tenancy returns FailedPrecondition error for namespace resource type
|
|
|
|
// when the "v2tenancy" feature flag is not enabled.
|
|
|
|
func checkV2Tenancy(useV2Tenancy bool, rtype *pbresource.Type) error {
|
|
|
|
if resource.EqualType(rtype, pbtenancy.NamespaceType) && !useV2Tenancy {
|
|
|
|
return status.Errorf(codes.FailedPrecondition, "use of the v2 namespace resource requires the \"v2tenancy\" feature flag")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|