in config/file_resource.go [99:148]
func (f *fileResource) validate(ctx context.Context) (*ManagedResources, error) {
switch f.GetState() {
case agentendpointpb.OSPolicy_Resource_FileResource_ABSENT, agentendpointpb.OSPolicy_Resource_FileResource_PRESENT, agentendpointpb.OSPolicy_Resource_FileResource_CONTENTS_MATCH:
f.managedFile.State = f.GetState()
default:
return nil, fmt.Errorf("unrecognized DesiredState for FileResource: %q", f.GetState())
}
f.managedFile.Path = f.GetPath()
// If desired state is absent, we can return now.
if f.GetState() == agentendpointpb.OSPolicy_Resource_FileResource_ABSENT {
return &ManagedResources{Files: []ManagedFile{f.managedFile}}, nil
}
perms, err := parsePermissions(f.GetPermissions())
if err != nil {
return nil, fmt.Errorf("can't parse permissions %q: %v", f.GetPermissions(), err)
}
f.managedFile.Permisions = perms
if f.GetFile().GetLocalPath() != "" {
f.managedFile.source = f.GetFile().GetLocalPath()
file, err := os.Open(f.GetFile().GetLocalPath())
if err != nil {
return nil, err
}
f.managedFile.checksum = checksum(file)
file.Close()
}
switch f.managedFile.State {
case agentendpointpb.OSPolicy_Resource_FileResource_ABSENT:
case agentendpointpb.OSPolicy_Resource_FileResource_PRESENT:
// If the file is already present no need to downloaded it.
if !util.Exists(f.managedFile.Path) {
if err := f.download(ctx); err != nil {
return nil, err
}
}
case agentendpointpb.OSPolicy_Resource_FileResource_CONTENTS_MATCH:
if err := f.download(ctx); err != nil {
return nil, err
}
default:
return nil, fmt.Errorf("unrecognized DesiredState for FileResource: %q", f.managedFile.State)
}
return &ManagedResources{Files: []ManagedFile{f.managedFile}}, nil
}