open-consul/agent/structs/config_entry_sameness_group.go

92 lines
2.3 KiB
Go

// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package structs
import (
"encoding/json"
"fmt"
"github.com/hashicorp/consul/acl"
)
type SamenessGroupConfigEntry struct {
Name string
DefaultForFailover bool `json:",omitempty" alias:"default_for_failover"`
IncludeLocal bool `json:",omitempty" alias:"include_local"`
Members []SamenessGroupMember
Meta map[string]string `json:",omitempty"`
Hash uint64 `json:",omitempty" hash:"ignore"`
acl.EnterpriseMeta `hcl:",squash" mapstructure:",squash"`
RaftIndex `hash:"ignore"`
}
func (s *SamenessGroupConfigEntry) SetHash(h uint64) {
s.Hash = h
}
func (s *SamenessGroupConfigEntry) GetHash() uint64 {
return s.Hash
}
func (s *SamenessGroupConfigEntry) GetKind() string { return SamenessGroup }
func (s *SamenessGroupConfigEntry) GetName() string { return s.Name }
func (s *SamenessGroupConfigEntry) GetMeta() map[string]string { return s.Meta }
func (s *SamenessGroupConfigEntry) GetCreateIndex() uint64 { return s.CreateIndex }
func (s *SamenessGroupConfigEntry) GetModifyIndex() uint64 { return s.ModifyIndex }
func (s *SamenessGroupConfigEntry) GetRaftIndex() *RaftIndex {
if s == nil {
return &RaftIndex{}
}
return &s.RaftIndex
}
func (s *SamenessGroupConfigEntry) GetEnterpriseMeta() *acl.EnterpriseMeta {
if s == nil {
return nil
}
return &s.EnterpriseMeta
}
func (s *SamenessGroupConfigEntry) Normalize() error {
if s == nil {
return fmt.Errorf("config entry is nil")
}
s.EnterpriseMeta.Normalize()
h, err := HashConfigEntry(s)
if err != nil {
return err
}
s.Hash = h
return nil
}
func (s *SamenessGroupConfigEntry) CanRead(authz acl.Authorizer) error {
return nil
}
func (s *SamenessGroupConfigEntry) CanWrite(authz acl.Authorizer) error {
var authzContext acl.AuthorizerContext
s.FillAuthzContext(&authzContext)
return authz.ToAllowAuthorizer().MeshWriteAllowed(&authzContext)
}
func (s *SamenessGroupConfigEntry) MarshalJSON() ([]byte, error) {
type Alias SamenessGroupConfigEntry
source := &struct {
Kind string
*Alias
}{
Kind: SamenessGroup,
Alias: (*Alias)(s),
}
return json.Marshal(source)
}
type SamenessGroupMember struct {
Partition string `json:",omitempty"`
Peer string `json:",omitempty"`
}