diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-09 00:14:33 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-09 00:14:33 +0300 |
| commit | 756ae621bd97a8b776fefb15e5e7e2292f98ee45 (patch) | |
| tree | b454f958e6aef70bf7ca40dcbc106323cee2a42f /internal/resource/resource.go | |
| parent | 3f8b79f2b1384e3abc2b1bb2fe913688c7ec251c (diff) | |
dependencies
Diffstat (limited to 'internal/resource/resource.go')
| -rw-r--r-- | internal/resource/resource.go | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/internal/resource/resource.go b/internal/resource/resource.go index 2a01629..1cf451a 100644 --- a/internal/resource/resource.go +++ b/internal/resource/resource.go @@ -3,6 +3,7 @@ package resource import ( "fmt" "log" + "sort" ) type Applier interface { @@ -22,12 +23,17 @@ type Resource struct { dependsOn map[string]struct{} } -func Register(type_, name string, apply Applier) Resource { +func Register(type_, name string, apply Applier, deps ...string) Resource { + dependsOn := make(map[string]struct{}, len(deps)) + for _, id := range deps { + dependsOn[id] = struct{}{} + } + r := Resource{ Type: type_, Name: name, applier: apply, - dependsOn: make(map[string]struct{}), + dependsOn: dependsOn, } if err := getRepository().register(r); err != nil { @@ -45,6 +51,23 @@ func (r Resource) ID() string { return fmt.Sprintf("%s[%s]", r.Type, r.Name) } +// Dependencies returns this resource's own ID. It lets a single Resource be +// used as a DependsOn target, mirroring Multi.Dependencies. +func (r Resource) Dependencies() []string { + return []string{r.ID()} +} + +// sortedDependsOn returns the IDs this resource depends on, sorted for stable +// and readable log output. +func (r Resource) sortedDependsOn() []string { + ids := make([]string, 0, len(r.dependsOn)) + for id := range r.dependsOn { + ids = append(ids, id) + } + sort.Strings(ids) + return ids +} + func (r Resource) Apply() error { return r.applier.Apply() } |
