Просмотр исходного кода

Merge pull request #1263 from porter-dev/hotfix-webhook

[hotfix] Add `repository` field back to webhook and add error handling for release
abelanger5 4 лет назад
Родитель
Сommit
f557f95636
43 измененных файлов с 66 добавлено и 49 удалено
  1. 14 7
      api/server/authz/cluster.go
  2. 1 1
      api/server/authz/release.go
  3. 1 1
      api/server/handlers/cluster/create_namespace.go
  4. 1 1
      api/server/handlers/cluster/delete_namespace.go
  5. 1 1
      api/server/handlers/cluster/detect_prometheus_installed.go
  6. 1 1
      api/server/handlers/cluster/get.go
  7. 1 1
      api/server/handlers/cluster/get_node.go
  8. 1 1
      api/server/handlers/cluster/get_pod_metrics.go
  9. 1 1
      api/server/handlers/cluster/get_pods.go
  10. 1 1
      api/server/handlers/cluster/list_namespaces.go
  11. 1 1
      api/server/handlers/cluster/list_nginx_ingresses.go
  12. 1 1
      api/server/handlers/cluster/list_nodes.go
  13. 1 1
      api/server/handlers/cluster/stream_helm_release.go
  14. 1 1
      api/server/handlers/cluster/stream_status.go
  15. 1 1
      api/server/handlers/job/delete.go
  16. 1 1
      api/server/handlers/job/get_pods.go
  17. 1 1
      api/server/handlers/job/stop.go
  18. 1 1
      api/server/handlers/namespace/create_configmap.go
  19. 1 1
      api/server/handlers/namespace/delete_configmap.go
  20. 1 1
      api/server/handlers/namespace/delete_pod.go
  21. 1 1
      api/server/handlers/namespace/get_configmap.go
  22. 1 1
      api/server/handlers/namespace/get_ingress.go
  23. 1 1
      api/server/handlers/namespace/get_pod_events.go
  24. 1 1
      api/server/handlers/namespace/list_configmaps.go
  25. 1 1
      api/server/handlers/namespace/list_releases.go
  26. 1 1
      api/server/handlers/namespace/rename_configmap.go
  27. 1 1
      api/server/handlers/namespace/stream_pod_logs.go
  28. 1 1
      api/server/handlers/namespace/update_configmap.go
  29. 1 1
      api/server/handlers/release/create.go
  30. 1 1
      api/server/handlers/release/create_addon.go
  31. 1 1
      api/server/handlers/release/create_subdomain.go
  32. 1 1
      api/server/handlers/release/delete.go
  33. 1 1
      api/server/handlers/release/get_all_pods.go
  34. 1 1
      api/server/handlers/release/get_controllers.go
  35. 1 1
      api/server/handlers/release/get_history.go
  36. 1 1
      api/server/handlers/release/get_job_status.go
  37. 1 1
      api/server/handlers/release/get_jobs.go
  38. 1 1
      api/server/handlers/release/ugprade.go
  39. 1 1
      api/server/handlers/release/update_image_batch.go
  40. 1 1
      api/server/handlers/release/update_rollback.go
  41. 3 1
      api/server/handlers/release/upgrade_webhook.go
  42. 4 0
      api/types/release.go
  43. 6 2
      internal/helm/agent.go

+ 14 - 7
api/server/authz/cluster.go

@@ -72,8 +72,8 @@ func NewClusterContext(ctx context.Context, cluster *models.Cluster) context.Con
 type KubernetesAgentGetter interface {
 	GetOutOfClusterConfig(cluster *models.Cluster) *kubernetes.OutOfClusterConfig
 	GetDynamicClient(r *http.Request, cluster *models.Cluster) (dynamic.Interface, error)
-	GetAgent(r *http.Request, cluster *models.Cluster) (*kubernetes.Agent, error)
-	GetHelmAgent(r *http.Request, cluster *models.Cluster) (*helm.Agent, error)
+	GetAgent(r *http.Request, cluster *models.Cluster, namespace string) (*kubernetes.Agent, error)
+	GetHelmAgent(r *http.Request, cluster *models.Cluster, namespace string) (*helm.Agent, error)
 }
 
 type OutOfClusterAgentGetter struct {
@@ -92,7 +92,7 @@ func (d *OutOfClusterAgentGetter) GetOutOfClusterConfig(cluster *models.Cluster)
 	}
 }
 
