《Puppet实战手册》——1.9 利用Rake引导Puppet运行

1.9 利用Rake引导Puppet运行

如果希望让新的服务器成为Puppet基础设施的一部分,只需要在服务器上面运行几条命令就可以实现,但现在通过为Rakefile添加新引导任务的方式使这一过程更加简单。

准备工作
参考如下步骤,为这个方面做一些准备。

1. 将下面这行添加至Rakefile文件顶部。

REPO = 'git@github.com:bitfield/cookbook.git'
2. 将下面的任务添加至Rakefile文件的任意位置。

desc "Bootstrap Puppet on ENV['CLIENT'] with hostname ENV['HOSTNAME']"
task :bootstrap do
  client = ENV['CLIENT']
  hostname = ENV['HOSTNAME'] || client
  commands = <<BOOTSTRAP
sudo hostname #{hostname} && \
sudo su - c 'echo #{hostname} >/etc/hostname' && \
wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb && \
sudo dpkg -i puppetlabs-release-precise.deb && \
sudo apt-get update && sudo apt-get -y install git
  puppet && \
git clone #{REPO} puppet && \
sudo puppet apply --modulepath=/home/ubuntu/puppet
  /modules /home/ubuntu/puppet/manifests/site.pp
BOOTSTRAP
  sh "#{SSH} #{client} '#{commands}'"
end

操作步骤
读者需要配置一台新提供的服务器(这是一台可以登录,但没有安装Puppet或做过任何配置变更的服务器)。如果使用EC2,创建一个新的EC2实例。在AWS控制面板获取公网IP地址,就像下面这样:

ec2-107-22-22-159.compute-1.amazonaws.com
使用Rake引导新服务器的步骤如下。

1. 在nodes.pp中为新管理的服务器主机添加节点声明。例如,如果使用cookbook-test作为主机名,参考配置如下:

node 'cookbook-test' {
  include puppet
}

2. 在自己主机的Puppet仓库目录下运行如下命令(用新服务器IP地址替换CLIENT变量值,使用你希望用的主机名替换HOSTNAME变量值)。这条命令应该在同一行:

$ rake CLIENT=ec2-107-22-22-159.compute-1.amazonaws.com
HOSTNAME=cookbook-test bootstrap

3. 读者将看到类似以下的输出。

(in /Users/john/git/cookbook)
ssh -A -i ~/git/bitfield/bitfield.pem -l ubuntu ec2-107-22-22-159.compute- 1.amazonaws.com 'sudo hostname cookbook-test && sudo su -c 'echo cookbook-test >/etc/hostname' && wget http://apt.puppetlabs.com/ puppetlabs-release-precise. deb && sudo dpkg -i puppetlabs-release-precise.deb && sudo apt-get update && sudo apt-get -y install git puppet && git clone git@github.com:bitfield/ cookbook.git puppet && sudo puppet apply--modulepath=/home/ubuntu/puppet/ modules /home/ ubuntu/puppet/manifests/site.pp'

The authenticity of host 'ec2-107-22-22-159.compute-1.amazonaws.com
(107.22.22.159)' can't be established.

RSA key fingerprint is 23:c5:06:ad:58:f3:8d:e5:75:bd:94:6e:1e:a0:a3:a4.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added 'ec2-107-22-22-159.compute-1.amazonaws.com,
107.22.22.159' (RSA) to the list of known hosts.

sudo: unable to resolve host cookbook-test

--2013-03-15 15:53:44-- http://apt.puppetlabs.com/puppetlabs-release-
precise.deb

Resolving apt.puppetlabs.com (apt.puppetlabs.com)... 96.126.116.126, 2600:3c00::f03c:91ff:fe93:711a

Connecting to apt.puppetlabs.com (apt.puppetlabs.com)|
96.126.116.126|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 3392 (3.3K) [application/x-debian-package]

Saving to: `puppetlabs-release-precise.deb'
   0K                100% 302M=0s
2013-03-15 15:53:44 (302 MB/s) - `puppetlabs-release-precise.deb'
saved [3392/3392]

Selecting previously unselected package puppetlabs-release.
(Reading database ... 25370 files and directories currently installed.)

