func()

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
}