puppet学习之使用git实现puppet版本控制

 

本文通过创建用户资源的例子介绍为多台agent同时添加用户账户、git仓库的创建、puppet加入git仓库、通过远程管理主机管理配置文件及文件版本的回滚处理。

一、系统环境

系统平台:Centos6.6_x86_64

主机规划:

192.168.115.21   puppet1.hnr.com  master

192.168.115.22   puppet2.hnr.com  agent

192.168.115.23   puppet3.hnr.com  agent

192.168.115.24   puppet4.hnr.com  远程管理主机

 

二、准备环境

实现agent端自动添加指定的用户

1.服务端上配置

创建user模块,模块目录为useruser类里有一个user资源目的是在agent主机上创建一个指定uid的用户

# mkdir -p/etc/puppet/modules/user/{manifests,templates,files}

# vi /etc/puppet/modules/user/manifests/init.pp

class user {

    user { 'hnr':

            ensure => present,

            uid => '520',

    }

}

# mkdir  /etc/puppet/manifests/nodes

nodes目录下创建客户端文件

wKioL1WvYieAuOp8AADXqZO3ANQ236.jpg

 

wKioL1WvYkLwmnCpAADYzl8Eanc109.jpg

修改site.pp文件

# vi /etc/puppet/manifests/site.pp

import "nodes/*.pp"

2.客户端puppet2上运行如下命令

wKioL1WvYm3gEJJCAAJg7zwao7M620.jpg

此时,在客户端puppet2上已经创建好hnr用户

puppet默认30分钟会推送数据到客户端上,从日志上可以看出数据已经推送到puppet3上

wKiom1WvYJeSNmE9AAhpAuBQxrI447.jpg

 

三、git实现puppet版本控制

puppet服务器上配置

1.安装配置git

# yum install git-daemon git

2.初始化puppet服务端git仓库

创建puppet repo目录

# mkdir -p /data/git/puppet.git

创建git仓库

# cd /data/git/puppet.git

# git --bare init

启动git,为了远程管理主机连接

# git-daemon --base-path=/data/git --detach --listen=0.0.0.0 --export-all --enable=receive-pack --enable=upload-pack --enable=upload-archive

wKioL1WvYqKxZeWjAAD0uOnoX6o154.jpg

 

3.puppet加入git

puppet master上的/etc/puppet目录加入仓库

# cd /etc

仓库克隆过程目录下的数据会删除,所以事先将/etc/puppet目录下的数据备份到/tmp目录下

# mv puppet/* /tmp/puppet

# git clone git://127.0.0.1/puppet.git

# cd /etc/puppet

# cp /tmp/puppet/* .

# git add *

# git commit -m "Add puppet to git repo"

wKiom1WvYM3imXcKAAX4TmGu11A822.jpg

# git push -u origin master

wKiom1WvYNzSZerNAAIDpePICKI915.jpg

仓库已创建好,包含了puppet的配置文件及清单

 

4.在管理主机创建副本,在/tmp目录下创建

# cd /tmp/

# git clone git://192.168.115.21/puppet.git

wKiom1WvYOzgbXwCAAHhLFn3ds4954.jpg

至此,管理主机上git仓库副本已经创建完成

修改文件并提交,增加一个testpuppet用户指定shell/bin/sh

# vi /tmp/puppet/modules/user/manifests/init.pp

wKiom1WvYPeiAmv6AAGnX-b0wDo047.jpg

修改完后提交

# git add /tmp/puppet/modules/user/manifests/init.pp

# git commit -m "add a testpuppet user"

wKiom1WvYQPBNBxQAAQGEfJMBMc827.jpg

# git push

wKiom1WvYSSgwCAvAAGVGwce3m8727.jpg

5.puppet master/etc/puppet目录下

# git pull

wKiom1WvYTTiX5L3AAJUXilsXEs834.jpg

 

6.puppet2客户端上执行如下命令

wKioL1WvYyjQcrDAAAIBKUeNXcw461.jpg

 

wKioL1WvYzfQr2OFAAEJKZ-n0gg464.jpg

至此,puppet2上已经创建好testpuppet用户

 

四、文件版本回滚

1.创建标签

# git tag -m 'first release' 1.0.0

wKioL1WvY2DRuNjCAAF0QrGHAkw703.jpg

2.修改文件,增加一个用户test2puppet

wKiom1WvYYizHPyuAAGr4vUhh6w261.jpg

# git add modules/user/manifests/init.pp

# git commit -m "add test2puppet user"

# git push

3.服务端上也执行了git pull,然后回滚至1.0.0版本

wKiom1WvYZuCYaBqAAM4pAXEBKg276.jpg

此时,查看文件发现test2puppet用户已经没有

wKioL1WvY47xFqmgAAFCAAfxSvk082.jpg