Допустим, у нас есть пустой репозиторий: https://domain.ru/configuration (как его сделать - можете найти в моем блоге по ключевому слову "subversion"), в котором мы планируем хранить конфиги Puppet.
Итак, в самую первую очередь необходимо сделать бэкап папки Puppet, чтобы случайно его не прибить в процессе работы:
tar -czf /root/puppet.tar.gz /etc/puppet
Теперь нам необходимо загрузить все имеющиеся у нас конфиги Puppet в Subversion, это делается командой import:
svn import /etc/puppet https://domain.ru/configuration/puppet -m 'init'
После этой операции в репозитории будет создана папка puppet и все конфиги будут лежать внутри нее.
Но, обращаю внимание, после этой операции папка /etc/puppet не становится рабочей копией! Она просто импортируется в репозиторий и все:
cd /etc/puppet
svn up
Skipped '.'
# что означает, что мы не минутой не в рабочей копии.
Теперь отключаем Puppet-сервер и сдвигаем исходную папку конфигов:
/etc/init.d/puppetmaster stop
mv /etc/puppet /etc/puppet_non_svn
Создаем новую папку для конфигов Puppet:
mkdir /etc/puppet
cd /etc/puppet
Делаем чекаут репозитория в нее:
svn co https://domain.ru/configuration/puppet ./ --username=puppet
Запускаем PuppetMaster:
/etc/init.d/puppetmaster start
Как Вы уже могли заметить, сервер Puppet работает с svn от имени пользователя puppet, в то время как я сам работаю по своему логину, nrg. Это сделано не случайно, а, во-первых, по соображениям безопасности и, во-вторых, по соображениям порядка :)
Дальнейшая работа с конфигурациями может выглядеть двумя способами - вы вносите изменения на сервере Puppet и коммитите их командой:
svn ci -m 'fix config'
либо исправляете конфиг "дома" (используя личный логин в svn):
svn ci -m 'fix config'
и после этого делаете обновление репозитория на сервере:
cd /etc/puppet
svn up
Ну вот и все, удачного использования и легкой поддержки кучи серверов :)
Получается что при chekout выгрузится репозиторий pupppet и будет две папки /etc/puppet/puppet.
ReplyDelete