This project provides a script to synchronize you manifests from a GIT
repository to your Puppet master.
puppet-sync -b BRANCH [options] -b, --branch BRANCH Mandatory, specify the git branch to clone. -t, --tmp DIR Specify the temporary directory. -d, --destination DIR Specify the directory which will be deploy to. -r, --repository URL Git url to the repository. -p, --passenger Restart apache/passenger instead of puppetmaster. Common options: -V, --version Display the script version. -v, --verbose Be more verbose. -h, --help Show this message
To sync a specific branch, to specific location, from a specific repository run the
script with the following arguments:
puppet-sync --branch master \ --destination /etc/puppet/environments \ --repository ssh+git://git/puppet.git
I usually call this script from a GIT hook. If your GIT repository is located
on a different server as your Puppet master, you will need to ensure that
a certain user can login to your Puppet server, without manual interactions.
# create a puppet-sync user useradd puppet-sync # change to the user sudo su - puppet-sync # generate a ssh key ssh-keygen -t rsa -b 4096 # copy the ssh key to your puppet master (where you have already # created the puppet-sync user too ;-)) scp ~puppet-sync/.ssh/id_rsa.pub puppet:/home/puppet-sync/.ssh
Now you need to add the following line to the Git hook file:
# /git/puppet.git/hooks/post-update # branch=`echo $1 | awk -F/ {'print $3'}` sudo -u puppet-sync ssh puppet /usr/local/bin/puppet-sync --branch \$branch -r ssh+git://git/puppet.git" exec git-update-server-info" >> /git/puppet.git/hooks/post-update