157 lines
3.8 KiB
Plaintext
157 lines
3.8 KiB
Plaintext
@startuml "Helmfile Command Flow - Diff"
|
|
|
|
' Color scheme - eye-friendly colors with darker headers
|
|
skinparam {
|
|
ClassBackgroundColor #E8F4F9
|
|
ClassHeaderBackgroundColor #5D8AA8
|
|
ClassFontColor #000000
|
|
ClassStereotypeFontColor #FFFFFF
|
|
ClassAttributeFontColor #000000
|
|
ClassFontStyle bold
|
|
|
|
PackageBackgroundColor #F5F5F5
|
|
PackageBorderColor #DDDDDD
|
|
|
|
NoteBackgroundColor #FFF8DC
|
|
NoteBorderColor #DCDCAA
|
|
|
|
ArrowColor #5D8AA8
|
|
}
|
|
|
|
package "cmd" {
|
|
class "Command (e.g. DiffCmd)" as Command {
|
|
+RunE(cmd *cobra.Command, args []string): error
|
|
}
|
|
}
|
|
|
|
package "pkg/config" {
|
|
interface "ConfigProvider" as ConfigProvider {
|
|
+KubeContext(): string
|
|
+HelmBinary(): string
|
|
+Logger(): *zap.SugaredLogger
|
|
+Args(): string
|
|
+...()
|
|
}
|
|
|
|
interface "DiffConfigProvider" as DiffConfigProvider {
|
|
+DiffArgs(): string
|
|
+DetailedExitcode(): bool
|
|
+IncludeTests(): bool
|
|
+SkipDiffOnInstall(): bool
|
|
+...()
|
|
}
|
|
|
|
class "DiffImpl" as DiffImpl {
|
|
+GlobalImpl: *GlobalImpl
|
|
+DiffOptions: *DiffOptions
|
|
+Concurrency(): int
|
|
+IncludeNeeds(): bool
|
|
+Set(): []string
|
|
+...()
|
|
}
|
|
}
|
|
|
|
package "pkg/app" {
|
|
class "App" as App {
|
|
+OverrideKubeContext: string
|
|
+OverrideHelmBinary: string
|
|
+Logger: *zap.SugaredLogger
|
|
+...
|
|
+New(conf ConfigProvider): *App
|
|
+Diff(c DiffConfigProvider): error
|
|
+Apply(c ApplyConfigProvider): error
|
|
+...()
|
|
}
|
|
|
|
class "Run" as Run {
|
|
+state: *state.HelmState
|
|
+helm: helmexec.Interface
|
|
+ctx: Context
|
|
+ReleaseToChart: map[state.PrepareChartKey]string
|
|
+...
|
|
+diff(triggerCleanupEvent bool, detailedExitCode bool, c DiffConfigProvider, diffOpts *state.DiffOpts): (*string, map[string]state.ReleaseSpec, map[string]state.ReleaseSpec, []error)
|
|
+withPreparedCharts(helmfileCommand string, opts state.ChartPrepareOptions, f func()): error
|
|
+...()
|
|
}
|
|
}
|
|
|
|
package "pkg/state" {
|
|
class "HelmState" as HelmState {
|
|
+FilePath: string
|
|
+Releases: []ReleaseSpec
|
|
+...
|
|
+DiffReleases(helm helmexec.Interface, additionalValues []string, workerLimit int, ...): ([]ReleaseSpec, []error)
|
|
+PrepareCharts(helm helmexec.Interface, dir string, concurrency int, ...): (map[PrepareChartKey]string, []error)
|
|
+...()
|
|
}
|
|
|
|
class "DiffOpts" as DiffOpts {
|
|
+Context: int
|
|
+Output: string
|
|
+Color: bool
|
|
+NoColor: bool
|
|
+Set: []string
|
|
+...
|
|
}
|
|
}
|
|
|
|
package "pkg/helmexec" {
|
|
interface "Interface" as HelmExec {
|
|
+SetExtraArgs(...string)
|
|
+DiffRelease(context HelmContext, name, chart, namespace string, suppressDiff bool, flags ...string): error
|
|
+SyncRelease(context HelmContext, name, chart, namespace string, flags ...string): error
|
|
+...()
|
|
}
|
|
}
|
|
|
|
' Command flow
|
|
Command --> DiffImpl : creates
|
|
Command --> App : creates and uses
|
|
|
|
' Config relationships
|
|
DiffConfigProvider <|.. DiffImpl : implements
|
|
ConfigProvider <|.. DiffImpl : implements
|
|
|
|
' App relationships
|
|
App --> Run : creates and uses
|
|
App ..> DiffConfigProvider : uses
|
|
|
|
' Run relationships
|
|
Run --> HelmState : operates on
|
|
Run --> HelmExec : executes helm commands
|
|
Run ..> DiffOpts : configures diff options
|
|
|
|
' State relationships
|
|
HelmState ..> HelmExec : uses for helm operations
|
|
HelmState ..> DiffOpts : uses for diff configuration
|
|
|
|
note right of Command
|
|
Command Flow:
|
|
1. Parse flags into DiffImpl
|
|
2. Create App with DiffImpl
|
|
3. Call App.Diff()
|
|
end note
|
|
|
|
note right of App
|
|
App Flow:
|
|
1. ForEachState() loads state files
|
|
2. Creates Run instances
|
|
3. Calls Run.diff()
|
|
end note
|
|
|
|
note right of Run
|
|
Run Flow:
|
|
1. withPreparedCharts() prepares charts
|
|
2. diff() plans and executes diff operation
|
|
3. Uses HelmState.DiffReleases() for actual diff
|
|
end note
|
|
|
|
note right of HelmState
|
|
HelmState Flow:
|
|
1. prepareDiffReleases() prepares flags and options
|
|
2. DiffReleases() executes helm diff via helmexec
|
|
3. Returns affected releases and errors
|
|
end note
|
|
|
|
@enduml
|