I strongly recommend creating a local repository for your RPMs, and using yum to manage packages (under Puppet direction). The job you propose to have Puppet do is among yum's core behaviors.
If you insist on doing it manually, however, then you have two main choices:
- Accept that Puppet will maintain copies of your RPMs on each machine. Give it a place to put them where they will be persistent (i.e. some place other than /tmp) -- Puppet will not download your RPMs again if they are already there.
- Create one or more custom facts by which to convey to Puppet whether the RPM(s) of interest are already installed and at the desired version. Your manifests can then declare both the File resource and the Package resource conditionally, based on the value of the fact.
Option (2) seems to be what you're asking for, but it is the messiest and most fragile alternative of all those available to you.
John