summaryrefslogtreecommitdiff
path: root/internal/resource/resource.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-07-09 00:14:33 +0300
committerPaul Buetow <paul@buetow.org>2026-07-09 00:14:33 +0300
commit756ae621bd97a8b776fefb15e5e7e2292f98ee45 (patch)
treeb454f958e6aef70bf7ca40dcbc106323cee2a42f /internal/resource/resource.go
parent3f8b79f2b1384e3abc2b1bb2fe913688c7ec251c (diff)
dependencies
Diffstat (limited to 'internal/resource/resource.go')
-rw-r--r--internal/resource/resource.go27
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()
}