mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-21 00:33:35 +02:00
feat: kubedog integration with unified resource handling (#2383)
* feat: add kubedog-based resource tracking integration Add kubedog tracking as an alternative to Helm's --wait flag with: - Real-time deployment progress tracking - Container log streaming - Fine-grained resource filtering (trackKinds/skipKinds/trackResources) Features: - New pkg/resource package for unified manifest parsing and filtering - New pkg/kubedog package wrapping kubedog library - CLI flags: --track-mode, --track-timeout, --track-logs - Helmfile YAML support for trackMode, trackTimeout, trackLogs, trackKinds, skipKinds, trackResources - Case-insensitive kind matching for filtering - Multi-context support with proper kubeconfig/kubeContext handling Tracking supports: Deployment, StatefulSet, DaemonSet, Job Resource filtering priority (highest to lowest): 1. trackResources - explicit resource whitelist 2. skipKinds - blacklist specific kinds 3. trackKinds - whitelist specific kinds Integration: - Disable Helm --wait when using kubedog tracking - Track after successful Helm sync/apply - Respect release.Namespace as fallback for resources without namespace - Use getKubeContext() for correct cluster targeting Tests: - Unit tests for resource filtering and kubedog options - Integration test with httpbin chart - E2E snapshot tests for YAML serialization - Documentation in docs/advanced-features.md Signed-off-by: yxxhero <aiopsclub@163.com> * fix: address PR #2383 review comments (round 4) 1. resource/filter.go: Skip empty whitelist entries in matchWhitelist - At least one field (kind/name/namespace) must be specified - Prevents matching all resources with empty TrackResources entries 2. config/apply.go: Add ValidateConfig for track-mode validation - Validate --track-mode must be 'helm' or 'kubedog' - Reject invalid values like --track-mode foo 3. config/sync.go: Add ValidateConfig for track-mode validation - Same validation as apply command - Ensures consistent behavior across commands Signed-off-by: yxxhero <aiopsclub@163.com> --------- Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
+90
@@ -0,0 +1,90 @@
|
||||
---
|
||||
# Source: __workingdir__/testdata/snapshot/kubedog_tracking/input.yaml.gotmpl
|
||||
|
||||
filepath: input.yaml.gotmpl
|
||||
helmBinary: helm
|
||||
kustomizeBinary: kustomize
|
||||
releases:
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-baseline
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-baseline
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-baseline
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
baseline: value
|
||||
trackMode: kubedog
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-with-timeout
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-with-timeout
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-timeout
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
timeout: value
|
||||
trackMode: kubedog
|
||||
trackTimeout: 300
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-with-logs
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-with-logs
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-logs
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
logs: value
|
||||
trackMode: kubedog
|
||||
trackLogs: true
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-with-whitelist
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-with-whitelist
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-tracked
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
tracked: value
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
type: Opaque
|
||||
data:
|
||||
secret: dmFsdWU=
|
||||
trackMode: kubedog
|
||||
trackKinds:
|
||||
- ConfigMap
|
||||
templates: {}
|
||||
renderedvalues: {}
|
||||
+90
@@ -0,0 +1,90 @@
|
||||
---
|
||||
# Source: __workingdir__/testdata/snapshot/kubedog_tracking/input.yaml.gotmpl
|
||||
|
||||
filepath: input.yaml.gotmpl
|
||||
helmBinary: helm
|
||||
kustomizeBinary: kustomize
|
||||
releases:
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-baseline
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-baseline
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-baseline
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
baseline: value
|
||||
trackMode: kubedog
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-with-timeout
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-with-timeout
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-timeout
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
timeout: value
|
||||
trackMode: kubedog
|
||||
trackTimeout: 300
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-with-logs
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-with-logs
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-logs
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
logs: value
|
||||
trackMode: kubedog
|
||||
trackLogs: true
|
||||
- chart: ../../charts/raw-0.1.0
|
||||
name: kubedog-with-whitelist
|
||||
labels:
|
||||
chart: raw-0.1.0
|
||||
name: kubedog-with-whitelist
|
||||
namespace: ""
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-tracked
|
||||
namespace: {{ .Release.Namespace }}
|
||||
data:
|
||||
tracked: value
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-secret
|
||||
namespace: {{ .Release.Namespace }}
|
||||
type: Opaque
|
||||
data:
|
||||
secret: dmFsdWU=
|
||||
trackMode: kubedog
|
||||
trackKinds:
|
||||
- ConfigMap
|
||||
templates: {}
|
||||
renderedvalues: {}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
releases:
|
||||
- name: kubedog-baseline
|
||||
chart: ../../charts/raw-0.1.0
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-baseline
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
data:
|
||||
baseline: value
|
||||
trackMode: kubedog
|
||||
|
||||
- name: kubedog-with-timeout
|
||||
chart: ../../charts/raw-0.1.0
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-timeout
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
data:
|
||||
timeout: value
|
||||
trackMode: kubedog
|
||||
trackTimeout: 300
|
||||
|
||||
- name: kubedog-with-logs
|
||||
chart: ../../charts/raw-0.1.0
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-logs
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
data:
|
||||
logs: value
|
||||
trackMode: kubedog
|
||||
trackLogs: true
|
||||
|
||||
- name: kubedog-with-whitelist
|
||||
chart: ../../charts/raw-0.1.0
|
||||
values:
|
||||
- templates:
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-tracked
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
data:
|
||||
tracked: value
|
||||
- |
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{`{{ .Release.Name }}`}}-secret
|
||||
namespace: {{`{{ .Release.Namespace }}`}}
|
||||
type: Opaque
|
||||
data:
|
||||
secret: dmFsdWU=
|
||||
trackMode: kubedog
|
||||
trackKinds:
|
||||
- ConfigMap
|
||||
Reference in New Issue
Block a user