云原生应用管理:原理与实践
上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发送给服务端。