mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-08-01 19:46:07 -04:00
cli: use custom byte-slice marshalling for state file (#2460)
* custom byte slice marshalling Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> * byte slice compatibility Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> * other byte slice compat test Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> * add missing dep Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> * export byte type alias Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> * regenerate exported type Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> * test marshal and unmarshal together Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> --------- Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com>
This commit is contained in:
parent
c424ec8825
commit
a8605d7294
13 changed files with 144 additions and 16 deletions
|
@ -13,6 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
|
|||
package state
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
|
||||
"dario.cat/mergo"
|
||||
|
@ -63,7 +64,7 @@ type ClusterValues struct {
|
|||
OwnerID string `yaml:"ownerID"`
|
||||
// description: |
|
||||
// Salt used to generate the ClusterID on the bootstrapping node.
|
||||
MeasurementSalt []byte `yaml:"measurementSalt"`
|
||||
MeasurementSalt HexBytes `yaml:"measurementSalt"`
|
||||
}
|
||||
|
||||
// Infrastructure describe the state related to the cloud resources of the cluster.
|
||||
|
@ -76,7 +77,7 @@ type Infrastructure struct {
|
|||
ClusterEndpoint string `yaml:"clusterEndpoint"`
|
||||
// description: |
|
||||
// Secret used to authenticate the bootstrapping node.
|
||||
InitSecret []byte `yaml:"initSecret"`
|
||||
InitSecret HexBytes `yaml:"initSecret"`
|
||||
// description: |
|
||||
// List of Subject Alternative Names (SANs) to add to the Kubernetes API server certificate.
|
||||
// If no SANs should be added, this field can be left empty.
|
||||
|
@ -164,3 +165,33 @@ func (s *State) Merge(other *State) (*State, error) {
|
|||
}
|
||||
return s, nil
|
||||
}
|
||||
|
||||
// HexBytes is a byte slice that is marshalled to and from a hex string.
|
||||
type HexBytes []byte
|
||||
|
||||
// UnmarshalYAML implements the yaml.Unmarshaler interface.
|
||||
func (h *HexBytes) UnmarshalYAML(unmarshal func(any) error) error {
|
||||
var hexString string
|
||||
if err := unmarshal(&hexString); err != nil {
|
||||
// TODO(msanft): Remove with v2.14.0
|
||||
// fall back to unmarshalling as a byte slice for backwards compatibility
|
||||
var oldHexBytes []byte
|
||||
if err := unmarshal(&oldHexBytes); err != nil {
|
||||
return fmt.Errorf("unmarshalling hex bytes: %w", err)
|
||||
}
|
||||
hexString = hex.EncodeToString(oldHexBytes)
|
||||
}
|
||||
|
||||
bytes, err := hex.DecodeString(hexString)
|
||||
if err != nil {
|
||||
return fmt.Errorf("decoding hex bytes: %w", err)
|
||||
}
|
||||
|
||||
*h = bytes
|
||||
return nil
|
||||
}
|
||||
|
||||
// MarshalYAML implements the yaml.Marshaler interface.
|
||||
func (h HexBytes) MarshalYAML() (any, error) {
|
||||
return hex.EncodeToString(h), nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue