resources: file: Allow undefined file contents
An undefined file contents means we aren't managing that state!
This commit is contained in:
@@ -47,22 +47,22 @@ func init() {
|
|||||||
// FileRes is a file and directory resource.
|
// FileRes is a file and directory resource.
|
||||||
type FileRes struct {
|
type FileRes struct {
|
||||||
BaseRes `yaml:",inline"`
|
BaseRes `yaml:",inline"`
|
||||||
Path string `yaml:"path"` // path variable (should default to name)
|
Path string `yaml:"path"` // path variable (should default to name)
|
||||||
Dirname string `yaml:"dirname"`
|
Dirname string `yaml:"dirname"`
|
||||||
Basename string `yaml:"basename"`
|
Basename string `yaml:"basename"`
|
||||||
Content string `yaml:"content"` // FIXME: how do you describe: "leave content alone" - state = "create" ?
|
Content *string `yaml:"content"` // nil to mark as undefined
|
||||||
Source string `yaml:"source"` // file path for source content
|
Source string `yaml:"source"` // file path for source content
|
||||||
State string `yaml:"state"` // state: exists/present?, absent, (undefined?)
|
State string `yaml:"state"` // state: exists/present?, absent, (undefined?)
|
||||||
Recurse bool `yaml:"recurse"`
|
Recurse bool `yaml:"recurse"`
|
||||||
Force bool `yaml:"force"`
|
Force bool `yaml:"force"`
|
||||||
path string // computed path
|
path string // computed path
|
||||||
isDir bool // computed isDir
|
isDir bool // computed isDir
|
||||||
sha256sum string
|
sha256sum string
|
||||||
recWatcher *recwatch.RecWatcher
|
recWatcher *recwatch.RecWatcher
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFileRes is a constructor for this resource. It also calls Init() for you.
|
// NewFileRes is a constructor for this resource. It also calls Init() for you.
|
||||||
func NewFileRes(name, path, dirname, basename, content, source, state string, recurse, force bool) (*FileRes, error) {
|
func NewFileRes(name, path, dirname, basename string, content *string, source, state string, recurse, force bool) (*FileRes, error) {
|
||||||
obj := &FileRes{
|
obj := &FileRes{
|
||||||
BaseRes: BaseRes{
|
BaseRes: BaseRes{
|
||||||
Name: name,
|
Name: name,
|
||||||
@@ -120,11 +120,11 @@ func (obj *FileRes) Validate() error {
|
|||||||
return fmt.Errorf("Basename must not start with a slash.")
|
return fmt.Errorf("Basename must not start with a slash.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if obj.Content != "" && obj.Source != "" {
|
if obj.Content != nil && obj.Source != "" {
|
||||||
return fmt.Errorf("Can't specify both Content and Source.")
|
return fmt.Errorf("Can't specify both Content and Source.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if obj.isDir && obj.Content != "" { // makes no sense
|
if obj.isDir && obj.Content != nil { // makes no sense
|
||||||
return fmt.Errorf("Can't specify Content when creating a Dir.")
|
return fmt.Errorf("Can't specify Content when creating a Dir.")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -610,12 +610,17 @@ func (obj *FileRes) contentCheckApply(apply bool) (checkOK bool, _ error) {
|
|||||||
return false, err // either nil or not
|
return false, err // either nil or not
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// content is not defined, leave it alone...
|
||||||
|
if obj.Content == nil {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
if obj.Source == "" { // do the obj.Content checks first...
|
if obj.Source == "" { // do the obj.Content checks first...
|
||||||
if obj.isDir { // TODO: should we create an empty dir this way?
|
if obj.isDir { // TODO: should we create an empty dir this way?
|
||||||
log.Fatal("XXX: Not implemented!") // XXX
|
log.Fatal("XXX: Not implemented!") // XXX
|
||||||
}
|
}
|
||||||
|
|
||||||
bufferSrc := bytes.NewReader([]byte(obj.Content))
|
bufferSrc := bytes.NewReader([]byte(*obj.Content))
|
||||||
sha256sum, checkOK, err := obj.fileCheckApply(apply, bufferSrc, obj.path, obj.sha256sum)
|
sha256sum, checkOK, err := obj.fileCheckApply(apply, bufferSrc, obj.path, obj.sha256sum)
|
||||||
if sha256sum != "" { // empty values mean errored or didn't hash
|
if sha256sum != "" { // empty values mean errored or didn't hash
|
||||||
// this can be valid even when the whole function errors
|
// this can be valid even when the whole function errors
|
||||||
@@ -789,9 +794,14 @@ func (obj *FileRes) Compare(res Res) bool {
|
|||||||
if obj.path != res.Path {
|
if obj.path != res.Path {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if obj.Content != res.Content {
|
if (obj.Content == nil) != (res.Content == nil) { // xor
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
if obj.Content != nil && res.Content != nil {
|
||||||
|
if *obj.Content != *res.Content { // compare the strings
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
if obj.Source != res.Source {
|
if obj.Source != res.Source {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user