Prototype: readenvfile(filename, optional_maxbytes)

Return type: data

Description: Parses key-value pairs from the file filename in env file format (man os-release). Returns the result as a data variable. Keys and values are interpreted as strings. maxbytes is optional, if specified, only the first maxbytes bytes are read from filename. Details of the os-release/env file format on freedesktop.org

Arguments:

  • filename: string - File name - in the range: "?(/.*)
  • otpional_maxbytes: int - Maximum number of bytes to read - in the range: 0,99999999999

Syntax example:

vars:
  "loadthis"
     data => readenvfile("/etc/os-release");

Complete example:

Prepare:

echo 'PRETTY_NAME="Ubuntu 14.04.5 LTS"' > /tmp/os-release
body edit_defaults empty
{
  empty_file_before_editing => "true";
  edit_backup => "false";
}

bundle edit_line insert_lines(lines)
{
  insert_lines:
    "$(lines)";
}

body printfile cat(file)
{
  file_to_print => "$(file)";
  number_of_lines => "inf";
}

bundle agent main
{
  classes:
    "file_found" expression => fileexists("/tmp/os-release");

  # Use readenvfile() to load /tmp/os-release, then convert to json:
  vars:
    file_found::
      "envdata" data => readenvfile("/tmp/os-release");
      "jsonstring" string => storejson(envdata);

  # Print input(os-release) and output(json) files:
  reports:
    file_found::
      "/tmp/os-release :" printfile => cat("/tmp/os-release");
      "/tmp/os-release converted to json:";
      "$(jsonstring)";
      "(The data for this system is available in sys.os_release)";

    !file_found::
      "/tmp/os-release doesn't exist, run this command:";
      "echo 'PRETTY_NAME=\"Ubuntu 14.04.5 LTS\"' > /tmp/os-release";
}
R: /tmp/os-release :
R: PRETTY_NAME="Ubuntu 14.04.5 LTS"
R: /tmp/os-release converted to json:
R: {
  "PRETTY_NAME": "Ubuntu 14.04.5 LTS"
}
R: (The data for this system is available in sys.os_release)

Run:

body edit_defaults empty
{
  empty_file_before_editing => "true";
  edit_backup => "false";
}

bundle edit_line insert_lines(lines)
{
  insert_lines:
    "$(lines)";
}

body printfile cat(file)
{
  file_to_print => "$(file)";
  number_of_lines => "inf";
}

bundle agent main
{
  classes:
    "file_found" expression => fileexists("/tmp/os-release");

  # Use readenvfile() to load /tmp/os-release, then convert to json:
  vars:
    file_found::
      "envdata" data => readenvfile("/tmp/os-release");
      "jsonstring" string => storejson(envdata);

  # Print input(os-release) and output(json) files:
  reports:
    file_found::
      "/tmp/os-release :" printfile => cat("/tmp/os-release");
      "/tmp/os-release converted to json:";
      "$(jsonstring)";
      "(The data for this system is available in sys.os_release)";

    !file_found::
      "/tmp/os-release doesn't exist, run this command:";
      "echo 'PRETTY_NAME=\"Ubuntu 14.04.5 LTS\"' > /tmp/os-release";
}
R: /tmp/os-release :
R: PRETTY_NAME="Ubuntu 14.04.5 LTS"
R: /tmp/os-release converted to json:
R: {
  "PRETTY_NAME": "Ubuntu 14.04.5 LTS"
}
R: (The data for this system is available in sys.os_release)

Output:

R: /tmp/os-release :
R: PRETTY_NAME="Ubuntu 14.04.5 LTS"
R: /tmp/os-release converted to json:
R: {
  "PRETTY_NAME": "Ubuntu 14.04.5 LTS"
}
R: (The data for this system is available in sys.os_release)

Notes: This function is used internally to load /etc/os-release into sys.os_release.

See also: data_expand(), readdata(), parsejson(), parseyaml(), storejson(), mergedata(), and data documentation.

History:

  • Introduced in 3.11.0