func()

in hgctl/pkg/plugin/install/asker.go [63:177]


func (p *WasmPluginSpecConfAsker) Ask() error {
	var (
		wpc = NewPluginSpecConf()

		globalConf  map[string]interface{}
		ingressRule *IngressMatchRule
		domainRule  *DomainMatchRule

		scopeA   = newScopeAsker(p.printer)
		rewriteA = newRewriteAsker(p.printer)
		ruleA    = newRuleAsker(p.printer)

		complete = false
	)

	for {
		err := scopeA.Ask()
		if err != nil {
			return err
		}
		scope := scopeA.resp

		switch scope {
		case types.ScopeInstance:
			err = ruleA.Ask()
			if err != nil {
				return err
			}
			rule := ruleA.resp

			switch rule {
			case ruleIngress:
				if ingressRule != nil {
					p.printer.Yesf("\n%s\n", ingressRule)
					err = rewriteA.Ask()
					if err != nil {
						return err
					}
					if !rewriteA.resp {
						continue
					}
				}

				p.ingAsk.scope = scope
				err = p.ingAsk.Ask()
				if err != nil {
					return err
				}
				ingressRule = p.ingAsk.resp

			case ruleDomain:
				if domainRule != nil {
					p.printer.Yesf("\n%s\n", domainRule)
					err = rewriteA.Ask()
					if err != nil {
						return err
					}
					if !rewriteA.resp {
						continue
					}
				}

				p.domAsk.scope = scope
				err = p.domAsk.Ask()
				if err != nil {
					return err
				}
				domainRule = p.domAsk.resp
			}

		case types.ScopeGlobal:
			if globalConf != nil {
				b, _ := utils.MarshalYamlWithIndent(globalConf, 2)
				p.printer.Yesf("\n%s\n", string(b))
				err = rewriteA.Ask()
				if err != nil {
					return err
				}
				if !rewriteA.resp {
					continue
				}
			}

			p.glcAsk.scope = scope
			err = p.glcAsk.Ask()
			if err != nil {
				return err
			}
			globalConf = p.glcAsk.resp

		case "Complete":
			complete = true
			break
		}

		if complete {
			break
		}
	}

	if globalConf != nil {
		wpc.DefaultConfig = globalConf
	}
	if ingressRule != nil {
		wpc.MatchRules = append(wpc.MatchRules, ingressRule)
	}
	if domainRule != nil {
		wpc.MatchRules = append(wpc.MatchRules, domainRule)
	}

	p.printer.Yesln("The complete configuration is as follows:")
	p.printer.Yesf("\n%s\n", wpc)
	p.resp = wpc
	return nil
}