Skip to content
Snippets Groups Projects
Commit 534f7f63 authored by Olgun Cengiz's avatar Olgun Cengiz :drum:
Browse files

fixed comments

parent d927ad77
No related branches found
No related tags found
1 merge request!64config changes
Pipeline #34123 passed
...@@ -6,10 +6,10 @@ import ( ...@@ -6,10 +6,10 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"path/filepath" "path/filepath"
"reflect"
"strings" "strings"
"code.vereign.com/code/viam-apis/clientutils" "code.vereign.com/code/viam-apis/clientutils"
"code.vereign.com/code/viam-apis/config"
"code.vereign.com/code/viam-apis/errors" "code.vereign.com/code/viam-apis/errors"
"code.vereign.com/code/viam-apis/log" "code.vereign.com/code/viam-apis/log"
...@@ -25,47 +25,60 @@ var SystemAuth = &authentication.Authentication{ ...@@ -25,47 +25,60 @@ var SystemAuth = &authentication.Authentication{
Session: "undefined", Session: "undefined",
} }
const tagValidation = "validation"
type Configuration struct { type Configuration struct {
ListenAddress string `validation:"optional" yaml:"listenAddress"` ListenAddress string `required:"false" yaml:"listenAddress"`
GrpcListenAddress string `validation:"optional" yaml:"grpcListenAddress"` GrpcListenAddress string `required:"false" yaml:"grpcListenAddress"`
SystemAuthentication struct { SystemAuthentication struct {
UUID string `validation:"optional" yaml:"viamUUID"` UUID string `required:"false" yaml:"viamUUID"`
Session string `validation:"optional" yaml:"viamSession"` Session string `required:"false" yaml:"viamSession"`
} `validation:"optional" yaml:"systemAuthentication"` } `required:"false" yaml:"systemAuthentication"`
DataStorageAgentURL string `validation:"optional" yaml:"dataStorageAgentURL"` DataStorageAgentURL string `required:"false" yaml:"dataStorageAgentURL"`
EntitiesManagementAgentURL string `validation:"optional" yaml:"entitiesManagementAgentURL"` EntitiesManagementAgentURL string `required:"false" yaml:"entitiesManagementAgentURL"`
MaxMessageSize int `validation:"optional" yaml:"maxMessageSize"` MaxMessageSize int `required:"false" yaml:"maxMessageSize"`
Certification struct { Certification struct {
Path string `validation:"required" yaml:"path"` Path string `required:"true" yaml:"path"`
CertificateFile string `validation:"required" yaml:"certificateFile"` CertificateFile string `required:"true" yaml:"certificateFile"`
CertificatePEM []byte `validation:"calculated" yaml:"certificatePEM"` CertificatePEM []byte `required:"true"`
PrivateKeyFile string `validation:"required" yaml:"privateKeyFile"` PrivateKeyFile string `required:"true" yaml:"privateKeyFile"`
PrivateKeyPEM []byte `validation:"calculated" yaml:"privateKeyPEM"` PrivateKeyPEM []byte `required:"true"`
CaCertificateFile string `validation:"required" yaml:"caCertificateFile"` CaCertificateFile string `required:"true" yaml:"caCertificateFile"`
CaCertificatePEM []byte `validation:"calculated" yaml:"caCertificatePEM"` CaCertificatePEM []byte `required:"true"`
EncryptionCertificateFile string `validation:"required" yaml:"encryptionCertificateFile"` EncryptionCertificateFile string `required:"true" yaml:"encryptionCertificateFile"`
EncryptionCertificatePEM []byte `validation:"calculated" yaml:"encryptionCertificatePEM"` EncryptionCertificatePEM []byte `required:"true"`
EncryptionCertificate []*x509.Certificate `validation:"calculated" yaml:"encryptionCertificate"` EncryptionCertificate []*x509.Certificate `required:"true"`
EncryptionPrivateKeyFile string `validation:"required" yaml:"encryptionPrivateKeyFile"` EncryptionPrivateKeyFile string `required:"true" yaml:"encryptionPrivateKeyFile"`
EncryptionPrivateKeyPEM []byte `validation:"calculated" yaml:"encryptionPrivateKeyPEM"` EncryptionPrivateKeyPEM []byte `required:"true"`
EncryptionPrivateKey crypto.Signer `validation:"calculated" yaml:"encryptionPrivateKey"` EncryptionPrivateKey crypto.Signer `required:"true"`
VereignCertificateFile string `validation:"required" yaml:"vereignCertificateFile"` VereignCertificateFile string `required:"true" yaml:"vereignCertificateFile"`
VereignCertificatePEM []byte `validation:"calculated" yaml:"vereignCertificatePEM"` VereignCertificatePEM []byte `required:"true"`
} `validation:"required" yaml:"certification"` } `required:"true" yaml:"certification"`
PrometeusListenAddress string `validation:"optional" yaml:"prometeusListenAddress"` PrometeusListenAddress string `required:"false" yaml:"prometeusListenAddress"`
MetricEnvironmentPrefix string `validation:"optional" yaml:"metricEnvironmentPrefix"` MetricEnvironmentPrefix string `required:"false" yaml:"metricEnvironmentPrefix"`
ReplaceKey bool `validation:"optional" yaml:"replaceKey"` ReplaceKey bool `required:"false" yaml:"replaceKey"`
GlobalLogLevel string `validation:"optional" yaml:"globalLogLevel"` GlobalLogLevel string `required:"false" yaml:"globalLogLevel"`
} }
var Config Configuration var Config Configuration
// LoadConfigValues loads config values from config file
func LoadConfigValues(configFile, etcdURL string) error {
setConfigValues(configFile, etcdURL)
calculateConfigValues()
err := config.CheckConfigValues(Config)
if err != nil {
log.Fatalf("Exiting due to wrong configuration: %s", err)
return err
}
return nil
}
// SetConfigValues Sets Values For Config Variable // SetConfigValues Sets Values For Config Variable
func SetConfigValues(configFile, etcdURL string) { func setConfigValues(configFile, etcdURL string) {
// Set default values for configuration variable // Set default values for configuration variable
// NOTE: Only for 'validation:"optional"' fields // NOTE: Only for 'required:"false"' fields
Config.ListenAddress = ":7878" Config.ListenAddress = ":7878"
Config.GrpcListenAddress = ":7877" Config.GrpcListenAddress = ":7877"
Config.SystemAuthentication.UUID = "viam-system" Config.SystemAuthentication.UUID = "viam-system"
...@@ -122,36 +135,8 @@ func SetConfigValues(configFile, etcdURL string) { ...@@ -122,36 +135,8 @@ func SetConfigValues(configFile, etcdURL string) {
} }
} }
// CheckConfigValues checks if there is any missing required fields in configuration
func CheckConfigValues(configs interface{}) error {
structIterator := reflect.ValueOf(configs)
for i := 0; i < structIterator.NumField(); i++ {
field := structIterator.Type().Field(i).Name
val := structIterator.Field(i).Interface()
tR := structIterator.Type().Field(i).Tag.Get(tagValidation)
log.Printf("%v: %v", field, val)
if tR == "required" {
if structIterator.Field(i).Kind() == reflect.Struct {
if err := CheckConfigValues(structIterator.Field(i).Interface()); err != nil {
return err
}
}
if reflect.DeepEqual(val, reflect.Zero(structIterator.Field(i).Type()).Interface()) {
// Check if the field is zero-valued, meaning it won't be updated
return errors.NewFormat("Empty value for required field: %v", field)
}
} else if tR != "optional" && tR != "calculated" {
return errors.NewFormat("Wrong validation type for field: %v (Must be 'optional', 'required' or 'calculated')", field)
}
}
return nil
}
// CalculateConfigValues calculates config values using provided configuraion // CalculateConfigValues calculates config values using provided configuraion
func CalculateConfigValues() { func calculateConfigValues() {
SystemAuth.Uuid = Config.SystemAuthentication.UUID SystemAuth.Uuid = Config.SystemAuthentication.UUID
SystemAuth.Session = Config.SystemAuthentication.Session SystemAuth.Session = Config.SystemAuthentication.Session
......
...@@ -39,18 +39,12 @@ func main() { ...@@ -39,18 +39,12 @@ func main() {
return return
} }
log.Printf("Setting configuration values...") log.Printf("Loading configuration values...")
config.SetConfigValues(*configFile, *etcdURL) err := config.LoadConfigValues(*configFile, *etcdURL)
log.Printf("Checking configuration values...")
err := config.CheckConfigValues(config.Config)
if err != nil { if err != nil {
log.Fatalf("Exiting due to wrong configuration: %s", err) log.Fatalf("Exiting due to wrong configuration: %s", err)
} }
log.Printf("Calculating configuration values...")
config.CalculateConfigValues()
grpcAddress := config.Config.GrpcListenAddress grpcAddress := config.Config.GrpcListenAddress
restAddress := config.Config.ListenAddress restAddress := config.Config.ListenAddress
dataStorageAddress := config.Config.DataStorageAgentURL dataStorageAddress := config.Config.DataStorageAgentURL
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment