// Copyright 2024 Matthew Rich . All rights reserved. package resource import ( "context" "fmt" "gopkg.in/yaml.v3" _ "log" "net/url" _ "os" _ "os/exec" "path/filepath" _ "strings" ) type Exec struct { loader YamlLoader Id string `yaml:"id"` // create command // read command // update command // delete command // state attributes State string `yaml:"state"` } func init() { ResourceTypes.Register("exec", func(u *url.URL) Resource { x := NewExec() return x }) } func NewExec() *Exec { return &Exec{loader: YamlLoadDecl} } func (x *Exec) URI() string { return fmt.Sprintf("exec://%s", x.Id) } func (x *Exec) SetURI(uri string) error { resourceUri, e := url.Parse(uri) if resourceUri.Scheme == "exec" { x.Id = filepath.Join(resourceUri.Hostname(), resourceUri.RequestURI()) } else { e = fmt.Errorf("%w: %s is not an exec resource ", ErrInvalidResourceURI, uri) } return e } func (x *Exec) ResolveId(ctx context.Context) string { return "" } func (x *Exec) Apply() error { return nil } func (x *Exec) LoadDecl(yamlFileResourceDeclaration string) error { return x.loader(yamlFileResourceDeclaration, x) } func (x *Exec) Type() string { return "exec" } func (x *Exec) Read(ctx context.Context) ([]byte, error) { return yaml.Marshal(x) }