mirror of https://github.com/status-im/consul.git
Net 5875 - Create the Exported Services Resources (#19117)
* init * computed exported service * make proto * exported services resource * exported services test * added some tests and namespace exported service * partition exported services * computed service * computed services tests * register types * fix comment * make proto lint * fix proto format make proto * make codegen * Update proto-public/pbmulticluster/v1alpha1/computed_exported_services.proto Co-authored-by: Eric Haberkorn <erichaberkorn@gmail.com> * Update internal/multicluster/internal/types/computed_exported_services.go Co-authored-by: Eric Haberkorn <erichaberkorn@gmail.com> * using different way of resource creation in tests * make proto * fix computed exported services test * fix tests * differnet validation for computed services for ent and ce * Acls for exported services * added validations for enterprise features in ce * fix error * fix acls test * Update internal/multicluster/internal/types/validation_exported_services_ee.go Co-authored-by: Eric Haberkorn <erichaberkorn@gmail.com> * removed the create method * update proto * removed namespace * created seperate function for ce and ent * test files updated and validations fixed * added nil checks * fix tests * added comments * removed tenancy check * added mutation function * fix mutation method * fix list permissions in test * fix pr comments * fix tests * lisence * busl license * Update internal/multicluster/internal/types/helpers_ce.go Co-authored-by: Eric Haberkorn <erichaberkorn@gmail.com> * Update internal/multicluster/internal/types/helpers_ce.go Co-authored-by: Eric Haberkorn <erichaberkorn@gmail.com> * Update internal/multicluster/internal/types/helpers_ce.go Co-authored-by: Eric Haberkorn <erichaberkorn@gmail.com> * make proto * some pr comments addressed * some pr comments addressed * acls helper * some comment changes * removed unused files * fixes * fix function in file * caps * some positioing * added test for validation error * fix names * made valid a function * remvoed patch * removed mutations * v2 beta1 * v2beta1 * rmeoved v1alpha1 * validate error * merge ent * some nits * removed dup func * removed nil check --------- Co-authored-by: Eric Haberkorn <erichaberkorn@gmail.com>
This commit is contained in:
parent
b5023b69c3
commit
0295b959c9
|
@ -7,6 +7,7 @@ import (
|
|||
"github.com/hashicorp/consul/internal/auth"
|
||||
"github.com/hashicorp/consul/internal/catalog"
|
||||
"github.com/hashicorp/consul/internal/mesh"
|
||||
"github.com/hashicorp/consul/internal/multicluster"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
"github.com/hashicorp/consul/internal/resource/demo"
|
||||
"github.com/hashicorp/consul/internal/tenancy"
|
||||
|
@ -27,6 +28,7 @@ func NewTypeRegistry() resource.Registry {
|
|||
catalog.RegisterTypes(registry)
|
||||
auth.RegisterTypes(registry)
|
||||
tenancy.RegisterTypes(registry)
|
||||
multicluster.RegisterTypes(registry)
|
||||
|
||||
return registry
|
||||
}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package multicluster
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/internal/multicluster/internal/types"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
)
|
||||
|
||||
var (
|
||||
// API Group Information
|
||||
APIGroup = types.GroupName
|
||||
VersionV2Beta1 = types.VersionV2Beta1
|
||||
CurrentVersion = types.CurrentVersion
|
||||
)
|
||||
|
||||
// RegisterTypes adds all resource types within the "multicluster" API group
|
||||
// to the given type registry
|
||||
func RegisterTypes(r resource.Registry) {
|
||||
types.Register(r)
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/acl"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
)
|
||||
|
||||
const (
|
||||
ComputedExportedServicesName = "global"
|
||||
)
|
||||
|
||||
func RegisterComputedExportedServices(r resource.Registry) {
|
||||
r.Register(resource.Registration{
|
||||
Type: pbmulticluster.ComputedExportedServicesType,
|
||||
Proto: &pbmulticluster.ComputedExportedServices{},
|
||||
Scope: resource.ScopePartition,
|
||||
Validate: ValidateComputedExportedServices,
|
||||
ACLs: &resource.ACLHooks{
|
||||
Read: aclReadHookComputedExportedServices,
|
||||
Write: aclWriteHookComputedExportedServices,
|
||||
List: resource.NoOpACLListHook,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func aclReadHookComputedExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error {
|
||||
return authorizer.ToAllowAuthorizer().MeshReadAllowed(authzContext)
|
||||
}
|
||||
|
||||
func aclWriteHookComputedExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.Resource) error {
|
||||
return authorizer.ToAllowAuthorizer().MeshWriteAllowed(authzContext)
|
||||
}
|
|
@ -0,0 +1,178 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/hashicorp/consul/agent/structs"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func computedExportedServicesWithPartition(partitionName string) *pbmulticluster.ComputedExportedServices {
|
||||
consumers := []*pbmulticluster.ComputedExportedService{
|
||||
{
|
||||
Consumers: []*pbmulticluster.ComputedExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Partition{
|
||||
Partition: partitionName,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.ComputedExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func computedExportedServicesWithPeer(peerName string) *pbmulticluster.ComputedExportedServices {
|
||||
consumers := []*pbmulticluster.ComputedExportedService{
|
||||
{
|
||||
Consumers: []*pbmulticluster.ComputedExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ComputedExportedServicesConsumer_Peer{
|
||||
Peer: peerName,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.ComputedExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func TestComputedExportedServicesValidations_InvalidName(t *testing.T) {
|
||||
res := resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, "computed-exported-services").
|
||||
WithData(t, computedExportedServicesWithPeer("peer")).
|
||||
Build()
|
||||
|
||||
err := ValidateComputedExportedServices(res)
|
||||
require.Error(t, err)
|
||||
expectedError := errors.New("invalid \"name\" field: name can only be \"global\"")
|
||||
require.ErrorAs(t, err, &expectedError)
|
||||
}
|
||||
|
||||
func TestComputedExportedServicesACLs(t *testing.T) {
|
||||
// Wire up a registry to generically invoke hooks
|
||||
registry := resource.NewRegistry()
|
||||
Register(registry)
|
||||
|
||||
type testcase struct {
|
||||
rules string
|
||||
readOK string
|
||||
writeOK string
|
||||
listOK string
|
||||
}
|
||||
|
||||
const (
|
||||
DENY = resourcetest.DENY
|
||||
ALLOW = resourcetest.ALLOW
|
||||
DEFAULT = resourcetest.DEFAULT
|
||||
)
|
||||
|
||||
exportedServiceData := &pbmulticluster.ComputedExportedServices{}
|
||||
res := resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, "global").
|
||||
WithData(t, exportedServiceData).
|
||||
Build()
|
||||
resourcetest.ValidateAndNormalize(t, registry, res)
|
||||
|
||||
cases := map[string]testcase{
|
||||
"no rules": {
|
||||
rules: ``,
|
||||
readOK: DENY,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"mesh read policy": {
|
||||
rules: `mesh = "read"`,
|
||||
readOK: ALLOW,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"mesh write policy": {
|
||||
rules: `mesh = "write"`,
|
||||
readOK: ALLOW,
|
||||
writeOK: ALLOW,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
aclTestCase := resourcetest.ACLTestCase{
|
||||
Rules: tc.rules,
|
||||
Res: res,
|
||||
ReadOK: tc.readOK,
|
||||
WriteOK: tc.writeOK,
|
||||
ListOK: tc.listOK,
|
||||
}
|
||||
resourcetest.RunACLTestCase(t, aclTestCase, registry)
|
||||
}
|
||||
}
|
||||
|
||||
func TestComputedExportedServicesValidations(t *testing.T) {
|
||||
type testcase struct {
|
||||
Resource *pbresource.Resource
|
||||
expectErrorCE []string
|
||||
expectErrorENT []string
|
||||
}
|
||||
|
||||
isEnterprise := structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty() == "default"
|
||||
|
||||
run := func(t *testing.T, tc testcase) {
|
||||
expectError := tc.expectErrorCE
|
||||
if isEnterprise {
|
||||
expectError = tc.expectErrorENT
|
||||
}
|
||||
err := ValidateComputedExportedServices(tc.Resource)
|
||||
if len(expectError) == 0 {
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
for _, er := range expectError {
|
||||
require.ErrorContains(t, err, er)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cases := map[string]testcase{
|
||||
"computed exported services with peer": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName).
|
||||
WithData(t, computedExportedServicesWithPeer("peer")).
|
||||
Build(),
|
||||
},
|
||||
"computed exported services with partition": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName).
|
||||
WithData(t, computedExportedServicesWithPartition("partition")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
},
|
||||
"computed exported services with peer empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName).
|
||||
WithData(t, computedExportedServicesWithPeer("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty`},
|
||||
},
|
||||
"computed exported services with partition empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ComputedExportedServicesType, ComputedExportedServicesName).
|
||||
WithData(t, computedExportedServicesWithPartition("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`,
|
||||
`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`},
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
run(t, tc)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/acl"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
)
|
||||
|
||||
func RegisterExportedServices(r resource.Registry) {
|
||||
r.Register(resource.Registration{
|
||||
Type: pbmulticluster.ExportedServicesType,
|
||||
Proto: &pbmulticluster.ExportedServices{},
|
||||
Scope: resource.ScopeNamespace,
|
||||
Validate: ValidateExportedServices,
|
||||
ACLs: &resource.ACLHooks{
|
||||
Read: aclReadHookExportedServices,
|
||||
Write: aclWriteHookExportedServices,
|
||||
List: resource.NoOpACLListHook,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func aclReadHookExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, _ *pbresource.ID, res *pbresource.Resource) error {
|
||||
if res == nil {
|
||||
return resource.ErrNeedResource
|
||||
}
|
||||
|
||||
var exportedService pbmulticluster.ExportedServices
|
||||
|
||||
if err := res.Data.UnmarshalTo(&exportedService); err != nil {
|
||||
return resource.NewErrDataParse(&exportedService, err)
|
||||
}
|
||||
|
||||
for _, serviceName := range exportedService.Services {
|
||||
if err := authorizer.ToAllowAuthorizer().ServiceReadAllowed(serviceName, authzContext); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func aclWriteHookExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error {
|
||||
var exportedService pbmulticluster.ExportedServices
|
||||
|
||||
if err := res.Data.UnmarshalTo(&exportedService); err != nil {
|
||||
return resource.NewErrDataParse(&exportedService, err)
|
||||
}
|
||||
|
||||
for _, serviceName := range exportedService.Services {
|
||||
if err := authorizer.ToAllowAuthorizer().ServiceWriteAllowed(serviceName, authzContext); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
|
@ -0,0 +1,218 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/hashicorp/consul/agent/structs"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func inValidExportedServices() *pbmulticluster.ExportedServices {
|
||||
return &pbmulticluster.ExportedServices{}
|
||||
}
|
||||
|
||||
func exportedServicesWithPeer(peerName string) *pbmulticluster.ExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{
|
||||
Peer: peerName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.ExportedServices{
|
||||
Services: []string{"api", "frontend", "backend"},
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func exportedServicesWithPartition(partitionName string) *pbmulticluster.ExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Partition{
|
||||
Partition: partitionName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.ExportedServices{
|
||||
Services: []string{"api", "frontend", "backend"},
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func exportedServicesWithSamenessGroup(samenessGroupName string) *pbmulticluster.ExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_SamenessGroup{
|
||||
SamenessGroup: samenessGroupName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.ExportedServices{
|
||||
Services: []string{"api", "frontend", "backend"},
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func TestExportedServicesValidation_NoServices(t *testing.T) {
|
||||
res := resourcetest.Resource(pbmulticluster.ExportedServicesType, "exportedservices1").
|
||||
WithData(t, inValidExportedServices()).
|
||||
Build()
|
||||
|
||||
err := ValidateExportedServices(res)
|
||||
require.Error(t, err)
|
||||
expectedError := errors.New("invalid \"services\" field: at least one service must be set")
|
||||
require.ErrorAs(t, err, &expectedError)
|
||||
}
|
||||
|
||||
func TestExportedServicesACLs(t *testing.T) {
|
||||
// Wire up a registry to generically invoke hooks
|
||||
registry := resource.NewRegistry()
|
||||
Register(registry)
|
||||
|
||||
type testcase struct {
|
||||
rules string
|
||||
readOK string
|
||||
writeOK string
|
||||
listOK string
|
||||
}
|
||||
|
||||
const (
|
||||
DENY = resourcetest.DENY
|
||||
ALLOW = resourcetest.ALLOW
|
||||
DEFAULT = resourcetest.DEFAULT
|
||||
)
|
||||
|
||||
exportedServiceData := &pbmulticluster.ExportedServices{
|
||||
Services: []string{"api", "backend"},
|
||||
}
|
||||
res := resourcetest.Resource(pbmulticluster.ExportedServicesType, "exps").
|
||||
WithData(t, exportedServiceData).
|
||||
Build()
|
||||
resourcetest.ValidateAndNormalize(t, registry, res)
|
||||
|
||||
cases := map[string]testcase{
|
||||
"no rules": {
|
||||
rules: ``,
|
||||
readOK: DENY,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"all services has read policy": {
|
||||
rules: `service "api" { policy = "read" } service "backend" {policy = "read"}`,
|
||||
readOK: ALLOW,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"all services has write policy": {
|
||||
rules: `service "api" { policy = "write" } service "backend" {policy = "write"}`,
|
||||
readOK: ALLOW,
|
||||
writeOK: ALLOW,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"only one services has read policy": {
|
||||
rules: `service "api" { policy = "read" }`,
|
||||
readOK: DENY,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"only one services has write policy": {
|
||||
rules: `service "api" { policy = "write" }`,
|
||||
readOK: DENY,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
aclTestCase := resourcetest.ACLTestCase{
|
||||
Rules: tc.rules,
|
||||
Res: res,
|
||||
ReadOK: tc.readOK,
|
||||
WriteOK: tc.writeOK,
|
||||
ListOK: tc.listOK,
|
||||
}
|
||||
resourcetest.RunACLTestCase(t, aclTestCase, registry)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExportedServicesValidation(t *testing.T) {
|
||||
type testcase struct {
|
||||
Resource *pbresource.Resource
|
||||
expectErrorCE []string
|
||||
expectErrorENT []string
|
||||
}
|
||||
|
||||
isEnterprise := structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty() == "default"
|
||||
|
||||
run := func(t *testing.T, tc testcase) {
|
||||
expectError := tc.expectErrorCE
|
||||
if isEnterprise {
|
||||
expectError = tc.expectErrorENT
|
||||
}
|
||||
err := ValidateExportedServices(tc.Resource)
|
||||
if len(expectError) == 0 {
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
for _, er := range expectError {
|
||||
require.ErrorContains(t, err, er)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cases := map[string]testcase{
|
||||
"exported services with peer": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services").
|
||||
WithData(t, exportedServicesWithPeer("peer")).
|
||||
Build(),
|
||||
},
|
||||
"exported services with partition": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services").
|
||||
WithData(t, exportedServicesWithPartition("partition")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
},
|
||||
"exported services with sameness_group": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services").
|
||||
WithData(t, exportedServicesWithSamenessGroup("sameness_group")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`},
|
||||
},
|
||||
"exported services with peer empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services").
|
||||
WithData(t, exportedServicesWithPeer("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty or local`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty or local`},
|
||||
},
|
||||
"exported services with partition empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services").
|
||||
WithData(t, exportedServicesWithPartition("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`,
|
||||
`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`},
|
||||
},
|
||||
"exported services with sameness_group empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.ExportedServicesType, "exported-services").
|
||||
WithData(t, exportedServicesWithSamenessGroup("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can not be empty`,
|
||||
`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "sameness_group": can not be empty`},
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
run(t, tc)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,135 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
"github.com/hashicorp/go-multierror"
|
||||
)
|
||||
|
||||
func validateExportedServiceConsumerCommon(consumer *pbmulticluster.ExportedServicesConsumer, indx int) error {
|
||||
switch consumer.GetConsumerTenancy().(type) {
|
||||
case *pbmulticluster.ExportedServicesConsumer_Peer:
|
||||
{
|
||||
if consumer.GetPeer() == "" || consumer.GetPeer() == "local" {
|
||||
return resource.ErrInvalidListElement{
|
||||
Name: "peer",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can not be empty or local"),
|
||||
}
|
||||
}
|
||||
}
|
||||
case *pbmulticluster.ExportedServicesConsumer_Partition:
|
||||
{
|
||||
if consumer.GetPartition() == "" {
|
||||
return resource.ErrInvalidListElement{
|
||||
Name: "partition",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can not be empty"),
|
||||
}
|
||||
}
|
||||
}
|
||||
case *pbmulticluster.ExportedServicesConsumer_SamenessGroup:
|
||||
{
|
||||
if consumer.GetSamenessGroup() == "" {
|
||||
return resource.ErrInvalidListElement{
|
||||
Name: "sameness_group",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can not be empty"),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateExportedServicesConsumersEnterprise(consumers []*pbmulticluster.ExportedServicesConsumer) error {
|
||||
var merr error
|
||||
|
||||
for indx, consumer := range consumers {
|
||||
vmerr := validateExportedServiceConsumerCommon(consumer, indx)
|
||||
if vmerr != nil {
|
||||
merr = multierror.Append(merr, vmerr)
|
||||
}
|
||||
vmerr = validateExportedServicesConsumer(consumer, indx)
|
||||
if vmerr != nil {
|
||||
merr = multierror.Append(merr, vmerr)
|
||||
}
|
||||
}
|
||||
|
||||
return merr
|
||||
}
|
||||
|
||||
func ValidateExportedServices(res *pbresource.Resource) error {
|
||||
var exportedService pbmulticluster.ExportedServices
|
||||
|
||||
if err := res.Data.UnmarshalTo(&exportedService); err != nil {
|
||||
return resource.NewErrDataParse(&exportedService, err)
|
||||
}
|
||||
|
||||
var merr error
|
||||
|
||||
if len(exportedService.Services) == 0 {
|
||||
merr = multierror.Append(merr, resource.ErrInvalidField{
|
||||
Name: "services",
|
||||
Wrapped: fmt.Errorf("at least one service must be set"),
|
||||
})
|
||||
}
|
||||
|
||||
vmerr := validateExportedServicesConsumersEnterprise(exportedService.Consumers)
|
||||
|
||||
if vmerr != nil {
|
||||
merr = multierror.Append(merr, vmerr)
|
||||
}
|
||||
|
||||
return merr
|
||||
}
|
||||
|
||||
func ValidateNamespaceExportedServices(res *pbresource.Resource) error {
|
||||
var exportedService pbmulticluster.NamespaceExportedServices
|
||||
|
||||
if err := res.Data.UnmarshalTo(&exportedService); err != nil {
|
||||
return resource.NewErrDataParse(&exportedService, err)
|
||||
}
|
||||
|
||||
return validateExportedServicesConsumersEnterprise(exportedService.Consumers)
|
||||
}
|
||||
|
||||
func ValidatePartitionExportedServices(res *pbresource.Resource) error {
|
||||
var exportedService pbmulticluster.PartitionExportedServices
|
||||
|
||||
if err := res.Data.UnmarshalTo(&exportedService); err != nil {
|
||||
return resource.NewErrDataParse(&exportedService, err)
|
||||
}
|
||||
|
||||
return validateExportedServicesConsumersEnterprise(exportedService.Consumers)
|
||||
}
|
||||
|
||||
func ValidateComputedExportedServices(res *pbresource.Resource) error {
|
||||
var computedExportedServices pbmulticluster.ComputedExportedServices
|
||||
|
||||
if err := res.Data.UnmarshalTo(&computedExportedServices); err != nil {
|
||||
return resource.NewErrDataParse(&computedExportedServices, err)
|
||||
}
|
||||
|
||||
var merr error
|
||||
|
||||
if res.Id.Name != ComputedExportedServicesName {
|
||||
merr = multierror.Append(merr, resource.ErrInvalidField{
|
||||
Name: "name",
|
||||
Wrapped: fmt.Errorf("name can only be \"global\""),
|
||||
})
|
||||
}
|
||||
|
||||
vmerr := ValidateComputedExportedServicesEnterprise(&computedExportedServices)
|
||||
|
||||
if vmerr != nil {
|
||||
merr = multierror.Append(merr, vmerr)
|
||||
}
|
||||
|
||||
return merr
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
//go:build !consulent
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/go-multierror"
|
||||
)
|
||||
|
||||
func validateExportedServicesConsumer(consumer *pbmulticluster.ExportedServicesConsumer, indx int) error {
|
||||
switch consumer.GetConsumerTenancy().(type) {
|
||||
case *pbmulticluster.ExportedServicesConsumer_Partition:
|
||||
return resource.ErrInvalidListElement{
|
||||
Name: "partition",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can only be set in Enterprise"),
|
||||
}
|
||||
case *pbmulticluster.ExportedServicesConsumer_SamenessGroup:
|
||||
return resource.ErrInvalidListElement{
|
||||
Name: "sameness_group",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can only be set in Enterprise"),
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ValidateComputedExportedServicesEnterprise(computedExportedServices *pbmulticluster.ComputedExportedServices) error {
|
||||
|
||||
var merr error
|
||||
|
||||
for indx, consumer := range computedExportedServices.GetConsumers() {
|
||||
for _, computedExportedServiceConsumer := range consumer.GetConsumers() {
|
||||
switch computedExportedServiceConsumer.GetConsumerTenancy().(type) {
|
||||
case *pbmulticluster.ComputedExportedServicesConsumer_Partition:
|
||||
merr = multierror.Append(merr, resource.ErrInvalidListElement{
|
||||
Name: "partition",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can only be set in Enterprise"),
|
||||
})
|
||||
if computedExportedServiceConsumer.GetPartition() == "" {
|
||||
merr = multierror.Append(merr, resource.ErrInvalidListElement{
|
||||
Name: "partition",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can not be empty"),
|
||||
})
|
||||
}
|
||||
case *pbmulticluster.ComputedExportedServicesConsumer_Peer:
|
||||
if computedExportedServiceConsumer.GetPeer() == "" {
|
||||
merr = multierror.Append(merr, resource.ErrInvalidListElement{
|
||||
Name: "peer",
|
||||
Index: indx,
|
||||
Wrapped: fmt.Errorf("can not be empty"),
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return merr
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/acl"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
)
|
||||
|
||||
func RegisterNamespaceExportedServices(r resource.Registry) {
|
||||
r.Register(resource.Registration{
|
||||
Type: pbmulticluster.NamespaceExportedServicesType,
|
||||
Proto: &pbmulticluster.NamespaceExportedServices{},
|
||||
Scope: resource.ScopeNamespace,
|
||||
Validate: ValidateNamespaceExportedServices,
|
||||
ACLs: &resource.ACLHooks{
|
||||
Read: aclReadHookNamespaceExportedServices,
|
||||
Write: aclWriteHookNamespaceExportedServices,
|
||||
List: resource.NoOpACLListHook,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func aclReadHookNamespaceExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, id *pbresource.ID, res *pbresource.Resource) error {
|
||||
return authorizer.ToAllowAuthorizer().MeshReadAllowed(authzContext)
|
||||
}
|
||||
|
||||
func aclWriteHookNamespaceExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error {
|
||||
return authorizer.ToAllowAuthorizer().MeshWriteAllowed(authzContext)
|
||||
}
|
|
@ -0,0 +1,184 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/agent/structs"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func validNamespaceExportedServicesWithPeer(peerName string) *pbmulticluster.NamespaceExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{
|
||||
Peer: peerName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.NamespaceExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func validNamespaceExportedServicesWithPartition(partitionName string) *pbmulticluster.NamespaceExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Partition{
|
||||
Partition: partitionName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.NamespaceExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func validNamespaceExportedServicesWithSamenessGroup(samenessGroupName string) *pbmulticluster.NamespaceExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_SamenessGroup{
|
||||
SamenessGroup: samenessGroupName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.NamespaceExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
func TestNamespaceExportedServicesACLs(t *testing.T) {
|
||||
// Wire up a registry to generically invoke hooks
|
||||
registry := resource.NewRegistry()
|
||||
Register(registry)
|
||||
|
||||
type testcase struct {
|
||||
rules string
|
||||
readOK string
|
||||
writeOK string
|
||||
listOK string
|
||||
}
|
||||
|
||||
const (
|
||||
DENY = resourcetest.DENY
|
||||
ALLOW = resourcetest.ALLOW
|
||||
DEFAULT = resourcetest.DEFAULT
|
||||
)
|
||||
|
||||
cases := map[string]testcase{
|
||||
"no rules": {
|
||||
rules: ``,
|
||||
readOK: DENY,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"mesh read policy": {
|
||||
rules: `mesh = "read"`,
|
||||
readOK: ALLOW,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"mesh write policy": {
|
||||
rules: `mesh = "write"`,
|
||||
readOK: ALLOW,
|
||||
writeOK: ALLOW,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
}
|
||||
|
||||
exportedServiceData := &pbmulticluster.NamespaceExportedServices{}
|
||||
res := resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services").
|
||||
WithData(t, exportedServiceData).
|
||||
Build()
|
||||
resourcetest.ValidateAndNormalize(t, registry, res)
|
||||
|
||||
for _, tc := range cases {
|
||||
aclTestCase := resourcetest.ACLTestCase{
|
||||
Rules: tc.rules,
|
||||
Res: res,
|
||||
ReadOK: tc.readOK,
|
||||
WriteOK: tc.writeOK,
|
||||
ListOK: tc.listOK,
|
||||
}
|
||||
resourcetest.RunACLTestCase(t, aclTestCase, registry)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNamespaceExportedServicesValidations(t *testing.T) {
|
||||
type testcase struct {
|
||||
Resource *pbresource.Resource
|
||||
expectErrorCE []string
|
||||
expectErrorENT []string
|
||||
}
|
||||
|
||||
isEnterprise := structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty() == "default"
|
||||
|
||||
run := func(t *testing.T, tc testcase) {
|
||||
expectError := tc.expectErrorCE
|
||||
if isEnterprise {
|
||||
expectError = tc.expectErrorENT
|
||||
}
|
||||
err := ValidateNamespaceExportedServices(tc.Resource)
|
||||
if len(expectError) == 0 {
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
for _, er := range expectError {
|
||||
require.ErrorContains(t, err, er)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cases := map[string]testcase{
|
||||
"namespace exported services with peer": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services").
|
||||
WithData(t, validNamespaceExportedServicesWithPeer("peer")).
|
||||
Build(),
|
||||
},
|
||||
"namespace exported services with partition": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services").
|
||||
WithData(t, validNamespaceExportedServicesWithPartition("partition")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
},
|
||||
"namespace exported services with sameness_group": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services").
|
||||
WithData(t, validNamespaceExportedServicesWithSamenessGroup("sameness_group")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`},
|
||||
},
|
||||
"namespace exported services with peer empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services").
|
||||
WithData(t, validNamespaceExportedServicesWithPeer("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty or local`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty or local`},
|
||||
},
|
||||
"namespace exported services with partition empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services").
|
||||
WithData(t, validNamespaceExportedServicesWithPartition("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`,
|
||||
`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`},
|
||||
},
|
||||
"namespace exported services with sameness_group empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.NamespaceExportedServicesType, "namespace-exported-services").
|
||||
WithData(t, validNamespaceExportedServicesWithSamenessGroup("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can not be empty`,
|
||||
`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "sameness_group": can not be empty`},
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
run(t, tc)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/acl"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
)
|
||||
|
||||
func RegisterPartitionExportedServices(r resource.Registry) {
|
||||
r.Register(resource.Registration{
|
||||
Type: pbmulticluster.PartitionExportedServicesType,
|
||||
Proto: &pbmulticluster.PartitionExportedServices{},
|
||||
Scope: resource.ScopePartition,
|
||||
Validate: ValidatePartitionExportedServices,
|
||||
ACLs: &resource.ACLHooks{
|
||||
Read: aclReadHookPartitionExportedServices,
|
||||
Write: aclWriteHookPartitionExportedServices,
|
||||
List: resource.NoOpACLListHook,
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func aclReadHookPartitionExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, id *pbresource.ID, res *pbresource.Resource) error {
|
||||
return authorizer.ToAllowAuthorizer().MeshReadAllowed(authzContext)
|
||||
}
|
||||
|
||||
func aclWriteHookPartitionExportedServices(authorizer acl.Authorizer, authzContext *acl.AuthorizerContext, res *pbresource.Resource) error {
|
||||
return authorizer.ToAllowAuthorizer().MeshWriteAllowed(authzContext)
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/agent/structs"
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
"github.com/hashicorp/consul/internal/resource/resourcetest"
|
||||
pbmulticluster "github.com/hashicorp/consul/proto-public/pbmulticluster/v2beta1"
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
"github.com/stretchr/testify/require"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func validPartitionExportedServicesWithPeer(peerName string) *pbmulticluster.PartitionExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Peer{
|
||||
Peer: peerName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.PartitionExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func validPartitionExportedServicesWithPartition(partitionName string) *pbmulticluster.PartitionExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_Partition{
|
||||
Partition: partitionName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.PartitionExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func validPartitionExportedServicesWithSamenessGroup(samenessGroupName string) *pbmulticluster.PartitionExportedServices {
|
||||
consumers := []*pbmulticluster.ExportedServicesConsumer{
|
||||
{
|
||||
ConsumerTenancy: &pbmulticluster.ExportedServicesConsumer_SamenessGroup{
|
||||
SamenessGroup: samenessGroupName,
|
||||
},
|
||||
},
|
||||
}
|
||||
return &pbmulticluster.PartitionExportedServices{
|
||||
Consumers: consumers,
|
||||
}
|
||||
}
|
||||
|
||||
func TestPartitionExportedServicesACLs(t *testing.T) {
|
||||
// Wire up a registry to generically invoke hooks
|
||||
registry := resource.NewRegistry()
|
||||
Register(registry)
|
||||
|
||||
type testcase struct {
|
||||
rules string
|
||||
readOK string
|
||||
writeOK string
|
||||
listOK string
|
||||
}
|
||||
|
||||
const (
|
||||
DENY = resourcetest.DENY
|
||||
ALLOW = resourcetest.ALLOW
|
||||
DEFAULT = resourcetest.DEFAULT
|
||||
)
|
||||
|
||||
cases := map[string]testcase{
|
||||
"no rules": {
|
||||
rules: ``,
|
||||
readOK: DENY,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"mesh read policy": {
|
||||
rules: `mesh = "read"`,
|
||||
readOK: ALLOW,
|
||||
writeOK: DENY,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
"mesh write policy": {
|
||||
rules: `mesh = "write"`,
|
||||
readOK: ALLOW,
|
||||
writeOK: ALLOW,
|
||||
listOK: DEFAULT,
|
||||
},
|
||||
}
|
||||
|
||||
exportedServiceData := &pbmulticluster.PartitionExportedServices{}
|
||||
res := resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services").
|
||||
WithData(t, exportedServiceData).
|
||||
Build()
|
||||
resourcetest.ValidateAndNormalize(t, registry, res)
|
||||
|
||||
for _, tc := range cases {
|
||||
aclTestCase := resourcetest.ACLTestCase{
|
||||
Rules: tc.rules,
|
||||
Res: res,
|
||||
ReadOK: tc.readOK,
|
||||
WriteOK: tc.writeOK,
|
||||
ListOK: tc.listOK,
|
||||
}
|
||||
resourcetest.RunACLTestCase(t, aclTestCase, registry)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPartitionExportedServicesValidations(t *testing.T) {
|
||||
type testcase struct {
|
||||
Resource *pbresource.Resource
|
||||
expectErrorCE []string
|
||||
expectErrorENT []string
|
||||
}
|
||||
|
||||
isEnterprise := structs.NodeEnterpriseMetaInDefaultPartition().PartitionOrEmpty() == "default"
|
||||
|
||||
run := func(t *testing.T, tc testcase) {
|
||||
expectError := tc.expectErrorCE
|
||||
if isEnterprise {
|
||||
expectError = tc.expectErrorENT
|
||||
}
|
||||
err := ValidatePartitionExportedServices(tc.Resource)
|
||||
if len(expectError) == 0 {
|
||||
require.NoError(t, err)
|
||||
} else {
|
||||
require.Error(t, err)
|
||||
for _, er := range expectError {
|
||||
require.ErrorContains(t, err, er)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
cases := map[string]testcase{
|
||||
"partition exported services with peer": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services").
|
||||
WithData(t, validPartitionExportedServicesWithPeer("peer")).
|
||||
Build(),
|
||||
},
|
||||
"partition exported services with partition": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services").
|
||||
WithData(t, validPartitionExportedServicesWithPartition("partition")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
},
|
||||
"partition exported services with sameness_group": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services").
|
||||
WithData(t, validPartitionExportedServicesWithSamenessGroup("sameness_group")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`},
|
||||
},
|
||||
"partition exported services with peer empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services").
|
||||
WithData(t, validPartitionExportedServicesWithPeer("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "peer": can not be empty or local`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "peer": can not be empty or local`},
|
||||
},
|
||||
"partition exported services with partition empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services").
|
||||
WithData(t, validPartitionExportedServicesWithPartition("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "partition": can not be empty`,
|
||||
`invalid element at index 0 of list "partition": can only be set in Enterprise`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "partition": can not be empty`},
|
||||
},
|
||||
"partition exported services with sameness_group empty": {
|
||||
Resource: resourcetest.Resource(pbmulticluster.PartitionExportedServicesType, "partition-exported-services").
|
||||
WithData(t, validPartitionExportedServicesWithSamenessGroup("")).
|
||||
Build(),
|
||||
expectErrorCE: []string{`invalid element at index 0 of list "sameness_group": can not be empty`,
|
||||
`invalid element at index 0 of list "sameness_group": can only be set in Enterprise`},
|
||||
expectErrorENT: []string{`invalid element at index 0 of list "sameness_group": can not be empty`},
|
||||
},
|
||||
}
|
||||
|
||||
for name, tc := range cases {
|
||||
t.Run(name, func(t *testing.T) {
|
||||
run(t, tc)
|
||||
})
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/internal/resource"
|
||||
)
|
||||
|
||||
const (
|
||||
GroupName = "multicluster"
|
||||
VersionV2Beta1 = "v2beta1"
|
||||
CurrentVersion = VersionV2Beta1
|
||||
)
|
||||
|
||||
func Register(r resource.Registry) {
|
||||
RegisterExportedServices(r)
|
||||
RegisterNamespaceExportedServices(r)
|
||||
RegisterPartitionExportedServices(r)
|
||||
RegisterComputedExportedServices(r)
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
// Code generated by protoc-gen-go-binary. DO NOT EDIT.
|
||||
// source: pbmulticluster/v2beta1/computed_exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *ComputedExportedServices) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *ComputedExportedServices) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *ComputedExportedService) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *ComputedExportedService) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *ComputedExportedServicesConsumer) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *ComputedExportedServicesConsumer) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
|
@ -0,0 +1,373 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.30.0
|
||||
// protoc (unknown)
|
||||
// source: pbmulticluster/v2beta1/computed_exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
pbresource "github.com/hashicorp/consul/proto-public/pbresource"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type ComputedExportedServices struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Consumers []*ComputedExportedService `protobuf:"bytes,1,rep,name=consumers,proto3" json:"consumers,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ComputedExportedServices) Reset() {
|
||||
*x = ComputedExportedServices{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ComputedExportedServices) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ComputedExportedServices) ProtoMessage() {}
|
||||
|
||||
func (x *ComputedExportedServices) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ComputedExportedServices.ProtoReflect.Descriptor instead.
|
||||
func (*ComputedExportedServices) Descriptor() ([]byte, []int) {
|
||||
return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *ComputedExportedServices) GetConsumers() []*ComputedExportedService {
|
||||
if x != nil {
|
||||
return x.Consumers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ComputedExportedService struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
TargetRef *pbresource.Reference `protobuf:"bytes,1,opt,name=target_ref,json=targetRef,proto3" json:"target_ref,omitempty"`
|
||||
Consumers []*ComputedExportedServicesConsumer `protobuf:"bytes,2,rep,name=consumers,proto3" json:"consumers,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ComputedExportedService) Reset() {
|
||||
*x = ComputedExportedService{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ComputedExportedService) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ComputedExportedService) ProtoMessage() {}
|
||||
|
||||
func (x *ComputedExportedService) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ComputedExportedService.ProtoReflect.Descriptor instead.
|
||||
func (*ComputedExportedService) Descriptor() ([]byte, []int) {
|
||||
return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *ComputedExportedService) GetTargetRef() *pbresource.Reference {
|
||||
if x != nil {
|
||||
return x.TargetRef
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ComputedExportedService) GetConsumers() []*ComputedExportedServicesConsumer {
|
||||
if x != nil {
|
||||
return x.Consumers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ComputedExportedServicesConsumer struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// no sameness group
|
||||
//
|
||||
// Types that are assignable to ConsumerTenancy:
|
||||
//
|
||||
// *ComputedExportedServicesConsumer_Peer
|
||||
// *ComputedExportedServicesConsumer_Partition
|
||||
ConsumerTenancy isComputedExportedServicesConsumer_ConsumerTenancy `protobuf_oneof:"consumer_tenancy"`
|
||||
}
|
||||
|
||||
func (x *ComputedExportedServicesConsumer) Reset() {
|
||||
*x = ComputedExportedServicesConsumer{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ComputedExportedServicesConsumer) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ComputedExportedServicesConsumer) ProtoMessage() {}
|
||||
|
||||
func (x *ComputedExportedServicesConsumer) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ComputedExportedServicesConsumer.ProtoReflect.Descriptor instead.
|
||||
func (*ComputedExportedServicesConsumer) Descriptor() ([]byte, []int) {
|
||||
return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (m *ComputedExportedServicesConsumer) GetConsumerTenancy() isComputedExportedServicesConsumer_ConsumerTenancy {
|
||||
if m != nil {
|
||||
return m.ConsumerTenancy
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ComputedExportedServicesConsumer) GetPeer() string {
|
||||
if x, ok := x.GetConsumerTenancy().(*ComputedExportedServicesConsumer_Peer); ok {
|
||||
return x.Peer
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ComputedExportedServicesConsumer) GetPartition() string {
|
||||
if x, ok := x.GetConsumerTenancy().(*ComputedExportedServicesConsumer_Partition); ok {
|
||||
return x.Partition
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type isComputedExportedServicesConsumer_ConsumerTenancy interface {
|
||||
isComputedExportedServicesConsumer_ConsumerTenancy()
|
||||
}
|
||||
|
||||
type ComputedExportedServicesConsumer_Peer struct {
|
||||
Peer string `protobuf:"bytes,3,opt,name=peer,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ComputedExportedServicesConsumer_Partition struct {
|
||||
Partition string `protobuf:"bytes,4,opt,name=partition,proto3,oneof"`
|
||||
}
|
||||
|
||||
func (*ComputedExportedServicesConsumer_Peer) isComputedExportedServicesConsumer_ConsumerTenancy() {}
|
||||
|
||||
func (*ComputedExportedServicesConsumer_Partition) isComputedExportedServicesConsumer_ConsumerTenancy() {
|
||||
}
|
||||
|
||||
var File_pbmulticluster_v2beta1_computed_exported_services_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc = []byte{
|
||||
0x0a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
|
||||
0x64, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e,
|
||||
0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19,
|
||||
0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75,
|
||||
0x72, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x80, 0x01, 0x0a, 0x18, 0x43, 0x6f,
|
||||
0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d,
|
||||
0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c,
|
||||
0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61,
|
||||
0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74,
|
||||
0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x02, 0x22, 0xc5, 0x01, 0x0a,
|
||||
0x17, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65,
|
||||
0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x61, 0x72, 0x67,
|
||||
0x65, 0x74, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e,
|
||||
0x63, 0x65, 0x52, 0x09, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x66, 0x12, 0x65, 0x0a,
|
||||
0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
|
||||
0x32, 0x47, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65,
|
||||
0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6d, 0x65, 0x72, 0x73, 0x22, 0x6c, 0x0a, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64,
|
||||
0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||
0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x65, 0x65, 0x72,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x70, 0x65, 0x65, 0x72, 0x12, 0x1e,
|
||||
0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||
0x09, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x12,
|
||||
0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e,
|
||||
0x63, 0x79, 0x42, 0xd6, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x42, 0x1d, 0x43, 0x6f, 0x6d, 0x70, 0x75, 0x74, 0x65, 0x64, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74,
|
||||
0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50,
|
||||
0x01, 0x5a, 0x53, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61,
|
||||
0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75,
|
||||
0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74,
|
||||
0x61, 0x31, 0x3b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76,
|
||||
0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62,
|
||||
0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75,
|
||||
0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c,
|
||||
0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62,
|
||||
0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61,
|
||||
0xea, 0x02, 0x28, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f,
|
||||
0x6e, 0x73, 0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74,
|
||||
0x65, 0x72, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescOnce sync.Once
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescGZIP() []byte {
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescOnce.Do(func() {
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData)
|
||||
})
|
||||
return file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
|
||||
var file_pbmulticluster_v2beta1_computed_exported_services_proto_goTypes = []interface{}{
|
||||
(*ComputedExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.ComputedExportedServices
|
||||
(*ComputedExportedService)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ComputedExportedService
|
||||
(*ComputedExportedServicesConsumer)(nil), // 2: hashicorp.consul.multicluster.v2beta1.ComputedExportedServicesConsumer
|
||||
(*pbresource.Reference)(nil), // 3: hashicorp.consul.resource.Reference
|
||||
}
|
||||
var file_pbmulticluster_v2beta1_computed_exported_services_proto_depIdxs = []int32{
|
||||
1, // 0: hashicorp.consul.multicluster.v2beta1.ComputedExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ComputedExportedService
|
||||
3, // 1: hashicorp.consul.multicluster.v2beta1.ComputedExportedService.target_ref:type_name -> hashicorp.consul.resource.Reference
|
||||
2, // 2: hashicorp.consul.multicluster.v2beta1.ComputedExportedService.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ComputedExportedServicesConsumer
|
||||
3, // [3:3] is the sub-list for method output_type
|
||||
3, // [3:3] is the sub-list for method input_type
|
||||
3, // [3:3] is the sub-list for extension type_name
|
||||
3, // [3:3] is the sub-list for extension extendee
|
||||
0, // [0:3] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pbmulticluster_v2beta1_computed_exported_services_proto_init() }
|
||||
func file_pbmulticluster_v2beta1_computed_exported_services_proto_init() {
|
||||
if File_pbmulticluster_v2beta1_computed_exported_services_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ComputedExportedServices); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ComputedExportedService); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ComputedExportedServicesConsumer); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes[2].OneofWrappers = []interface{}{
|
||||
(*ComputedExportedServicesConsumer_Peer)(nil),
|
||||
(*ComputedExportedServicesConsumer_Partition)(nil),
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 3,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_pbmulticluster_v2beta1_computed_exported_services_proto_goTypes,
|
||||
DependencyIndexes: file_pbmulticluster_v2beta1_computed_exported_services_proto_depIdxs,
|
||||
MessageInfos: file_pbmulticluster_v2beta1_computed_exported_services_proto_msgTypes,
|
||||
}.Build()
|
||||
File_pbmulticluster_v2beta1_computed_exported_services_proto = out.File
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_rawDesc = nil
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_goTypes = nil
|
||||
file_pbmulticluster_v2beta1_computed_exported_services_proto_depIdxs = nil
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package hashicorp.consul.multicluster.v2beta1;
|
||||
|
||||
import "pbresource/annotations.proto";
|
||||
import "pbresource/resource.proto";
|
||||
|
||||
message ComputedExportedServices {
|
||||
option (hashicorp.consul.resource.spec) = {scope: SCOPE_PARTITION};
|
||||
|
||||
repeated ComputedExportedService consumers = 1;
|
||||
}
|
||||
|
||||
message ComputedExportedService {
|
||||
hashicorp.consul.resource.Reference target_ref = 1;
|
||||
repeated ComputedExportedServicesConsumer consumers = 2;
|
||||
}
|
||||
|
||||
message ComputedExportedServicesConsumer {
|
||||
// no sameness group
|
||||
oneof consumer_tenancy {
|
||||
string peer = 3;
|
||||
string partition = 4;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
// Code generated by protoc-gen-deepcopy. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
proto "google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// DeepCopyInto supports using ComputedExportedServices within kubernetes types, where deepcopy-gen is used.
|
||||
func (in *ComputedExportedServices) DeepCopyInto(out *ComputedExportedServices) {
|
||||
proto.Reset(out)
|
||||
proto.Merge(out, proto.Clone(in))
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServices. Required by controller-gen.
|
||||
func (in *ComputedExportedServices) DeepCopy() *ComputedExportedServices {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ComputedExportedServices)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServices. Required by controller-gen.
|
||||
func (in *ComputedExportedServices) DeepCopyInterface() interface{} {
|
||||
return in.DeepCopy()
|
||||
}
|
||||
|
||||
// DeepCopyInto supports using ComputedExportedService within kubernetes types, where deepcopy-gen is used.
|
||||
func (in *ComputedExportedService) DeepCopyInto(out *ComputedExportedService) {
|
||||
proto.Reset(out)
|
||||
proto.Merge(out, proto.Clone(in))
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedService. Required by controller-gen.
|
||||
func (in *ComputedExportedService) DeepCopy() *ComputedExportedService {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ComputedExportedService)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedService. Required by controller-gen.
|
||||
func (in *ComputedExportedService) DeepCopyInterface() interface{} {
|
||||
return in.DeepCopy()
|
||||
}
|
||||
|
||||
// DeepCopyInto supports using ComputedExportedServicesConsumer within kubernetes types, where deepcopy-gen is used.
|
||||
func (in *ComputedExportedServicesConsumer) DeepCopyInto(out *ComputedExportedServicesConsumer) {
|
||||
proto.Reset(out)
|
||||
proto.Merge(out, proto.Clone(in))
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServicesConsumer. Required by controller-gen.
|
||||
func (in *ComputedExportedServicesConsumer) DeepCopy() *ComputedExportedServicesConsumer {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ComputedExportedServicesConsumer)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ComputedExportedServicesConsumer. Required by controller-gen.
|
||||
func (in *ComputedExportedServicesConsumer) DeepCopyInterface() interface{} {
|
||||
return in.DeepCopy()
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
// Code generated by protoc-json-shim. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
protojson "google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
// MarshalJSON is a custom marshaler for ComputedExportedServices
|
||||
func (this *ComputedExportedServices) MarshalJSON() ([]byte, error) {
|
||||
str, err := ComputedExportedServicesMarshaler.Marshal(this)
|
||||
return []byte(str), err
|
||||
}
|
||||
|
||||
// UnmarshalJSON is a custom unmarshaler for ComputedExportedServices
|
||||
func (this *ComputedExportedServices) UnmarshalJSON(b []byte) error {
|
||||
return ComputedExportedServicesUnmarshaler.Unmarshal(b, this)
|
||||
}
|
||||
|
||||
// MarshalJSON is a custom marshaler for ComputedExportedService
|
||||
func (this *ComputedExportedService) MarshalJSON() ([]byte, error) {
|
||||
str, err := ComputedExportedServicesMarshaler.Marshal(this)
|
||||
return []byte(str), err
|
||||
}
|
||||
|
||||
// UnmarshalJSON is a custom unmarshaler for ComputedExportedService
|
||||
func (this *ComputedExportedService) UnmarshalJSON(b []byte) error {
|
||||
return ComputedExportedServicesUnmarshaler.Unmarshal(b, this)
|
||||
}
|
||||
|
||||
// MarshalJSON is a custom marshaler for ComputedExportedServicesConsumer
|
||||
func (this *ComputedExportedServicesConsumer) MarshalJSON() ([]byte, error) {
|
||||
str, err := ComputedExportedServicesMarshaler.Marshal(this)
|
||||
return []byte(str), err
|
||||
}
|
||||
|
||||
// UnmarshalJSON is a custom unmarshaler for ComputedExportedServicesConsumer
|
||||
func (this *ComputedExportedServicesConsumer) UnmarshalJSON(b []byte) error {
|
||||
return ComputedExportedServicesUnmarshaler.Unmarshal(b, this)
|
||||
}
|
||||
|
||||
var (
|
||||
ComputedExportedServicesMarshaler = &protojson.MarshalOptions{}
|
||||
ComputedExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false}
|
||||
)
|
|
@ -0,0 +1,18 @@
|
|||
// Code generated by protoc-gen-go-binary. DO NOT EDIT.
|
||||
// source: pbmulticluster/v2beta1/exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *ExportedServices) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *ExportedServices) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
|
@ -0,0 +1,193 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.30.0
|
||||
// protoc (unknown)
|
||||
// source: pbmulticluster/v2beta1/exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
_ "github.com/hashicorp/consul/proto-public/pbresource"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type ExportedServices struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Services []string `protobuf:"bytes,1,rep,name=services,proto3" json:"services,omitempty"`
|
||||
Consumers []*ExportedServicesConsumer `protobuf:"bytes,2,rep,name=consumers,proto3" json:"consumers,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ExportedServices) Reset() {
|
||||
*x = ExportedServices{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmulticluster_v2beta1_exported_services_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ExportedServices) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ExportedServices) ProtoMessage() {}
|
||||
|
||||
func (x *ExportedServices) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmulticluster_v2beta1_exported_services_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ExportedServices.ProtoReflect.Descriptor instead.
|
||||
func (*ExportedServices) Descriptor() ([]byte, []int) {
|
||||
return file_pbmulticluster_v2beta1_exported_services_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *ExportedServices) GetServices() []string {
|
||||
if x != nil {
|
||||
return x.Services
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ExportedServices) GetConsumers() []*ExportedServicesConsumer {
|
||||
if x != nil {
|
||||
return x.Consumers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_pbmulticluster_v2beta1_exported_services_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_pbmulticluster_v2beta1_exported_services_proto_rawDesc = []byte{
|
||||
0x0a, 0x2e, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65,
|
||||
0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x12, 0x25, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e,
|
||||
0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x1a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69,
|
||||
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f,
|
||||
0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
||||
0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e,
|
||||
0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x95,
|
||||
0x01, 0x0a, 0x10, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18,
|
||||
0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12,
|
||||
0x5d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74,
|
||||
0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72,
|
||||
0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06,
|
||||
0xa2, 0x93, 0x04, 0x02, 0x08, 0x03, 0x42, 0xce, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e,
|
||||
0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62,
|
||||
0x65, 0x74, 0x61, 0x31, 0x42, 0x15, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 0x67,
|
||||
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d,
|
||||
0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62, 0x65, 0x74,
|
||||
0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a,
|
||||
0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_rawDescOnce sync.Once
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_exported_services_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_pbmulticluster_v2beta1_exported_services_proto_rawDescGZIP() []byte {
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_rawDescOnce.Do(func() {
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_exported_services_proto_rawDescData)
|
||||
})
|
||||
return file_pbmulticluster_v2beta1_exported_services_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pbmulticluster_v2beta1_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||
var file_pbmulticluster_v2beta1_exported_services_proto_goTypes = []interface{}{
|
||||
(*ExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.ExportedServices
|
||||
(*ExportedServicesConsumer)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer
|
||||
}
|
||||
var file_pbmulticluster_v2beta1_exported_services_proto_depIdxs = []int32{
|
||||
1, // 0: hashicorp.consul.multicluster.v2beta1.ExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer
|
||||
1, // [1:1] is the sub-list for method output_type
|
||||
1, // [1:1] is the sub-list for method input_type
|
||||
1, // [1:1] is the sub-list for extension type_name
|
||||
1, // [1:1] is the sub-list for extension extendee
|
||||
0, // [0:1] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pbmulticluster_v2beta1_exported_services_proto_init() }
|
||||
func file_pbmulticluster_v2beta1_exported_services_proto_init() {
|
||||
if File_pbmulticluster_v2beta1_exported_services_proto != nil {
|
||||
return
|
||||
}
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_init()
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ExportedServices); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_pbmulticluster_v2beta1_exported_services_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 1,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_pbmulticluster_v2beta1_exported_services_proto_goTypes,
|
||||
DependencyIndexes: file_pbmulticluster_v2beta1_exported_services_proto_depIdxs,
|
||||
MessageInfos: file_pbmulticluster_v2beta1_exported_services_proto_msgTypes,
|
||||
}.Build()
|
||||
File_pbmulticluster_v2beta1_exported_services_proto = out.File
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_rawDesc = nil
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_goTypes = nil
|
||||
file_pbmulticluster_v2beta1_exported_services_proto_depIdxs = nil
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package hashicorp.consul.multicluster.v2beta1;
|
||||
|
||||
import "pbmulticluster/v2beta1/exported_services_consumer.proto";
|
||||
import "pbresource/annotations.proto";
|
||||
|
||||
message ExportedServices {
|
||||
option (hashicorp.consul.resource.spec) = {scope: SCOPE_NAMESPACE};
|
||||
|
||||
repeated string services = 1;
|
||||
repeated ExportedServicesConsumer consumers = 2;
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
// Code generated by protoc-gen-go-binary. DO NOT EDIT.
|
||||
// source: pbmulticluster/v2beta1/exported_services_consumer.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *ExportedServicesConsumer) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *ExportedServicesConsumer) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
|
@ -0,0 +1,230 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.30.0
|
||||
// protoc (unknown)
|
||||
// source: pbmulticluster/v2beta1/exported_services_consumer.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type ExportedServicesConsumer struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// Types that are assignable to ConsumerTenancy:
|
||||
//
|
||||
// *ExportedServicesConsumer_Peer
|
||||
// *ExportedServicesConsumer_Partition
|
||||
// *ExportedServicesConsumer_SamenessGroup
|
||||
ConsumerTenancy isExportedServicesConsumer_ConsumerTenancy `protobuf_oneof:"consumer_tenancy"`
|
||||
}
|
||||
|
||||
func (x *ExportedServicesConsumer) Reset() {
|
||||
*x = ExportedServicesConsumer{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ExportedServicesConsumer) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ExportedServicesConsumer) ProtoMessage() {}
|
||||
|
||||
func (x *ExportedServicesConsumer) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ExportedServicesConsumer.ProtoReflect.Descriptor instead.
|
||||
func (*ExportedServicesConsumer) Descriptor() ([]byte, []int) {
|
||||
return file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (m *ExportedServicesConsumer) GetConsumerTenancy() isExportedServicesConsumer_ConsumerTenancy {
|
||||
if m != nil {
|
||||
return m.ConsumerTenancy
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *ExportedServicesConsumer) GetPeer() string {
|
||||
if x, ok := x.GetConsumerTenancy().(*ExportedServicesConsumer_Peer); ok {
|
||||
return x.Peer
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExportedServicesConsumer) GetPartition() string {
|
||||
if x, ok := x.GetConsumerTenancy().(*ExportedServicesConsumer_Partition); ok {
|
||||
return x.Partition
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ExportedServicesConsumer) GetSamenessGroup() string {
|
||||
if x, ok := x.GetConsumerTenancy().(*ExportedServicesConsumer_SamenessGroup); ok {
|
||||
return x.SamenessGroup
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type isExportedServicesConsumer_ConsumerTenancy interface {
|
||||
isExportedServicesConsumer_ConsumerTenancy()
|
||||
}
|
||||
|
||||
type ExportedServicesConsumer_Peer struct {
|
||||
Peer string `protobuf:"bytes,1,opt,name=peer,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ExportedServicesConsumer_Partition struct {
|
||||
Partition string `protobuf:"bytes,2,opt,name=partition,proto3,oneof"`
|
||||
}
|
||||
|
||||
type ExportedServicesConsumer_SamenessGroup struct {
|
||||
SamenessGroup string `protobuf:"bytes,3,opt,name=sameness_group,json=samenessGroup,proto3,oneof"`
|
||||
}
|
||||
|
||||
func (*ExportedServicesConsumer_Peer) isExportedServicesConsumer_ConsumerTenancy() {}
|
||||
|
||||
func (*ExportedServicesConsumer_Partition) isExportedServicesConsumer_ConsumerTenancy() {}
|
||||
|
||||
func (*ExportedServicesConsumer_SamenessGroup) isExportedServicesConsumer_ConsumerTenancy() {}
|
||||
|
||||
var File_pbmulticluster_v2beta1_exported_services_consumer_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc = []byte{
|
||||
0x0a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65,
|
||||
0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x75,
|
||||
0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x22, 0x8d, 0x01, 0x0a, 0x18, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x12, 0x14, 0x0a,
|
||||
0x04, 0x70, 0x65, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x70,
|
||||
0x65, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0e, 0x73, 0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x5f,
|
||||
0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0d, 0x73,
|
||||
0x61, 0x6d, 0x65, 0x6e, 0x65, 0x73, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x42, 0x12, 0x0a, 0x10,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x63, 0x79,
|
||||
0x42, 0xd6, 0x02, 0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x1d,
|
||||
0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||
0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
|
||||
0x53, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x3b, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62,
|
||||
0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75,
|
||||
0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74,
|
||||
0x61, 0x31, 0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43,
|
||||
0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74,
|
||||
0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75,
|
||||
0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74,
|
||||
0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02,
|
||||
0x28, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6c, 0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x3a, 0x3a, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescOnce sync.Once
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData = file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescGZIP() []byte {
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescOnce.Do(func() {
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData)
|
||||
})
|
||||
return file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||
var file_pbmulticluster_v2beta1_exported_services_consumer_proto_goTypes = []interface{}{
|
||||
(*ExportedServicesConsumer)(nil), // 0: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer
|
||||
}
|
||||
var file_pbmulticluster_v2beta1_exported_services_consumer_proto_depIdxs = []int32{
|
||||
0, // [0:0] is the sub-list for method output_type
|
||||
0, // [0:0] is the sub-list for method input_type
|
||||
0, // [0:0] is the sub-list for extension type_name
|
||||
0, // [0:0] is the sub-list for extension extendee
|
||||
0, // [0:0] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pbmulticluster_v2beta1_exported_services_consumer_proto_init() }
|
||||
func file_pbmulticluster_v2beta1_exported_services_consumer_proto_init() {
|
||||
if File_pbmulticluster_v2beta1_exported_services_consumer_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ExportedServicesConsumer); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes[0].OneofWrappers = []interface{}{
|
||||
(*ExportedServicesConsumer_Peer)(nil),
|
||||
(*ExportedServicesConsumer_Partition)(nil),
|
||||
(*ExportedServicesConsumer_SamenessGroup)(nil),
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 1,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_pbmulticluster_v2beta1_exported_services_consumer_proto_goTypes,
|
||||
DependencyIndexes: file_pbmulticluster_v2beta1_exported_services_consumer_proto_depIdxs,
|
||||
MessageInfos: file_pbmulticluster_v2beta1_exported_services_consumer_proto_msgTypes,
|
||||
}.Build()
|
||||
File_pbmulticluster_v2beta1_exported_services_consumer_proto = out.File
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_rawDesc = nil
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_goTypes = nil
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_depIdxs = nil
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package hashicorp.consul.multicluster.v2beta1;
|
||||
|
||||
message ExportedServicesConsumer {
|
||||
oneof consumer_tenancy {
|
||||
string peer = 1;
|
||||
string partition = 2;
|
||||
string sameness_group = 3;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// Code generated by protoc-gen-deepcopy. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
proto "google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// DeepCopyInto supports using ExportedServicesConsumer within kubernetes types, where deepcopy-gen is used.
|
||||
func (in *ExportedServicesConsumer) DeepCopyInto(out *ExportedServicesConsumer) {
|
||||
proto.Reset(out)
|
||||
proto.Merge(out, proto.Clone(in))
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServicesConsumer. Required by controller-gen.
|
||||
func (in *ExportedServicesConsumer) DeepCopy() *ExportedServicesConsumer {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ExportedServicesConsumer)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServicesConsumer. Required by controller-gen.
|
||||
func (in *ExportedServicesConsumer) DeepCopyInterface() interface{} {
|
||||
return in.DeepCopy()
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// Code generated by protoc-json-shim. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
protojson "google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
// MarshalJSON is a custom marshaler for ExportedServicesConsumer
|
||||
func (this *ExportedServicesConsumer) MarshalJSON() ([]byte, error) {
|
||||
str, err := ExportedServicesConsumerMarshaler.Marshal(this)
|
||||
return []byte(str), err
|
||||
}
|
||||
|
||||
// UnmarshalJSON is a custom unmarshaler for ExportedServicesConsumer
|
||||
func (this *ExportedServicesConsumer) UnmarshalJSON(b []byte) error {
|
||||
return ExportedServicesConsumerUnmarshaler.Unmarshal(b, this)
|
||||
}
|
||||
|
||||
var (
|
||||
ExportedServicesConsumerMarshaler = &protojson.MarshalOptions{}
|
||||
ExportedServicesConsumerUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false}
|
||||
)
|
|
@ -0,0 +1,27 @@
|
|||
// Code generated by protoc-gen-deepcopy. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
proto "google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// DeepCopyInto supports using ExportedServices within kubernetes types, where deepcopy-gen is used.
|
||||
func (in *ExportedServices) DeepCopyInto(out *ExportedServices) {
|
||||
proto.Reset(out)
|
||||
proto.Merge(out, proto.Clone(in))
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServices. Required by controller-gen.
|
||||
func (in *ExportedServices) DeepCopy() *ExportedServices {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(ExportedServices)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new ExportedServices. Required by controller-gen.
|
||||
func (in *ExportedServices) DeepCopyInterface() interface{} {
|
||||
return in.DeepCopy()
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// Code generated by protoc-json-shim. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
protojson "google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
// MarshalJSON is a custom marshaler for ExportedServices
|
||||
func (this *ExportedServices) MarshalJSON() ([]byte, error) {
|
||||
str, err := ExportedServicesMarshaler.Marshal(this)
|
||||
return []byte(str), err
|
||||
}
|
||||
|
||||
// UnmarshalJSON is a custom unmarshaler for ExportedServices
|
||||
func (this *ExportedServices) UnmarshalJSON(b []byte) error {
|
||||
return ExportedServicesUnmarshaler.Unmarshal(b, this)
|
||||
}
|
||||
|
||||
var (
|
||||
ExportedServicesMarshaler = &protojson.MarshalOptions{}
|
||||
ExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false}
|
||||
)
|
|
@ -0,0 +1,18 @@
|
|||
// Code generated by protoc-gen-go-binary. DO NOT EDIT.
|
||||
// source: pbmulticluster/v2beta1/namespace_exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *NamespaceExportedServices) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *NamespaceExportedServices) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.30.0
|
||||
// protoc (unknown)
|
||||
// source: pbmulticluster/v2beta1/namespace_exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
_ "github.com/hashicorp/consul/proto-public/pbresource"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type NamespaceExportedServices struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Consumers []*ExportedServicesConsumer `protobuf:"bytes,1,rep,name=consumers,proto3" json:"consumers,omitempty"`
|
||||
}
|
||||
|
||||
func (x *NamespaceExportedServices) Reset() {
|
||||
*x = NamespaceExportedServices{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *NamespaceExportedServices) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*NamespaceExportedServices) ProtoMessage() {}
|
||||
|
||||
func (x *NamespaceExportedServices) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use NamespaceExportedServices.ProtoReflect.Descriptor instead.
|
||||
func (*NamespaceExportedServices) Descriptor() ([]byte, []int) {
|
||||
return file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *NamespaceExportedServices) GetConsumers() []*ExportedServicesConsumer {
|
||||
if x != nil {
|
||||
return x.Consumers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_pbmulticluster_v2beta1_namespace_exported_services_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc = []byte{
|
||||
0x0a, 0x38, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61,
|
||||
0x63, 0x65, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c,
|
||||
0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61,
|
||||
0x31, 0x1a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
|
||||
0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
|
||||
0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65,
|
||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x01, 0x0a, 0x19, 0x4e, 0x61, 0x6d,
|
||||
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d,
|
||||
0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c,
|
||||
0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61,
|
||||
0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x03, 0x42, 0xd7, 0x02,
|
||||
0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73,
|
||||
0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x1e, 0x4e, 0x61, 0x6d,
|
||||
0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 0x67,
|
||||
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d,
|
||||
0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62, 0x65, 0x74,
|
||||
0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a,
|
||||
0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescOnce sync.Once
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescGZIP() []byte {
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescOnce.Do(func() {
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData)
|
||||
})
|
||||
return file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||
var file_pbmulticluster_v2beta1_namespace_exported_services_proto_goTypes = []interface{}{
|
||||
(*NamespaceExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.NamespaceExportedServices
|
||||
(*ExportedServicesConsumer)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer
|
||||
}
|
||||
var file_pbmulticluster_v2beta1_namespace_exported_services_proto_depIdxs = []int32{
|
||||
1, // 0: hashicorp.consul.multicluster.v2beta1.NamespaceExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer
|
||||
1, // [1:1] is the sub-list for method output_type
|
||||
1, // [1:1] is the sub-list for method input_type
|
||||
1, // [1:1] is the sub-list for extension type_name
|
||||
1, // [1:1] is the sub-list for extension extendee
|
||||
0, // [0:1] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pbmulticluster_v2beta1_namespace_exported_services_proto_init() }
|
||||
func file_pbmulticluster_v2beta1_namespace_exported_services_proto_init() {
|
||||
if File_pbmulticluster_v2beta1_namespace_exported_services_proto != nil {
|
||||
return
|
||||
}
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_init()
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*NamespaceExportedServices); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 1,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_pbmulticluster_v2beta1_namespace_exported_services_proto_goTypes,
|
||||
DependencyIndexes: file_pbmulticluster_v2beta1_namespace_exported_services_proto_depIdxs,
|
||||
MessageInfos: file_pbmulticluster_v2beta1_namespace_exported_services_proto_msgTypes,
|
||||
}.Build()
|
||||
File_pbmulticluster_v2beta1_namespace_exported_services_proto = out.File
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_rawDesc = nil
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_goTypes = nil
|
||||
file_pbmulticluster_v2beta1_namespace_exported_services_proto_depIdxs = nil
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package hashicorp.consul.multicluster.v2beta1;
|
||||
|
||||
import "pbmulticluster/v2beta1/exported_services_consumer.proto";
|
||||
import "pbresource/annotations.proto";
|
||||
|
||||
message NamespaceExportedServices {
|
||||
option (hashicorp.consul.resource.spec) = {scope: SCOPE_NAMESPACE};
|
||||
|
||||
repeated ExportedServicesConsumer consumers = 1;
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// Code generated by protoc-gen-deepcopy. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
proto "google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// DeepCopyInto supports using NamespaceExportedServices within kubernetes types, where deepcopy-gen is used.
|
||||
func (in *NamespaceExportedServices) DeepCopyInto(out *NamespaceExportedServices) {
|
||||
proto.Reset(out)
|
||||
proto.Merge(out, proto.Clone(in))
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceExportedServices. Required by controller-gen.
|
||||
func (in *NamespaceExportedServices) DeepCopy() *NamespaceExportedServices {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(NamespaceExportedServices)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceExportedServices. Required by controller-gen.
|
||||
func (in *NamespaceExportedServices) DeepCopyInterface() interface{} {
|
||||
return in.DeepCopy()
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// Code generated by protoc-json-shim. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
protojson "google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
// MarshalJSON is a custom marshaler for NamespaceExportedServices
|
||||
func (this *NamespaceExportedServices) MarshalJSON() ([]byte, error) {
|
||||
str, err := NamespaceExportedServicesMarshaler.Marshal(this)
|
||||
return []byte(str), err
|
||||
}
|
||||
|
||||
// UnmarshalJSON is a custom unmarshaler for NamespaceExportedServices
|
||||
func (this *NamespaceExportedServices) UnmarshalJSON(b []byte) error {
|
||||
return NamespaceExportedServicesUnmarshaler.Unmarshal(b, this)
|
||||
}
|
||||
|
||||
var (
|
||||
NamespaceExportedServicesMarshaler = &protojson.MarshalOptions{}
|
||||
NamespaceExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false}
|
||||
)
|
|
@ -0,0 +1,18 @@
|
|||
// Code generated by protoc-gen-go-binary. DO NOT EDIT.
|
||||
// source: pbmulticluster/v2beta1/partition_exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// MarshalBinary implements encoding.BinaryMarshaler
|
||||
func (msg *PartitionExportedServices) MarshalBinary() ([]byte, error) {
|
||||
return proto.Marshal(msg)
|
||||
}
|
||||
|
||||
// UnmarshalBinary implements encoding.BinaryUnmarshaler
|
||||
func (msg *PartitionExportedServices) UnmarshalBinary(b []byte) error {
|
||||
return proto.Unmarshal(b, msg)
|
||||
}
|
|
@ -0,0 +1,185 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.30.0
|
||||
// protoc (unknown)
|
||||
// source: pbmulticluster/v2beta1/partition_exported_services.proto
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
_ "github.com/hashicorp/consul/proto-public/pbresource"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type PartitionExportedServices struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Consumers []*ExportedServicesConsumer `protobuf:"bytes,1,rep,name=consumers,proto3" json:"consumers,omitempty"`
|
||||
}
|
||||
|
||||
func (x *PartitionExportedServices) Reset() {
|
||||
*x = PartitionExportedServices{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *PartitionExportedServices) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*PartitionExportedServices) ProtoMessage() {}
|
||||
|
||||
func (x *PartitionExportedServices) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use PartitionExportedServices.ProtoReflect.Descriptor instead.
|
||||
func (*PartitionExportedServices) Descriptor() ([]byte, []int) {
|
||||
return file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *PartitionExportedServices) GetConsumers() []*ExportedServicesConsumer {
|
||||
if x != nil {
|
||||
return x.Consumers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_pbmulticluster_v2beta1_partition_exported_services_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc = []byte{
|
||||
0x0a, 0x38, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x25, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c,
|
||||
0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61,
|
||||
0x31, 0x1a, 0x37, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
|
||||
0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x78, 0x70, 0x6f, 0x72, 0x74,
|
||||
0x65, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6d, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x70, 0x62, 0x72, 0x65,
|
||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x82, 0x01, 0x0a, 0x19, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x5d, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6d,
|
||||
0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x68, 0x61, 0x73, 0x68,
|
||||
0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c,
|
||||
0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61,
|
||||
0x31, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x73, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6d, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73,
|
||||
0x75, 0x6d, 0x65, 0x72, 0x73, 0x3a, 0x06, 0xa2, 0x93, 0x04, 0x02, 0x08, 0x02, 0x42, 0xd7, 0x02,
|
||||
0x0a, 0x29, 0x63, 0x6f, 0x6d, 0x2e, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73,
|
||||
0x74, 0x65, 0x72, 0x2e, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x1e, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x53, 0x67,
|
||||
0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63,
|
||||
0x6f, 0x72, 0x70, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2d, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x2f, 0x70, 0x62, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2f, 0x76, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d,
|
||||
0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x76, 0x32, 0x62, 0x65, 0x74,
|
||||
0x61, 0x31, 0xa2, 0x02, 0x03, 0x48, 0x43, 0x4d, 0xaa, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x2e, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0xca, 0x02, 0x25, 0x48, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e,
|
||||
0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x31, 0x48, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x5c, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c, 0x5c, 0x4d, 0x75, 0x6c, 0x74,
|
||||
0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5c, 0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31,
|
||||
0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x28, 0x48,
|
||||
0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x3a, 0x3a, 0x43, 0x6f, 0x6e, 0x73, 0x75, 0x6c,
|
||||
0x3a, 0x3a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x3a, 0x3a,
|
||||
0x56, 0x32, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescOnce sync.Once
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData = file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescGZIP() []byte {
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescOnce.Do(func() {
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData = protoimpl.X.CompressGZIP(file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData)
|
||||
})
|
||||
return file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||
var file_pbmulticluster_v2beta1_partition_exported_services_proto_goTypes = []interface{}{
|
||||
(*PartitionExportedServices)(nil), // 0: hashicorp.consul.multicluster.v2beta1.PartitionExportedServices
|
||||
(*ExportedServicesConsumer)(nil), // 1: hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer
|
||||
}
|
||||
var file_pbmulticluster_v2beta1_partition_exported_services_proto_depIdxs = []int32{
|
||||
1, // 0: hashicorp.consul.multicluster.v2beta1.PartitionExportedServices.consumers:type_name -> hashicorp.consul.multicluster.v2beta1.ExportedServicesConsumer
|
||||
1, // [1:1] is the sub-list for method output_type
|
||||
1, // [1:1] is the sub-list for method input_type
|
||||
1, // [1:1] is the sub-list for extension type_name
|
||||
1, // [1:1] is the sub-list for extension extendee
|
||||
0, // [0:1] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_pbmulticluster_v2beta1_partition_exported_services_proto_init() }
|
||||
func file_pbmulticluster_v2beta1_partition_exported_services_proto_init() {
|
||||
if File_pbmulticluster_v2beta1_partition_exported_services_proto != nil {
|
||||
return
|
||||
}
|
||||
file_pbmulticluster_v2beta1_exported_services_consumer_proto_init()
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*PartitionExportedServices); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 1,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
GoTypes: file_pbmulticluster_v2beta1_partition_exported_services_proto_goTypes,
|
||||
DependencyIndexes: file_pbmulticluster_v2beta1_partition_exported_services_proto_depIdxs,
|
||||
MessageInfos: file_pbmulticluster_v2beta1_partition_exported_services_proto_msgTypes,
|
||||
}.Build()
|
||||
File_pbmulticluster_v2beta1_partition_exported_services_proto = out.File
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_rawDesc = nil
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_goTypes = nil
|
||||
file_pbmulticluster_v2beta1_partition_exported_services_proto_depIdxs = nil
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// Copyright (c) HashiCorp, Inc.
|
||||
// SPDX-License-Identifier: BUSL-1.1
|
||||
|
||||
syntax = "proto3";
|
||||
|
||||
package hashicorp.consul.multicluster.v2beta1;
|
||||
|
||||
import "pbmulticluster/v2beta1/exported_services_consumer.proto";
|
||||
import "pbresource/annotations.proto";
|
||||
|
||||
message PartitionExportedServices {
|
||||
option (hashicorp.consul.resource.spec) = {scope: SCOPE_PARTITION};
|
||||
|
||||
repeated ExportedServicesConsumer consumers = 1;
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// Code generated by protoc-gen-deepcopy. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
proto "google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
// DeepCopyInto supports using PartitionExportedServices within kubernetes types, where deepcopy-gen is used.
|
||||
func (in *PartitionExportedServices) DeepCopyInto(out *PartitionExportedServices) {
|
||||
proto.Reset(out)
|
||||
proto.Merge(out, proto.Clone(in))
|
||||
}
|
||||
|
||||
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PartitionExportedServices. Required by controller-gen.
|
||||
func (in *PartitionExportedServices) DeepCopy() *PartitionExportedServices {
|
||||
if in == nil {
|
||||
return nil
|
||||
}
|
||||
out := new(PartitionExportedServices)
|
||||
in.DeepCopyInto(out)
|
||||
return out
|
||||
}
|
||||
|
||||
// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new PartitionExportedServices. Required by controller-gen.
|
||||
func (in *PartitionExportedServices) DeepCopyInterface() interface{} {
|
||||
return in.DeepCopy()
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// Code generated by protoc-json-shim. DO NOT EDIT.
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
protojson "google.golang.org/protobuf/encoding/protojson"
|
||||
)
|
||||
|
||||
// MarshalJSON is a custom marshaler for PartitionExportedServices
|
||||
func (this *PartitionExportedServices) MarshalJSON() ([]byte, error) {
|
||||
str, err := PartitionExportedServicesMarshaler.Marshal(this)
|
||||
return []byte(str), err
|
||||
}
|
||||
|
||||
// UnmarshalJSON is a custom unmarshaler for PartitionExportedServices
|
||||
func (this *PartitionExportedServices) UnmarshalJSON(b []byte) error {
|
||||
return PartitionExportedServicesUnmarshaler.Unmarshal(b, this)
|
||||
}
|
||||
|
||||
var (
|
||||
PartitionExportedServicesMarshaler = &protojson.MarshalOptions{}
|
||||
PartitionExportedServicesUnmarshaler = &protojson.UnmarshalOptions{DiscardUnknown: false}
|
||||
)
|
|
@ -0,0 +1,43 @@
|
|||
// Code generated by protoc-gen-resource-types. DO NOT EDIT.
|
||||
|
||||
package multiclusterv2beta1
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/consul/proto-public/pbresource"
|
||||
)
|
||||
|
||||
const (
|
||||
GroupName = "multicluster"
|
||||
Version = "v2beta1"
|
||||
|
||||
ComputedExportedServicesKind = "ComputedExportedServices"
|
||||
ExportedServicesKind = "ExportedServices"
|
||||
NamespaceExportedServicesKind = "NamespaceExportedServices"
|
||||
PartitionExportedServicesKind = "PartitionExportedServices"
|
||||
)
|
||||
|
||||
var (
|
||||
ComputedExportedServicesType = &pbresource.Type{
|
||||
Group: GroupName,
|
||||
GroupVersion: Version,
|
||||
Kind: ComputedExportedServicesKind,
|
||||
}
|
||||
|
||||
ExportedServicesType = &pbresource.Type{
|
||||
Group: GroupName,
|
||||
GroupVersion: Version,
|
||||
Kind: ExportedServicesKind,
|
||||
}
|
||||
|
||||
NamespaceExportedServicesType = &pbresource.Type{
|
||||
Group: GroupName,
|
||||
GroupVersion: Version,
|
||||
Kind: NamespaceExportedServicesKind,
|
||||
}
|
||||
|
||||
PartitionExportedServicesType = &pbresource.Type{
|
||||
Group: GroupName,
|
||||
GroupVersion: Version,
|
||||
Kind: PartitionExportedServicesKind,
|
||||
}
|
||||
)
|
Loading…
Reference in New Issue