Unpacking puppetlabs-release (from puppetlabs-release-precise.deb) ...
Setting up puppetlabs-release (1.0-5) ...
Processing triggers for initramfs-tools ...
update-initramfs: Generating /boot/initrd.img-3.2.0-29-virtual
Ign http://us-east-1.ec2.archive.ubuntu.com precise InRelease
[ ... apt output redacted ... ]
Setting up hiera (1.1.2-1puppetlabs1) ...
Setting up puppet-common (3.2.2-1puppetlabs1) ...
Setting up puppet (3.2.2-1puppetlabs1) ...
* Starting puppet agent
puppet not configured to start, please edit /etc/default/puppet to enable
  ...done.
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Cloning into 'puppet'...
Warning: Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
Notice: /Stage[main]/Puppet/Cron[run-puppet]/ensure: created

Notice: /Stage[main]/Puppet/File[/usr/local/bin/pull-updates]/ensure:
defined content as '{md5}20cfc6cf2a40155d4055d475a109137d'

Notice: /Stage[main]/Puppet/File[/usr/local/bin/papply]/ensure:
defined content as '{md5}171896840d39664c00909eb8cf47a53c'

Notice: /Stage[main]/Puppet/File[/home/ubuntu/.ssh/id_rsa]/ensure:
defined content as '{md5}db19f750104d3bf4e2603136553c6f3e'

Notice: Finished catalog run in 0.11 seconds

工作原理
下面分解Rake任务是如何工作。为了让机器运行Puppet,需要给它设置主机名。

sudo hostname #{hostname}
sudo echo #{hostname} >/etc/hostname

接下来,从Puppet Labs仓库下载并安装Puppet和Git软件包。

wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb
sudo dpkg -i puppetlabs-release-precise.deb
sudo apt-get update && sudo apt-get -y install git puppet

禁止SSH StrictHostKeyChecking选项,避免脚本克隆Git仓库时发出提示消息。

echo -e \"Host github.com\n\tStrictHostKeyChecking no\n\"
  >> ~/.ssh/config

从仓库检出配置清单:

git clone #{REPO} puppet
最后,运行Puppet:

sudo puppet apply --modulepath=/home/ubuntu/puppet/modules
 /home/ubuntu/puppet/manifests/site.pp

这台新机器已经能够自动拉取并应用Puppet的变更,不再需要像前面那样登录到机器进行交互操作。读者可以使用这个Rake任务快速部署更多的新机器到Puppet的管控中。

时间: 2024-10-02 16:27:37

《Puppet实战手册》——1.9 利用Rake引导Puppet运行的相关文章

《Puppet实战手册》——1.7 使用cron运行Puppet

1.7 使用cron运行Puppet 通过已有的配置,已经可以做很多事情,包括在团队中管理Puppet清单,通过GitHub同步变更,使用papply脚本在机器上手动应用配置变更. 然而,截至目前还是需要手动登录到每台机器上更新Git仓库并重新运行Puppet.如果每台机器可以自动更新并应用变更,就更方便了.这样,只需要将修改推送至仓库,所有机器就会在一定时间范围内自动完成配置的变更. 做到这一点最简单的方法就是使用cron作业,定期从仓库更新配置文件并在有变更时运行Puppet. 准备工作 首

《Puppet实战手册》——导读

** 前言 **IT运维领域正在进行一场革命.新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化.为了充分利用云计算的强大功能,并且建立可靠.可扩展.安全.高性能的系统,拥有Puppet这样的工具是必不可少的.本书不仅讲解了Puppet的基础知识,而且深入探讨了Puppet的所有强大功能,详细展示了如何解决现实中的各种问题和应用场景.每一步操作都完整地展示了需要录入的命令,并且每一个技巧都有完整的代码示例. 本书带领读者从Puppet的基本知识开始,完整.专业地讲解Pu

《Puppet实战手册》——第1章 Puppet基础设施 1.1 简介

