Skip to content

Commit 6a80bd5

Browse files
committed
added get release targets for policy endpoint
1 parent 437a537 commit 6a80bd5

File tree

1 file changed

+39
-18
lines changed
  • apps/workspace-engine/pkg/server/openapi/policies

1 file changed

+39
-18
lines changed

apps/workspace-engine/pkg/server/openapi/policies/policies.go

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package policies
33
import (
44
"net/http"
55
"workspace-engine/pkg/oapi"
6+
"workspace-engine/pkg/selector"
67
"workspace-engine/pkg/server/openapi/utils"
78

89
"github.com/gin-gonic/gin"
@@ -19,23 +20,43 @@ func (p *Policies) GetReleaseTargetsForPolicy(c *gin.Context, workspaceId oapi.W
1920
return
2021
}
2122

22-
// policy, ok := ws.Policies().Get(policyId)
23-
// if !ok {
24-
// c.JSON(http.StatusNotFound, gin.H{
25-
// "error": "Policy not found",
26-
// })
27-
// return
28-
// }
29-
30-
// releaseTargets, err := ws.ReleaseTargets().Items(c.Request.Context())
31-
// if err != nil {
32-
// c.JSON(http.StatusInternalServerError, gin.H{
33-
// "error": "Failed to get release targets for policy: " + err.Error(),
34-
// })
35-
// return
36-
// }
37-
38-
c.JSON(http.StatusInternalServerError, gin.H{
39-
"error": "Not implemented",
23+
policy, ok := ws.Policies().Get(policyId)
24+
if !ok {
25+
c.JSON(http.StatusNotFound, gin.H{
26+
"error": "Policy not found",
27+
})
28+
return
29+
}
30+
31+
releaseTargets, err := ws.ReleaseTargets().Items(c.Request.Context())
32+
if err != nil {
33+
c.JSON(http.StatusInternalServerError, gin.H{
34+
"error": "Failed to get release targets for policy: " + err.Error(),
35+
})
36+
return
37+
}
38+
39+
matchingReleaseTargets := make([]*oapi.ReleaseTarget, 0)
40+
for _, releaseTarget := range releaseTargets {
41+
environment, ok := ws.Environments().Get(releaseTarget.EnvironmentId)
42+
if !ok {
43+
continue
44+
}
45+
deployment, ok := ws.Deployments().Get(releaseTarget.DeploymentId)
46+
if !ok {
47+
continue
48+
}
49+
resource, ok := ws.Resources().Get(releaseTarget.ResourceId)
50+
if !ok {
51+
continue
52+
}
53+
resolvedReleaseTarget := selector.NewBasicReleaseTarget(environment, deployment, resource)
54+
if selector.MatchPolicy(c.Request.Context(), policy, resolvedReleaseTarget) {
55+
matchingReleaseTargets = append(matchingReleaseTargets, releaseTarget)
56+
}
57+
}
58+
59+
c.JSON(http.StatusOK, gin.H{
60+
"releaseTargets": matchingReleaseTargets,
4061
})
4162
}

0 commit comments

Comments
 (0)