Skip to content

Commit a8a4328

Browse files
authored
helm revision number (#4534)
1 parent 08d6abb commit a8a4328

File tree

2 files changed

+36
-22
lines changed

2 files changed

+36
-22
lines changed

api/server/handlers/porter_app/create.go

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,10 @@ import (
77
"errors"
88
"fmt"
99
"net/http"
10+
"strconv"
1011
"strings"
1112
"time"
1213

13-
"github.com/porter-dev/api-contracts/generated/go/porter/v1/porterv1connect"
14-
1514
"connectrpc.com/connect"
1615

1716
porterv1 "github.com/porter-dev/api-contracts/generated/go/porter/v1"
@@ -119,10 +118,21 @@ func (c *CreatePorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
119118
return
120119
}
121120

121+
namespace := fmt.Sprintf("app-%s", appName)
122+
telemetry.WithAttributes(span, telemetry.AttributeKV{Key: "application-name", Value: appName})
123+
124+
k8sAgent, err := c.GetAgent(r, cluster, namespace)
125+
if err != nil {
126+
err = telemetry.Error(ctx, span, err, "error getting k8s agent")
127+
c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
128+
return
129+
}
130+
122131
revisionNumber, err := pollForRevisionNumber(ctx, pollForRevisionNumberInput{
123132
ProjectID: project.ID,
124133
RevisionID: appImageResp.Msg.RevisionId,
125-
CCPClient: c.Config().ClusterControlPlaneClient,
134+
Namespace: namespace,
135+
K8sAgent: k8sAgent,
126136
})
127137
if err != nil {
128138
err := telemetry.Error(ctx, span, err, "error polling for revision number")
@@ -583,7 +593,8 @@ func (c *CreatePorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
583593
type pollForRevisionNumberInput struct {
584594
ProjectID uint
585595
RevisionID string
586-
CCPClient porterv1connect.ClusterControlPlaneServiceClient
596+
Namespace string
597+
K8sAgent *kubernetes.Agent
587598
}
588599

589600
func pollForRevisionNumber(ctx context.Context, input pollForRevisionNumberInput) (int, error) {
@@ -597,20 +608,28 @@ func pollForRevisionNumber(ctx context.Context, input pollForRevisionNumberInput
597608
return 0, telemetry.Error(ctx, span, nil, "timed out waiting for revision number")
598609
}
599610

600-
appRevisionResp, err := input.CCPClient.GetAppRevision(ctx, connect.NewRequest(&porterv1.GetAppRevisionRequest{
601-
ProjectId: int64(input.ProjectID),
602-
AppRevisionId: input.RevisionID,
603-
}))
611+
deploymentList, err := input.K8sAgent.GetDeploymentsBySelector(ctx, input.Namespace, fmt.Sprintf("porter.run/app-revision-id=%s", input.RevisionID))
604612
if err != nil {
605613
return 0, telemetry.Error(ctx, span, err, "error getting app revision")
606614
}
607615

608-
if appRevisionResp == nil || appRevisionResp.Msg == nil || appRevisionResp.Msg.AppRevision == nil {
609-
return 0, telemetry.Error(ctx, span, err, "app revision resp is nil")
616+
if deploymentList == nil {
617+
return 0, telemetry.Error(ctx, span, nil, "deployment list is nil")
610618
}
611619

612-
if appRevisionResp.Msg.AppRevision.RevisionNumber != 0 {
613-
return int(appRevisionResp.Msg.AppRevision.RevisionNumber), nil
620+
if len(deploymentList.Items) > 0 {
621+
firstDeployment := deploymentList.Items[0]
622+
623+
if len(firstDeployment.Spec.Template.Annotations) > 0 && firstDeployment.Spec.Template.Annotations["helm.sh/revision"] != "" {
624+
helmRevisionNumberString := firstDeployment.Spec.Template.Annotations["helm.sh/revision"]
625+
helmRevisionNumber, err := strconv.Atoi(helmRevisionNumberString)
626+
if err != nil {
627+
err = telemetry.Error(ctx, span, err, "error converting helm revision number to int")
628+
return 0, err
629+
}
630+
631+
return helmRevisionNumber, nil
632+
}
614633
}
615634

616635
time.Sleep(2 * time.Second)

api/server/handlers/porter_app/get.go

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package porter_app
22

33
import (
4+
"fmt"
45
"net/http"
56

67
"github.com/porter-dev/porter/api/server/authz"
@@ -10,7 +11,6 @@ import (
1011
"github.com/porter-dev/porter/api/server/shared/config"
1112
"github.com/porter-dev/porter/api/server/shared/requestutils"
1213
"github.com/porter-dev/porter/api/types"
13-
utils "github.com/porter-dev/porter/api/utils/porter_app"
1414
"github.com/porter-dev/porter/internal/models"
1515
"github.com/porter-dev/porter/internal/telemetry"
1616
)
@@ -30,13 +30,15 @@ func NewGetPorterAppHandler(
3030
}
3131
}
3232

33+
// ServeHTTP handles the get porter app API endpoint
34+
//
35+
// NOTE: This endpoint is still in use as of 2024-04-15.
3336
func (c *GetPorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
3437
ctx := r.Context()
3538
ctx, span := telemetry.NewSpan(ctx, "serve-get-porter-app")
3639
defer span.End()
3740

3841
cluster, _ := ctx.Value(types.ClusterScope).(*models.Cluster)
39-
project, _ := ctx.Value(types.ProjectScope).(*models.Project)
4042

4143
appName, reqErr := requestutils.GetURLParamString(r, types.URLParamPorterAppName)
4244
if reqErr != nil {
@@ -58,14 +60,7 @@ func (c *GetPorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
5860
return
5961
}
6062

61-
// this is a temporary fix until we figure out how to reconcile the new revisions table
62-
// with dependencies on helm releases throuhg the api
63-
if project.GetFeatureFlag(models.ValidateApplyV2, c.Config().LaunchDarklyClient) {
64-
c.WriteResult(w, r, app.ToPorterAppType())
65-
return
66-
}
67-
68-
namespace := utils.NamespaceFromPorterAppName(appName)
63+
namespace := fmt.Sprintf("app-%s", app.Name)
6964
helmAgent, err := c.GetHelmAgent(ctx, r, cluster, namespace)
7065
if err != nil {
7166
err = telemetry.Error(ctx, span, err, "error getting helm agent")

0 commit comments

Comments
 (0)