diff --git a/docs/usage/customization-guide.md b/docs/usage/customization-guide.md index 773e0dffe..6fe360caf 100644 --- a/docs/usage/customization-guide.md +++ b/docs/usage/customization-guide.md @@ -316,6 +316,14 @@ Label namespace may be specified with `/[=]`. Comment lines (starting with `#`) are ignored. +You can include the following block if you want to define the expiration date +of features that are described in the feature files: + +```plaintext +# +expiry-time: 2023-07-29T11:22:33Z +``` +**Note: The time format that we are supporting is RFC3339.** + ### Mounts The standard NFD deployments contain `hostPath` mounts for diff --git a/source/local/local.go b/source/local/local.go index c8e8f1193..0faeea756 100644 --- a/source/local/local.go +++ b/source/local/local.go @@ -276,22 +276,19 @@ func getFeaturesFromFiles() (map[string]string, error) { klog.ErrorS(err, "failed to read file", "fileName", fileName) continue } - + // Append features fileFeatures := parseFeatures(lines) // Check expiration of file features - if expiryDate, ok := fileFeatures[ExpiryDateKey]; ok { - expiryDate, err := time.Parse(time.RFC3339, expiryDate) - if err != nil { - klog.ErrorS(err, "failed to parse feature file expiry date", "fileName", fileName) - continue - } + expiryDate, err := getExpirationDate(lines) + if err != nil { + klog.ErrorS(err, "failed to parse feature file expiry date", "fileName", fileName) + continue + } - // Features should not be included if they're expired - if expiryDate.Before(time.Now()) { - continue - } + if expiryDate.Before(time.Now()) { + continue } klog.V(4).InfoS("feature file read", "fileName", fileName, "features", utils.DelayedDumper(fileFeatures)) @@ -306,6 +303,27 @@ func getFeaturesFromFiles() (map[string]string, error) { return features, nil } +// Return the expiration date of a feature file +func getExpirationDate(lines [][]byte) (time.Time, error) { + for _, line := range lines { + if len(line) > 0 { + lineSplit := strings.SplitN(string(line), ":", 2) + + key := lineSplit[0] + + if key == ExpiryDateKey { + expiryDate, err := time.Parse(time.RFC3339, lineSplit[1]) + if err != nil { + return time.Now(), err + } + return expiryDate, nil + } + } + } + + return time.Now(), nil +} + // Read one file func getFileContent(fileName string) ([][]byte, error) { var lines [][]byte