gerrit: auto configure ssh keys
Change-Id: I9c3091e4bb998fa6c846c3c60c2801c7daa45bcf
diff --git a/core/installer/repoio.go b/core/installer/repoio.go
index 01a8f91..ffbdcb0 100644
--- a/core/installer/repoio.go
+++ b/core/installer/repoio.go
@@ -395,10 +395,22 @@
func deriveValues(values any, schema Schema, networks []Network) (map[string]any, error) {
ret := make(map[string]any)
- for k, v := range values.(map[string]any) { // TODO(giolekva): validate
- def, ok := schema.Fields()[k]
+ for k, def := range schema.Fields() {
+ // TODO(gio): validate that it is map
+ v, ok := values.(map[string]any)[k]
+ // TODO(gio): if missing use default value
if !ok {
- return nil, fmt.Errorf("Field not found: %s", k)
+ if def.Kind() == KindSSHKey {
+ key, err := NewECDSASSHKeyPair("tmp")
+ if err != nil {
+ return nil, err
+ }
+ ret[k] = map[string]string{
+ "public": string(key.RawAuthorizedKey()),
+ "private": string(key.RawPrivateKey()),
+ }
+ }
+ continue
}
switch def.Kind() {
case KindBoolean:
@@ -417,6 +429,12 @@
return nil, err
}
ret[k] = r
+ case KindSSHKey:
+ r, err := deriveValues(v, SSHKeySchema, networks)
+ if err != nil {
+ return nil, err
+ }
+ ret[k] = r
case KindStruct:
r, err := deriveValues(v, def, networks)
if err != nil {