After doing some investigation it looks like Pulp is doing exactly what Puppet Forge /v3/releases API endpoint does. This is more of a bug with how the Puppet client handles dependency resolution. Below is the debug output of installing the same openstacklib moduel from Puppet Forge. You will notice that in this case the client also makes a request for "https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-prosvc_repo". This request is successful because Puppet Forge database is aware ofall the dependencies for the older version of rabbitmq. The Pulp repo created in the example above does not know about all those dependencies.
[vagrant@dev ~]$ puppet module install stackforge-openstacklib --target-dir /tmp/test --config /dev/null --debug
Debug: Runtime environment: puppet_version=4.2.1, ruby_version=2.2.4, run_mode=user, default_encoding=UTF-8
Notice: Preparing to install into /tmp/test ...
Notice: Downloading from https://forgeapi.puppetlabs.com ...
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=stackforge-openstacklib
Debug: Evicting cache entry for environment 'production'
Debug: Caching environment 'production' (ttl = 0 sec)
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=aimonb-aviator
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-mysql
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-mysql&limit=20&offset=20
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-stdlib
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-stdlib&limit=20&offset=20
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-stdlib&limit=20&offset=40
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=nanliu-staging
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=bodepd-create_resources
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-rabbitmq
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-apt
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-apt&limit=20&offset=20
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=garethr-erlang
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=stahnma-epel
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/releases?module=puppetlabs-prosvc_repo
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Info: Resolving dependencies ...
Info: Preparing to install ...
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/stackforge-openstacklib-5.1.0.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/stackforge-openstacklib20160311-15147-1hsicwx | tar xof
-'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/aimonb-aviator-0.5.1.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/aimonb-aviator20160311-15147-1dqrxin | tar xof -'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/puppetlabs-mysql-2.3.1.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/puppetlabs-mysql20160311-15147-hztryd | tar xof -'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/puppetlabs-rabbitmq-3.1.0.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/puppetlabs-rabbitmq20160311-15147-nqmkn7 | tar xof -'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/garethr-erlang-0.3.0.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/garethr-erlang20160311-15147-1bw66wi | tar xof -'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/puppetlabs-apt-2.2.2.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/puppetlabs-apt20160311-15147-7orkij | tar xof -'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/puppetlabs-stdlib-4.11.0.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/puppetlabs-stdlib20160311-15147-vnmpjw | tar xof -'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Debug: HTTP GET https://forgeapi.puppetlabs.com/v3/files/stahnma-epel-1.2.2.tar.gz
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Executing: 'gzip -dc /home/vagrant/.puppet/cache/puppet-module/cache/stahnma-epel20160311-15147-jj65v0 | tar xof -'
Debug: Executing: 'find . -type d -exec chmod 755 {} +'
Debug: Executing: 'find . -type f -exec chmod u+rw,g+r,a-st {} +'
Debug: Executing: 'chown -R 1001:1001 .'
Notice: Installing -- do not interrupt ...
/tmp/test
└─┬ stackforge-openstacklib (v5.1.0)
├── aimonb-aviator (v0.5.1)
├─┬ puppetlabs-mysql (v2.3.1)
│ └── puppetlabs-stdlib (v4.11.0)
└─┬ puppetlabs-rabbitmq (v3.1.0)
├─┬ garethr-erlang (v0.3.0)
│ └── stahnma-epel (v1.2.2)
└── puppetlabs-apt (v2.2.2)
When I attempted to reproduce the bug, I got the following output:
[vagrant@dev test]$ puppet module --module_repository http://repository:test@localhost install stackforge-openstacklib --target-dir /tmp/test1 --config /dev/null --debug
Debug: Runtime environment: puppet_version=4.2.1, ruby_version=2.2.4, run_mode=user, default_encoding=UTF-8
Notice: Preparing to install into /tmp/test1 ...
Notice: Downloading from http://repository:test@localhost ...
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=stackforge-openstacklib
Debug: Evicting cache entry for environment 'production'
Debug: Caching environment 'production' (ttl = 0 sec)
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=aimonb-aviator
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=puppetlabs-mysql
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=puppetlabs-stdlib
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=puppetlabs-rabbitmq
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=puppetlabs-apt
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=garethr-erlang
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=stahnma-epel
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: HTTP GET http://repository:test@localhost/v3/releases?module=puppetlabs-prosvc_repo
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Debug: Failed to load library 'pe_license' for feature 'pe_license'
Error: Request to Puppet Forge failed.
The server being queried was http://repository:test@localhost/v3/releases?module=puppetlabs-prosvc_repo
The HTTP response we received was '404 NOT FOUND'
The output is the same as when installing from Puppet Forge until you get to the request that fails. The failing request is for information about puppetlabs-prosvc_repo module. This module is a dependency for the older rabbitmq 1.0.4 module. rabbitmq 1.0.4 is not a dependency of the openstacklib module, but a new version of it is. If you look at the successful output, you will notice that information about it is requested, but it is actually never installed. My theory is that the client just queries for information about all the versions of the dependencies and then decides which ones it actually needs to download.
Because puppetlabs-prosvc_repo is no longer available I could not verify that uploading it to the Pulp repo would resolve the problem. However, the metadata for this module does seem to still be available. Though you cannot download the module itself from the Puppet Forge.