mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-06-09 15:12:40 -04:00
config: improve usage and meaning of validate (#1975)
* discuss miniup config.Default() usage + discourage usage for Default() in comment * Update internal/config/config_test.go Co-authored-by: Daniel Weiße <66256922+daniel-weisse@users.noreply.github.com> * add enterprise version check for config.Default * split config comment lines * daniel feedback * featureset.CanUseEmbeddedMeasurmentsAndImage --------- Co-authored-by: Daniel Weiße <66256922+daniel-weisse@users.noreply.github.com>
This commit is contained in:
parent
1edbe962c1
commit
161bb37cba
6 changed files with 43 additions and 17 deletions
|
@ -13,6 +13,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/edgelesssys/constellation/v2/cli/internal/cloudcmd"
|
"github.com/edgelesssys/constellation/v2/cli/internal/cloudcmd"
|
||||||
|
"github.com/edgelesssys/constellation/v2/cli/internal/featureset"
|
||||||
"github.com/edgelesssys/constellation/v2/cli/internal/libvirt"
|
"github.com/edgelesssys/constellation/v2/cli/internal/libvirt"
|
||||||
"github.com/edgelesssys/constellation/v2/cli/internal/terraform"
|
"github.com/edgelesssys/constellation/v2/cli/internal/terraform"
|
||||||
"github.com/edgelesssys/constellation/v2/internal/api/attestationconfigapi"
|
"github.com/edgelesssys/constellation/v2/internal/api/attestationconfigapi"
|
||||||
|
@ -142,17 +143,14 @@ func (m *miniUpCmd) prepareConfig(cmd *cobra.Command, fileHandler file.Handler,
|
||||||
return nil, errors.New("not overwriting existing config")
|
return nil, errors.New("not overwriting existing config")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if !featureset.CanUseEmbeddedMeasurmentsAndImage {
|
||||||
config := config.Default()
|
cmd.PrintErrln("Generating a valid default config is not supported in the OSS build of the Constellation CLI. Consult the documentation for instructions on where to download the enterprise version.")
|
||||||
config.Name = constants.MiniConstellationUID
|
return nil, errors.New("cannot create a mini cluster without a config file in the OSS build")
|
||||||
config.RemoveProviderAndAttestationExcept(cloudprovider.QEMU)
|
}
|
||||||
config.StateDiskSizeGB = 8
|
config, err := config.MiniDefault()
|
||||||
|
if err != nil {
|
||||||
// only release images (e.g. v2.7.0) use the production NVRAM
|
return nil, fmt.Errorf("mini default config is invalid: %v", err)
|
||||||
if !config.IsReleaseImage() {
|
|
||||||
config.Provider.QEMU.NVRAM = "testing"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
m.log.Debugf("Prepared configuration")
|
m.log.Debugf("Prepared configuration")
|
||||||
|
|
||||||
return config, fileHandler.WriteYAML(constants.ConfigFilename, config, file.OptOverwrite)
|
return config, fileHandler.WriteYAML(constants.ConfigFilename, config, file.OptOverwrite)
|
||||||
|
|
|
@ -20,6 +20,9 @@ const (
|
||||||
// CanFetchMeasurements returns whether the current build can fetch measurements.
|
// CanFetchMeasurements returns whether the current build can fetch measurements.
|
||||||
const CanFetchMeasurements = canFetchMeasurements
|
const CanFetchMeasurements = canFetchMeasurements
|
||||||
|
|
||||||
|
// CanUseEmbeddedMeasurmentsAndImage returns whether the current build can use embedded measurements and can provide a node image.
|
||||||
|
const CanUseEmbeddedMeasurmentsAndImage = canUseEmbeddedMeasurmentsAndImage
|
||||||
|
|
||||||
// CanUpgradeCheck returns whether the current build can check for upgrades.
|
// CanUpgradeCheck returns whether the current build can check for upgrades.
|
||||||
// This also includes fetching new measurements.
|
// This also includes fetching new measurements.
|
||||||
const CanUpgradeCheck = canUpgradeCheck
|
const CanUpgradeCheck = canUpgradeCheck
|
||||||
|
|
|
@ -9,7 +9,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
package featureset
|
package featureset
|
||||||
|
|
||||||
const (
|
const (
|
||||||
edition = EditionEnterprise
|
edition = EditionEnterprise
|
||||||
canFetchMeasurements = true
|
canFetchMeasurements = true
|
||||||
canUpgradeCheck = true
|
canUpgradeCheck = true
|
||||||
|
canUseEmbeddedMeasurmentsAndImage = true
|
||||||
)
|
)
|
||||||
|
|
|
@ -9,7 +9,8 @@ SPDX-License-Identifier: AGPL-3.0-only
|
||||||
package featureset
|
package featureset
|
||||||
|
|
||||||
const (
|
const (
|
||||||
edition = EditionOSS
|
edition = EditionOSS
|
||||||
canFetchMeasurements = false
|
canFetchMeasurements = false
|
||||||
canUpgradeCheck = false
|
canUpgradeCheck = false
|
||||||
|
canUseEmbeddedMeasurmentsAndImage = false
|
||||||
)
|
)
|
||||||
|
|
|
@ -298,6 +298,7 @@ type AttestationConfig struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default returns a struct with the default config.
|
// Default returns a struct with the default config.
|
||||||
|
// IMPORTANT: Ensure that any state mutation is followed by a call to Validate() to ensure that the config is always in a valid state. Avoid usage outside of tests.
|
||||||
func Default() *Config {
|
func Default() *Config {
|
||||||
return &Config{
|
return &Config{
|
||||||
Version: Version3,
|
Version: Version3,
|
||||||
|
@ -367,6 +368,19 @@ func Default() *Config {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MiniDefault returns a default config for a mini cluster.
|
||||||
|
func MiniDefault() (*Config, error) {
|
||||||
|
config := Default()
|
||||||
|
config.Name = constants.MiniConstellationUID
|
||||||
|
config.RemoveProviderAndAttestationExcept(cloudprovider.QEMU)
|
||||||
|
config.StateDiskSizeGB = 8
|
||||||
|
// only release images (e.g. v2.7.0) use the production NVRAM
|
||||||
|
if !config.IsReleaseImage() {
|
||||||
|
config.Provider.QEMU.NVRAM = "testing"
|
||||||
|
}
|
||||||
|
return config, config.Validate(false)
|
||||||
|
}
|
||||||
|
|
||||||
// fromFile returns config file with `name` read from `fileHandler` by parsing
|
// fromFile returns config file with `name` read from `fileHandler` by parsing
|
||||||
// it as YAML. You should prefer config.New to read env vars and validate
|
// it as YAML. You should prefer config.New to read env vars and validate
|
||||||
// config in a consistent manner.
|
// config in a consistent manner.
|
||||||
|
|
|
@ -376,6 +376,15 @@ func TestValidate(t *testing.T) {
|
||||||
return cnf
|
return cnf
|
||||||
}(),
|
}(),
|
||||||
},
|
},
|
||||||
|
"miniup default config is not valid because image and measurements are missing in OSS": {
|
||||||
|
cnf: func() *Config {
|
||||||
|
config, _ := MiniDefault()
|
||||||
|
require.NotNil(t, config)
|
||||||
|
return config
|
||||||
|
}(),
|
||||||
|
wantErr: true,
|
||||||
|
wantErrCount: 2,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, tc := range testCases {
|
for name, tc := range testCases {
|
||||||
|
@ -389,7 +398,7 @@ func TestValidate(t *testing.T) {
|
||||||
assert.Error(err)
|
assert.Error(err)
|
||||||
var valErr *ValidationError
|
var valErr *ValidationError
|
||||||
require.ErrorAs(err, &valErr)
|
require.ErrorAs(err, &valErr)
|
||||||
assert.Equal(tc.wantErrCount, valErr.messagesCount())
|
assert.Equalf(tc.wantErrCount, valErr.messagesCount(), "Got unexpected error count: %d: %s", valErr.messagesCount(), valErr.LongMessage())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
assert.NoError(err)
|
assert.NoError(err)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue