This looks OK at first glance, but in reality, if only one module is not loaded, then the a2enmod command won't be run. The module list should be made into a slist, and this should be iterated over, so that the 2 modules are checked independently.

Here's what I'm thinking:
  vars:
      "modules"      slist => { "proxy", "proxy_http" };
  classes:
      "rudder_reverse_proxy_apache_mod_${modules}_loaded" expression => fileexists("/etc/apache2/mods-enabled/${modules}.load");
  commands:
    debian::
      "/usr/sbin/a2enmod ${modules}"
        classes => rudder_common_classes("rudder_reverse_proxy_apache_modules"),
        ifvarclass => "rudder_reverse_proxy_apache_mod_${modules}_loaded";