installer: migrate apps to cuelang
diff --git a/core/installer/schema.go b/core/installer/schema.go
index 69e7ec0..249190b 100644
--- a/core/installer/schema.go
+++ b/core/installer/schema.go
@@ -16,6 +16,7 @@
 	KindString       = 1
 	KindStruct       = 2
 	KindNetwork      = 3
+	KindNumber       = 4
 )
 
 type Schema interface {
@@ -27,24 +28,26 @@
 #Network: {
     name: string
 	ingressClass: string
-	certificateIssuer: string
+	certificateIssuer: string | *""
 	domain: string
 }
 
-value: %s
-
-valid: #Network & value
+value: { %s }
 `
 
 func isNetwork(v cue.Value) bool {
 	if v.Value().Kind() != cue.StructKind {
 		return false
 	}
-	value := fmt.Sprintf("%#v", v)
-	s := fmt.Sprintf(networkSchema, value)
+	s := fmt.Sprintf(networkSchema, fmt.Sprintf("%#v", v))
 	c := cuecontext.New()
 	u := c.CompileString(s)
-	return u.Err() == nil && u.Validate() == nil
+	network := u.LookupPath(cue.ParsePath("#Network"))
+	vv := u.LookupPath(cue.ParsePath("value"))
+	if err := network.Subsume(vv); err == nil {
+		return true
+	}
+	return false
 }
 
 type basicSchema struct {
@@ -77,6 +80,8 @@
 		return basicSchema{KindString}, nil
 	case cue.BoolKind:
 		return basicSchema{KindBoolean}, nil
+	case cue.NumberKind:
+		return basicSchema{KindNumber}, nil
 	case cue.StructKind:
 		if isNetwork(v) {
 			return basicSchema{KindNetwork}, nil