# This example illustrates the use of inherit_from to inherit body attribute
# values from another body.
###############################################################################
#+begin_src cfengine3
bundle agent __main__
{
  files:
    "$(this.promise_filename).txt"
      content => "Hello World$(const.n)2$(const.n)3$(const.n)4$(const.n)half-way
6$(const.n)7$(const.n)8$(const.n)9$(const.n)Byeeeeeee",
      create => "true";

  reports:
    "The first 3 lines of this file are:"
      printfile => head_n("$(this.promise_filename).txt", "3");

    "The whole file contains:" printfile => cat("$(this.promise_filename).txt");
}

body printfile head_n(file, lines)
{
  # Sets file_to_print the same as cat
  inherit_from => cat($(file));

  # Overrides number_of_lines from cat
  number_of_lines => "$(lines)";
}

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

###############################################################################
#+begin_src example_output
#@ ```
#@ R: The first 3 lines of this file are:
#@ R: Hello World
#@ R: 2
#@ R: 3
#@ R: The whole file contains:
#@ R: Hello World
#@ R: 2
#@ R: 3
#@ R: 4
#@ R: half-way
#@ R: 6
#@ R: 7
#@ R: 8
#@ R: 9
#@ R: Byeeeeeee
#@ ```
#+end_src
