天天看点

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

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

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

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

准备工作

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

运行下面的命令安装rake:

<code>sudo apt-get install rake</code>

操作步骤

具体步骤如下。

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

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

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

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

工作原理

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

<code>ssh = 'ssh -a -i ~/git/bitfield/bitfield.pem -l ubuntu'</code>

ssh的参数如下所示。

-a:将ssh密钥转发至远程服务器,这样将来就可以使用它来进行验证。

-i keyfile:设置要使用的ssh私钥文件(在本例中,使用的是amazon aws的私钥文件,如果已经设置了使用默认密钥来访问该服务器,就无须配置此参数)。

-l ubuntu:使用ubuntu用户登录(这里是使用标准的ec2服务器,如果是本地机器与服务器上使用相同的用户,就不需要使用此参数)。

然后,定义一个叫apply的rake任务:

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

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

<code>client = env['client']</code>

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

下一行命令如下所示:

<code>sh "git push"</code>

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

<code>sh "#{ssh} #{client} pull-updates"</code>

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

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

更多参考

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

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

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

继续阅读