上QQ阅读APP看书,第一时间看更新
4.1.4 installReleaseFromChart
这个函数十分重要,是Client发送请求的函数。该函数会接收一大堆参数,这些参数就是Helm在执行install命令时传入的各种用户指定参数。下面我们先来看看函数中的定义和实现。
func (h *Client) installReleaseFromChartWithContext(ctx context.Context, Chart *Chart.Chart, ns string, opts ...InstallOption) (*rls.InstallReleaseResponse, error) { // 将安装选项传入后面的结构体中 reqOpts := h.opts for _, opt := range opts { opt(&reqOpts) } req := &reqOpts.instReq req.Chart = Chart req.Namespace = ns req.DryRun = reqOpts.dryRun req.DisableHooks = reqOpts.disableHooks req.DisableCrdHook = reqOpts.disableCRDHook req.ReuseName = reqOpts.reuseName ctx = FromContext(ctx) if reqOpts.before != nil { if err := reqOpts.before(ctx, req); err != nil { return nil, err } } err := Chartutil.ProcessRequirementsEnabled(req.Chart, req.Values) if err != nil { return nil, err } err = Chartutil.ProcessRequirementsImportValues(req.Chart) if err != nil { return nil, err } return h.install(ctx, req) }
·首先将所有安装的参数统一设置到request对象中,构成结构体。
·Chartutil.ProcessRequirementsEnabled是将requirement.yaml中不需要的Chart从安装包结构体中移除。
·ProcessRequirementsImportValues函数将父Chart中的value设置给子Chart,这样函数就实现了父Chart向子Chart传递参数。
·h.install将包装好的req发送给服务端。