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
}