Problem:
Question: Can I configure foreman/puppet to use multiple git repos?
I need foreman with these options:
- puppetdb
- puppetserver
- puppet manifests / modules managed by git repos
- multiple git repos for environments (gitlab, azure devops)
There is only 1 option available for each --puppet-server-git-repo
or --puppet-server-git-repo-path
Expected outcome:
- 5 Teams edit their puppet manifest files in their own Repository on Azure Devops.
- 1 Team edits the puppet manifest files in its own Gitlab Repository.
- Every Team has its own puppet environment in
/etc/puppetlabs/code/environments
- Foreman is used for reporting and inventory
- No provisioning is done via Foreman
- Foreman may be but does not have to be the ENC (as in ENC doing only the node classification but not editing the classes/manifests).
- Environments in Foreman are updated as soon as a change is made in the environments (I suppose by r10k?).
Foreman and Proxy versions:
- Foreman 3.8.0
- Foreman Proxy 3.8.0
Foreman and Proxy plugin versions:
- ruby-hammer-cli-foreman-puppet 0.0.6-1
- ruby-hammer-cli-foreman-webhooks 0.0.4-1
- ruby-puppetdb-foreman 6.0.2-1
- ruby-hammer-cli-foreman-puppet 0.0.6-1
- ruby-foreman-puppet 6.0.1-1
Puppet versions:
- Puppet Agent 7.27.0
- PuppetDB 7.15.0
- PuppetServer 7.14.0
Distribution and version:
Ubuntu 20.04.6
Other relevant data:
/etc/puppetlabs/puppet/auth.conf
path /puppet/v4/environment_classes
method find
allow *
foreman.yaml
---
:url: "https://puppet.services.example.com"
:ssl_ca: "/etc/ssl/certs/ca-certificates.crt"
:ssl_cert: "/etc/puppetlabs/puppet/ssl/certs/puppet.services.example.com.pem"
:ssl_key: "/etc/puppetlabs/puppet/ssl/private_keys/puppet.services.example.com.pem"
:puppetdir: "/opt/puppetlabs/server/data/puppetserver"
:puppetuser: "puppet"
:facts: true
:fact_extension: "json"
:timeout: 60
:report_timeout: 60
:report_retry_limit: 1
:threads: null
puppet.conf
[main]
basemodulepath = /etc/puppetlabs/code/environments/common:/etc/puppetlabs/code/modules:/opt/puppetlabs/puppet/modules:/usr/share/puppet/modules
certname = puppet.services.example.com
codedir = /etc/puppetlabs/code
environmentpath = /etc/puppetlabs/code/environments
hiera_config = $confdir/hiera.yaml
hostprivkey = $privatekeydir/$certname.pem { mode = 640 }
logdir = /var/log/puppetlabs/puppet
pluginfactsource = puppet:///pluginfacts
pluginsource = puppet:///plugins
privatekeydir = $ssldir/private_keys { group = service }
reports = foreman,puppetdb
rundir = /var/run/puppetlabs
server = puppet.services.example.com
show_diff = false
ssldir = /etc/puppetlabs/puppet/ssl
vardir = /opt/puppetlabs/puppet/cache
[agent]
classfile = $statedir/classes.txt
default_schedules = false
environment = production
localconfig = $vardir/localconfig
masterport = 8140
noop = false
report = true
runinterval = 1800
splay = false
splaylimit = 1800
usecacheonfailure = true
[server]
autosign = /etc/puppetlabs/puppet/autosign.conf { mode = 0664 }
ca = true
certname = puppet.services.example.com
external_nodes = /etc/puppetlabs/puppet/node.rb
logdir = /var/log/puppetlabs/puppetserver
node_terminus = exec
parser = current
rundir = /var/run/puppetlabs/puppetserver
ssldir = /etc/puppetlabs/puppet/ssl
storeconfigs = false
strict_variables = false
vardir = /opt/puppetlabs/server/data/puppetserver
puppetdb.conf
[main]
#server_urls = https://puppet.services.example.com:8081
server_urls = https://puppet:8081
routes.yaml
---
master:
facts:
terminus: puppetdb
cache: yaml