-func (d *OutOfClusterAgentGetter) GetAgent(r *http.Request, cluster *models.Cluster) (*kubernetes.Agent, error) {
+func (d *OutOfClusterAgentGetter) GetAgent(r *http.Request, cluster *models.Cluster, namespace string) (*kubernetes.Agent, error) {
 	// look for the agent in context
 	ctxAgentVal := r.Context().Value(KubernetesAgentCtxKey)
 
@@ -104,7 +104,12 @@ func (d *OutOfClusterAgentGetter) GetAgent(r *http.Request, cluster *models.Clus
 
 	// if agent not found in context, get the agent from out of cluster config
 	ooc := d.GetOutOfClusterConfig(cluster)
-	ooc.DefaultNamespace = getNamespaceFromRequest(r)
+
+	if namespace == "" {
+		ooc.DefaultNamespace = getNamespaceFromRequest(r)
+	} else {
+		ooc.DefaultNamespace = namespace
+	}
 
 	agent, err := kubernetes.GetAgentOutOfClusterConfig(ooc)
 
@@ -119,7 +124,7 @@ func (d *OutOfClusterAgentGetter) GetAgent(r *http.Request, cluster *models.Clus
 	return agent, nil
 }
 
-func (d *OutOfClusterAgentGetter) GetHelmAgent(r *http.Request, cluster *models.Cluster) (*helm.Agent, error) {
+func (d *OutOfClusterAgentGetter) GetHelmAgent(r *http.Request, cluster *models.Cluster, namespace string) (*helm.Agent, error) {
 	// look for the agent in context
 	ctxAgentVal := r.Context().Value(HelmAgentCtxKey)
 
@@ -130,13 +135,15 @@ func (d *OutOfClusterAgentGetter) GetHelmAgent(r *http.Request, cluster *models.
 	}
 
 	// if helm agent not found in context, construct it from k8s agent
-	k8sAgent, err := d.GetAgent(r, cluster)
+	k8sAgent, err := d.GetAgent(r, cluster, namespace)
 
 	if err != nil {
 		return nil, err
 	}
 
-	namespace := getNamespaceFromRequest(r)
+	if namespace == "" {
+		namespace = getNamespaceFromRequest(r)
+	}
 
 	helmAgent, err := helm.GetAgentFromK8sAgent("secret", namespace, d.config.Logger, k8sAgent)
 

+ 1 - 1
api/server/authz/release.go

@@ -37,7 +37,7 @@ type ReleaseScopedMiddleware struct {
 func (p *ReleaseScopedMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	helmAgent, err := p.agentGetter.GetHelmAgent(r, cluster)
+	helmAgent, err := p.agentGetter.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		apierrors.HandleAPIError(p.config, w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/create_namespace.go

@@ -37,7 +37,7 @@ func (c *CreateNamespaceHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/delete_namespace.go

@@ -36,7 +36,7 @@ func (c *DeleteNamespaceHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/detect_prometheus_installed.go

@@ -29,7 +29,7 @@ func NewDetectPrometheusInstalledHandler(
 func (c *DetectPrometheusInstalledHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/get.go

@@ -36,7 +36,7 @@ func (c *ClusterGetHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		Cluster: cluster.ToClusterType(),
 	}
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/get_node.go

@@ -33,7 +33,7 @@ func (c *GetNodeHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 	name, _ := requestutils.GetURLParamString(r, types.URLParamNodeName)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/get_pod_metrics.go

@@ -39,7 +39,7 @@ func (c *GetPodMetricsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/get_pods.go

@@ -38,7 +38,7 @@ func (c *GetPodsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/list_namespaces.go

@@ -30,7 +30,7 @@ func NewListNamespacesHandler(
 func (c *ListNamespacesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/list_nginx_ingresses.go

@@ -31,7 +31,7 @@ func NewListNGINXIngressesHandler(
 func (c *ListNGINXIngressesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/list_nodes.go

@@ -31,7 +31,7 @@ func NewListNodesHandler(
 func (c *ListNodesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/stream_helm_release.go

@@ -44,7 +44,7 @@ func (c *StreamHelmReleaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Requ
 
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/cluster/stream_status.go

@@ -45,7 +45,7 @@ func (c *StreamStatusHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/job/delete.go

@@ -28,7 +28,7 @@ func NewDeleteHandler(
 
 func (c *DeleteHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 	name, _ := requestutils.GetURLParamString(r, types.URLParamJobName)
 	namespace, _ := requestutils.GetURLParamString(r, types.URLParamNamespace)
 

+ 1 - 1
api/server/handlers/job/get_pods.go

@@ -30,7 +30,7 @@ func NewGetPodsHandler(
 
 func (c *GetPodsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 	name, _ := requestutils.GetURLParamString(r, types.URLParamJobName)
 	namespace, _ := requestutils.GetURLParamString(r, types.URLParamNamespace)
 

+ 1 - 1
api/server/handlers/job/stop.go

@@ -28,7 +28,7 @@ func NewStopHandler(
 
 func (c *StopHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 	name, _ := requestutils.GetURLParamString(r, types.URLParamJobName)
 	namespace, _ := requestutils.GetURLParamString(r, types.URLParamNamespace)
 

+ 1 - 1
api/server/handlers/namespace/create_configmap.go

@@ -42,7 +42,7 @@ func (c *CreateConfigMapHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 	namespace := r.Context().Value(types.NamespaceScope).(string)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/namespace/delete_configmap.go

@@ -38,7 +38,7 @@ func (c *DeleteConfigMapHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 	namespace := r.Context().Value(types.NamespaceScope).(string)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/namespace/delete_pod.go

@@ -31,7 +31,7 @@ func NewDeletePodHandler(
 
 func (c *DeletePodHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 	name, _ := requestutils.GetURLParamString(r, types.URLParamPodName)
 	namespace, _ := requestutils.GetURLParamString(r, types.URLParamNamespace)
 

+ 1 - 1
api/server/handlers/namespace/get_configmap.go

@@ -38,7 +38,7 @@ func (c *GetConfigMapHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 	namespace := r.Context().Value(types.NamespaceScope).(string)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/namespace/get_ingress.go

@@ -33,7 +33,7 @@ func NewGetIngressHandler(
 
 func (c *GetIngressHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 	name, _ := requestutils.GetURLParamString(r, types.URLParamIngressName)
 	namespace, _ := requestutils.GetURLParamString(r, types.URLParamNamespace)
 

+ 1 - 1
api/server/handlers/namespace/get_pod_events.go

@@ -30,7 +30,7 @@ func NewGetPodEventsHandler(
 
 func (c *GetPodEventsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 	name, _ := requestutils.GetURLParamString(r, types.URLParamPodName)
 	namespace, _ := requestutils.GetURLParamString(r, types.URLParamNamespace)
 

+ 1 - 1
api/server/handlers/namespace/list_configmaps.go

@@ -31,7 +31,7 @@ func (c *ListConfigMapsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
 	namespace := r.Context().Value(types.NamespaceScope).(string)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/namespace/list_releases.go

@@ -38,7 +38,7 @@ func (c *ListReleasesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 	namespace := r.Context().Value(types.NamespaceScope).(string)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/namespace/rename_configmap.go

@@ -43,7 +43,7 @@ func (c *RenameConfigMapHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 	namespace := r.Context().Value(types.NamespaceScope).(string)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/namespace/stream_pod_logs.go

@@ -45,7 +45,7 @@ func (c *StreamPodLogsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/namespace/update_configmap.go

@@ -39,7 +39,7 @@ func (c *UpdateConfigMapHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 	namespace := r.Context().Value(types.NamespaceScope).(string)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/create.go

@@ -53,7 +53,7 @@ func (c *CreateReleaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 		},
 	))
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/create_addon.go

@@ -46,7 +46,7 @@ func (c *CreateAddonHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		},
 	))
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/create_subdomain.go

@@ -34,7 +34,7 @@ func (c *CreateSubdomainHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 	name, _ := requestutils.GetURLParamString(r, types.URLParamReleaseName)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/delete.go

@@ -34,7 +34,7 @@ func (c *DeleteReleaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 	helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/get_all_pods.go

@@ -35,7 +35,7 @@ func (c *GetAllPodsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/get_controllers.go

@@ -39,7 +39,7 @@ func (c *GetControllersHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
 	helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/get_history.go

@@ -32,7 +32,7 @@ func NewGetReleaseHistoryHandler(
 func (c *GetReleaseHistoryHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/get_job_status.go

@@ -31,7 +31,7 @@ func NewGetJobsStatusHandler(
 func (c *GetJobsStatusHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/get_jobs.go

@@ -33,7 +33,7 @@ func NewGetJobsHandler(
 func (c *GetJobsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
-	agent, err := c.GetAgent(r, cluster)
+	agent, err := c.GetAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/ugprade.go

@@ -45,7 +45,7 @@ func (c *UpgradeReleaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 	helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/update_image_batch.go

@@ -35,7 +35,7 @@ func NewUpdateImageBatchHandler(
 func (c *UpdateImageBatchHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 1 - 1
api/server/handlers/release/update_rollback.go

@@ -36,7 +36,7 @@ func (c *RollbackReleaseHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 	cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
 	helmRelease, _ := r.Context().Value(types.ReleaseScope).(*release.Release)
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	helmAgent, err := c.GetHelmAgent(r, cluster, "")
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 3 - 1
api/server/handlers/release/upgrade_webhook.go

@@ -71,7 +71,9 @@ func (c *WebhookHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 
-	helmAgent, err := c.GetHelmAgent(r, cluster)
+	// in this case, we retrieve the agent by passing in the namespace field directly, since
+	// it cannot be detected from the URL
+	helmAgent, err := c.GetHelmAgent(r, cluster, release.Namespace)
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 4 - 0
api/types/release.go

@@ -73,6 +73,10 @@ const URLParamToken URLParam = "token"
 
 type WebhookRequest struct {
 	Commit string `schema:"commit"`
+
+	// NOTICE: deprecated. This field should no longer be used; it is not supported
+	// internally.
+	Repository string `schema:"repository"`
 }
 
 type GetGHATemplateRequest struct {

+ 6 - 2
internal/helm/agent.go

@@ -48,14 +48,18 @@ func (a *Agent) GetRelease(
 
 	release, err := cmd.Run(name)
 
-	if getDeps {
+	if err != nil {
+		return nil, err
+	}
+
+	if getDeps && release.Chart != nil && release.Chart.Metadata != nil {
 		for _, dep := range release.Chart.Metadata.Dependencies {
 			depExists := false
 
 			for _, currDep := range release.Chart.Dependencies() {
 				// we just case on name for now -- there might be edge cases we're missing
 				// but this will cover 99% of cases
-				if dep.Name == currDep.Name() {
+				if dep != nil && currDep != nil && dep.Name == currDep.Name() {
 					depExists = true
 					break
 				}