第1章 Puppet基础设施 未来计算机可能只有1000个真空管,而且只有1.5吨重. --<大众机械>(Popular Mechanics),1949 本章内容包括: 安装Puppet创建一个配置清单利用Git管理配置清单创建去中心化Puppet架构编写papply脚本使用cron运行Puppet利用Rake部署变更利用Rake引导Puppet运行利用Git钩子自动进行语法检查 1.1 简介 本书包含一些代表着Puppet社区认同的最佳实践的实例,一些可以帮助读者在工作中更容易使用Puppe

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

1.8 利用Rake部署变更 Rake是一个基于Ruby语言编写的实用工具,它可以帮助自动化完成Puppet的工作流程.虽然有很多其他方法支持在远程服务器上运行命令,但是Rake碰巧是本书使用的方法,它很容易扩展,可以非常方便地使用它做任何事. 此处要让Rake为做的第一件事情是:登录到远程服务器上,运行pull-updates脚本,将新修改的Puppet配置清单应用到该服务器上.做起来非常简单,下面来看看它是如何实现的. 准备工作 你可能已经安装了Rake(尝试运行rake命令进行检查),如果

《Puppet实战手册》——1.4 利用Git管理配置清单

1.4 利用Git管理配置清单 把Puppet配置清单存放在版本控制系统Git或Subversion中管理(推荐Git),所有Puppet管理的机器都从仓库取出配置,这是一个非常好的想法.它有以下几个优点. 可以取消对配置清单的更改并回滚至以前任意一个版本. 可以使用新的分支(branch)来测试新功能. 如果有多人需要修改配置清单,可以分别独立在自己的工作副本上进行,然后再合并所有的修改. 可以使用git log功能查看谁在什么时候做了什么修改. 准备工作 本节将导入现有的清单文件到Git仓库

《Puppet实战手册》——2.5 使用标准的命名约定

2.5 使用标准的命名约定 为模块和类选择合适的和翔实的名称将为维护代码提供很大的帮助.如果其他人需要阅读和使用你的配置清单,更是如此. 操作步骤下面是关于如何在配置清单中进行命名的一些技巧. 1. 以所管理的软件或服务为模块命名,如apache或haproxy. 2. 以提供的功能或服务为模块中的类命名,如apache::vhosts或rails::dependencies. 3. 如果模块中的一个类是为了禁用该模块提供的服务,可将其命名为disabled.例如,一个禁用Apache的类应该名

《Puppet实战手册》——1.6 编写papply脚本

1.6 编写papply脚本 人们希望可以尽量简单和简单地将Puppet配置应用到主机上,因此,通常会写一个脚本,它包含puppet apply命令和所需要的参数.要部署这个脚本到需要它的地方,除了Puppet,还有什么更好的工具吗? 操作步骤具体步骤如下. 1. 在Puppet仓库目录中创建puppet模块必需的目录. ubuntu@cookbook:~/puppet$ mkdir modules ubuntu@cookbook:~/puppet$ mkdir modules/puppet u

《Puppet实战手册》——2.2 使用社区推荐的Puppet风格

2.2 使用社区推荐的Puppet风格 如果其他人需要阅读或维护你的配置清单,或者如果读者想通过社区分享自己的代码,那么尽可能密切地按照现有风格.规范进行代码编写会是一个很好的主意.这些会在代码的布局.间距.引号.对齐方式和变量引用等方面进行约束,Puppet实验室官方在风格上的建议可以参考http://docs.puppetlabs.com/guides/style_guide. 工作原理本节会向读者展示一些更加重要的例子,以及如何确保代码是遵循风格规范的. 缩进配置清单中使用两个空格(不要使

《Puppet实战手册》——2.4 使用模块

2.4 使用模块 能够使Puppet配置清单清晰并且易于维护的最重要的方式之一就是将它们组织成模块. 模块是将相关的事物进行组合的一种简单方式.例如,一个webserver模块应该包括让一台机器作为Web服务器所必需的一切:Apache的配置文件.虚拟主机模板和一些必要的用来部署它们(Apache的配置文件.虚拟主机模板)的Puppet代码. 把代码拆分成不同的模块可以使它们更易于复用和共享,这也是组织配置清单的最合理的方式.下例将创建一个模块来管理memcached(一款在Web应用程序中非常