DodoApp: Support dev virtual machines

Change-Id: Ib7641adb5be477bdde7cd9a06df4b45aa65a1c01
diff --git a/core/installer/derived.go b/core/installer/derived.go
index aabda98..508cd3e 100644
--- a/core/installer/derived.go
+++ b/core/installer/derived.go
@@ -90,10 +90,17 @@
 				}
 			}
 			if def.Kind() == KindVPNAuthKey {
-				usernameField := def.Meta()["usernameField"]
-				// TODO(gio): Improve getField
-				username := getField(root, usernameField)
-				authKey, err := vpnKeyGen.Generate(username.(string))
+				var username string
+				if v, ok := def.Meta()["username"]; ok {
+					username = v
+				} else if v, ok := def.Meta()["usernameField"]; ok {
+					// TODO(gio): Improve getField
+					username, ok = getField(root, v).(string)
+					if !ok {
+						return nil, fmt.Errorf("could not resolve username: %+v %s %+v", def.Meta(), v, root)
+					}
+				}
+				authKey, err := vpnKeyGen.Generate(username)
 				if err != nil {
 					return nil, err
 				}
@@ -147,19 +154,19 @@
 			}
 			ret[k] = picked
 		case KindAuth:
-			r, err := deriveValues(v, v, AuthSchema, networks, vpnKeyGen)
+			r, err := deriveValues(root, v, AuthSchema, networks, vpnKeyGen)
 			if err != nil {
 				return nil, err
 			}
 			ret[k] = r
 		case KindSSHKey:
-			r, err := deriveValues(v, v, SSHKeySchema, networks, vpnKeyGen)
+			r, err := deriveValues(root, v, SSHKeySchema, networks, vpnKeyGen)
 			if err != nil {
 				return nil, err
 			}
 			ret[k] = r
 		case KindStruct:
-			r, err := deriveValues(v, v, def, networks, vpnKeyGen)
+			r, err := deriveValues(root, v, def, networks, vpnKeyGen)
 			if err != nil {
 				return nil, err
 			}