Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions api/k8s/application/k8sApplicationRestHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -1002,14 +1002,19 @@ func (handler *K8sApplicationRestHandlerImpl) CreateEphemeralContainer(w http.Re
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
return
}
if err = handler.validator.Struct(request); err != nil || (request.BasicData == nil && request.AdvancedData == nil) {
if err != nil {
err = errors.New("invalid request payload")
}
handler.logger.Errorw("invalid request payload", "err", err, "payload", request)
if request.BasicData == nil && request.AdvancedData == nil {
err = errors.New("invalid request payload, neither basic data nor advanced data provided")
handler.logger.Errorw("invalid request payload missing basic data and invalid data", "err", err, "payload", request)
common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
return
}
err = handler.validator.Struct(request)
if err != nil {
handler.logger.Errorw("invalid request payload", "err", err, "payload", request)
//common.WriteJsonResp(w, err, nil, http.StatusBadRequest)
common.HandleValidationErrors(w, r, err)
return
}
// check for super admin
restricted := handler.restrictTerminalAccessForNonSuperUsers(w, token)
if restricted {
Expand Down
10 changes: 5 additions & 5 deletions pkg/cluster/environment/bean/ephemeralContainerBean.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
)

type EphemeralContainerRequest struct {
BasicData *EphemeralContainerBasicData `json:"basicData"`
BasicData *EphemeralContainerBasicData `json:"basicData" validate:"required"`
AdvancedData *EphemeralContainerAdvancedData `json:"advancedData"`
Namespace string `json:"namespace" validate:"required"`
ClusterId int `json:"clusterId" validate:"gt=0"`
Expand All @@ -18,13 +18,13 @@ type EphemeralContainerRequest struct {
}

type EphemeralContainerAdvancedData struct {
Manifest string `json:"manifest"`
Manifest string `json:"manifest" validate:"required"`
}

type EphemeralContainerBasicData struct {
ContainerName string `json:"containerName"`
TargetContainerName string `json:"targetContainerName"`
Image string `json:"image"`
ContainerName string `json:"containerName" validate:"required"`
TargetContainerName string `json:"targetContainerName" validate:"required"`
Image string `json:"image" validate:"required"`
}

func (request EphemeralContainerRequest) GetContainerBean() repository.EphemeralContainerBean {
Expand Down
2 changes: 1 addition & 1 deletion pkg/k8s/bean/bean.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ type ResourceRequestBean struct {
DevtronAppIdentifier *bean.DevtronAppIdentifier `json:"-"` // For Devtron App Resources
ClusterId int `json:"clusterId"` // clusterId is used when request is for direct cluster (not for helm release)
ExternalArgoApplicationName string `json:"externalArgoApplicationName,omitempty"`
ExternalFluxAppIdentifier *bean2.FluxAppIdentifier `json: "-"`
ExternalFluxAppIdentifier *bean2.FluxAppIdentifier `json:"-"`
ExternalArgoAppIdentifier *bean3.ArgoAppIdentifier `json:"-"`
}

Expand Down
14 changes: 8 additions & 6 deletions specs/application/application-management.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -123,9 +123,10 @@ paths:
in: query
required: true
schema:
type: string
enum: ["argo", "helm", "flux"]
example: "argo"
type: integer
enum: [1, 2, 3]
description: "App type identifier: 1=Helm, 2=Argo, 3=Flux"
example: 2
requestBody:
required: true
content:
Expand Down Expand Up @@ -191,9 +192,10 @@ paths:
in: query
required: true
schema:
type: string
enum: ["argo", "helm", "flux"]
example: "argo"
type: integer
enum: [1, 2, 3]
description: "App type identifier: 1=Helm, 2=Argo, 3=Flux"
example: 2
requestBody:
required: true
content:
Expand Down
49 changes: 32 additions & 17 deletions specs/kubernetes/apis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,24 @@ components:

K8sRequestDto:
type: object
required:
- resourceIdentifier
properties:
resourceIdentifier:
$ref: '#/components/schemas/ResourceIdentifier'
patch:
type: string
description: patch data for update operations
description: |
JSON patch data for update operations. Contains the complete Kubernetes manifest
for the resource being updated/edited.
example: '{"apiVersion":"v1","kind":"Pod","metadata":{"name":"my-pod","namespace":"default"},"spec":{"containers":[{"name":"nginx","image":"nginx:1.25"}]}}'
forceDelete:
type: boolean
nullable: true
description: |
Force delete the resource. When true, the resource will be deleted immediately
without waiting for graceful termination. Only applicable for delete operations.
example: false

ResourceIdentifier:
type: object
Expand All @@ -64,25 +76,28 @@ components:
$ref: '#/components/schemas/GroupVersionKind'
required:
- name
- namespace
- groupVersionKind
- namespace
- groupVersionKind

GroupVersionKind:
type: object
required:
- Group
- Version
- Kind
properties:
group:
Group:
type: string
description: API group
version:
description: API group (capitalized field name as per Kubernetes API)
example: ""
Version:
type: string
description: API version
kind:
description: API version (capitalized field name as per Kubernetes API)
example: "v1"
Kind:
type: string
description: resource kind
required:
- group
- version
- kind
description: Resource kind (capitalized field name as per Kubernetes API)
example: "Pod"

ManifestResponse:
type: object
Expand Down Expand Up @@ -373,14 +388,14 @@ paths:
description: Internal server error
put:
summary: Update Kubernetes resource
description: Updates an existing Kubernetes resource manifest
description: Updates an existing Kubernetes resource manifest using patch data
operationId: UpdateResource
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ResourceRequestObject'
$ref: '#/components/schemas/ResourceRequestBean'
responses:
"200":
description: Updated resource manifest
Expand Down Expand Up @@ -454,11 +469,11 @@ paths:
description: Fetches events for Kubernetes resources
operationId: ListEvents
requestBody:
required: false
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ResourceRequestObject'
$ref: '#/components/schemas/ResourceRequestBean'
responses:
"200":
description: Resource events
Expand Down
17 changes: 13 additions & 4 deletions specs/kubernetes/ephemeral-containers.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,9 @@ components:
schemas:
EphemeralContainerRequest:
type: object
description: |
Request to create an ephemeral container. Either basicData or advancedData is required.
If both are provided, advancedData takes priority over basicData.
properties:
basicData:
$ref: "#/components/schemas/EphemeralContainerBasicData"
Expand All @@ -121,16 +124,16 @@ components:
podName:
type: string
description: Name of the pod
userId:
type: integer
description: User ID
externalArgoApplicationName:
type: string
description: Name of the external Argo application (if applicable)
required:
- namespace
- clusterId
- podName
anyOf:
- required: ["basicData"]
- required: ["advancedData"]
EphemeralContainerBasicData:
type: object
properties:
Expand All @@ -149,10 +152,16 @@ components:
- image
EphemeralContainerAdvancedData:
type: object
description: |
Advanced configuration for ephemeral container using Kubernetes EphemeralContainer specification.
For complete field reference, see: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#ephemeralcontainer-v1-core
properties:
manifest:
type: string
description: Kubernetes manifest for the ephemeral container
description: |
Kubernetes manifest for the ephemeral container in JSON format.
Should conform to the EphemeralContainer v1 core specification.
Reference: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#ephemeralcontainer-v1-core
PodContainerList:
type: object
properties:
Expand Down
Loading