《Puppet实战手册》——1.8 利用Rake部署变更

本节书摘来自异步社区《Puppet实战手册》一书中的第1章,第1.8节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.8 利用Rake部署变更

Rake是一个基于Ruby语言编写的实用工具,它可以帮助自动化完成Puppet的工作流程。虽然有很多其他方法支持在远程服务器上运行命令,但是Rake碰巧是本书使用的方法,它很容易扩展,可以非常方便地使用它做任何事。

此处要让Rake为做的第一件事情是:登录到远程服务器上,运行pull-updates脚本,将新修改的Puppet配置清单应用到该服务器上。做起来非常简单,下面来看看它是如何实现的。

准备工作
你可能已经安装了Rake(尝试运行rake命令进行检查),如果还没有,下面将介绍如何安装Rake。

运行下面的命令安装Rake:

sudo apt-get install rake
操作步骤
具体步骤如下。

1. 在Puppet仓库中,创建内容如下的Rakefile文件。使用正确的ssh命令替换ssh...,登录到服务器。

SSH = 'ssh -A -i ~/git/bitfield/bitfield.pem -l ubuntu'

desc "Run Puppet on ENV['CLIENT']"
task :apply do
  client = ENV['CLIENT']
  sh "git push"
  sh "#{SSH} #{client} pull-updates"
end

2. 在Git中添加这个文件,并将这些变更提交和推送到Git仓库。

ubuntu@cookbook:~/puppet$ git add Rakefile
ubuntu@cookbook:~/puppet$ git commit -m "adding Rakefile"
[master 63bb0c1] adding Rakefile
1 file changed, 8 insertions(+)
create mode 100644 Rakefile
ubuntu@cookbook:~/puppet$ git push
Counting objects: 31, done.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (28/28), 4.67 KiB, done.
Total 28 (delta 1), reused 0 (delta 0)
To git@github.com:bitfield/cookbook.git
   a063a5b..63bb0c1 master -> master

3. 如果读者自己的计算机中还没有Puppet仓库副本,从GitHub检出一份下来(将Git URL替换为Git仓库地址)。

[john@Susie:~/git]$ git clone
  git@github.com:bitfield/cookbook.git
Cloning into 'cookbook'...
remote: Counting objects: 36, done.
remote: Compressing objects: 100% (26/26), done.
remote: Total 36 (delta 1), reused 33 (delta 1)
Receiving objects: 100% (36/36), 5.28 KiB, done.
Resolving deltas: 100% (1/1), done.

4. 运行下面的命令,用服务器地址替换其中的cookbook:

[john@Susie:~/git]$ cd cookbook
[john@Susie:~/git/cookbook(master)]$ rake CLIENT=cookbook apply
(in /Users/john/git/cookbook)
git push
Everything up-to-date
ssh -A -i ~/git/bitfield/bitfield.pem -l ubuntu cookbook
   pull-updates
Already up-to-date.
Notice: Finished catalog run in 0.18 seconds
Connection to cookbook closed.

工作原理
通常手动更新配置的方式是:使用SSH登录到服务器,然后运行pull-updates脚本。这个Rakefile文件就是把这几步简单地自动化。首先,需要调整SSH命令行配置。

SSH = 'ssh -A -i ~/git/bitfield/bitfield.pem -l ubuntu'
ssh的参数如下所示。

-A:将SSH密钥转发至远程服务器,这样将来就可以使用它来进行验证。
-i KEYFILE:设置要使用的SSH私钥文件(在本例中,使用的是Amazon AWS的私钥文件,如果已经设置了使用默认密钥来访问该服务器,就无须配置此参数)。
-l ubuntu:使用ubuntu用户登录(这里是使用标准的EC2服务器,如果是本地机器与服务器上使用相同的用户,就不需要使用此参数)。
然后,定义一个叫apply的Rake任务:

desc "Run Puppet on ENV['CLIENT']"
task :apply do

end

desc只是一个有用的描述信息,如果运行rake–T命令,将会列出可用的任务。

$ rake–T
(in /Users/john/git/cookbook)
rake apply   # Run puppet on ENV['CLIENT']

运行rake apply命令时,会运行task和end之间的代码,内容如下:

client = ENV['CLIENT']
这里将会捕获环境变量CLIENT的值,告诉脚本需要连接的远程服务器的地址。

下一行命令如下所示:

sh "git push"
sh只是运行本地shell中的命令。在这个例子中,该命令是为了确保本地Puppet仓库中的任何变更都被推送到GitHub中的。如果这些变更没有被推送到GitHub,将不会在远程服务器中应用。

sh "#{SSH} #{client} pull-updates"
这一行代码使用脚本开始时定义的ssh命令行以及客户端地址,连接到那个客户端。登录成功后,以远程用户身份运行pull-updates命令。

目前,已经配置好pull-updates脚本。通过脚本从GitHub获取最新配置清单并在Puppet中应用,这些就是全部要做的。

更多参考
现在可以做出变更,并且无须登录到这些远程服务器就能将Puppet变更应用至远程服务器上。只要在机器上安装了Puppet,检出一份配置清单仓库,并第一次运行了Puppet,以后就可以远程为这台机器做任何管理操作。

怕麻烦的读者肯定早就会问:“能不能使用Rake完成Puppet的初次安装和仓库检出以及所有的配置变更呢?”

当然可以,下一节将讲解如何去实现这一目标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值