title: How to work around vcsrepo "duplicate declaration" evaluation error?
body: <p>I am installing from github using puppet-vcsrepo. The code looks something like this:</p>
  
  <pre><code>class demo_class(
       $my_repo = undef,
       $my_tag  = undef,
  ){
      vcsrepo { "$my_repo",
          path     =&gt; "/home/user/$my_repo",
          source   =&gt; 'git@github.com:7yl4r/$my_repo.git',
          ensure   =&gt; latest,
          provider =&gt; git,
      }
  
      # then declare resources specific to my_tag
  }
  </code></pre>
  
  <p>This works just fine when called only once, but I am iterating over a list and installing dependencies so this resource sometimes gets declared twice. I think this is roughly equivalent to the code below.</p>
  
  <pre><code>class {"demo_class":
      my_repo =&gt; test_repo,
      my_tag  =&gt; test_tag1,
  }
  class {"demo_class":
      my_repo =&gt; test_repo,
      my_tag  =&gt; test_tag2,
  }
  </code></pre>
  
  <p>Doing this yields a server-side "Duplicate declaration" error because vcsrepo is trying to map the the same path twice. However, this is exactly the behavior I want: for both resources declared by <code>demo_class</code> to require the same repo in the same location. This is so that I can declare one or more resources using <code>demo_class</code> and be sure the repo given by <code>my_repo</code> (which may be common to multiple <code>my_tag</code>s) is there.</p>
  
  <p>How can I modify this class so that I can call it twice without hitting an error? </p>