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

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

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

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的管控中。

相关文章
|
数据库 分布式计算 Hadoop
|
开发工具 git
《Puppet实战手册》——导读
IT运维领域正在进行一场革命。新一代的配置管理工具可以在几秒内完成大量服务器的构建(配置)和整个网络自动化。为了充分利用云计算的强大功能,并且建立可靠、可扩展、安全、高性能的系统,拥有Puppet这样的工具是必不可少的。
2244 0
|
Ruby
《Puppet实战手册》——2.12 使用正则表达式进行替换
Puppet通过regsubst函数提供了一种简单的方式来处理文本,在字符串中进行搜索和替换,或者从字符串中提取所需模式(子串)。人们经常需要用它来处理来自fact或来自外部程序的数据。
2082 0
|
Linux Spring Java
《Puppet实战手册》——2.11 使用in运算符
本节书摘来自异步社区《Puppet实战手册》一书中的第2章,第2.11节,作者:【英】John Arundel著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1558 0
|
Ubuntu Linux Ruby
《Puppet实战手册》——2.10 使用选择器和case语句
Puppet会比较$::operatingsystem和每个所提供的可能的值:Ubuntu、Debian等。这些值可以是正则表达式(例如,部分字符串匹配或通配符匹配),但在此例中,只使用文字字符串(或全字符匹配)。
1402 0
|
存储
《Puppet实战手册》——2.9 在if语句中使用正则表达式
正则表达式非常强大,但是很难理解和调试。如果感觉正在用的正则表达式太复杂,不能一眼看明白它在做什么,最好简化设计,使其更加简单化。但是,正则表达式捕获模式是个非常有用的功能。
2298 0
|
Ubuntu 数据中心 网络协议
《Puppet实战手册》——2.8 编写功能强大的条件语句
此外,也可以通过在清单内设置变量来调整引入的类的行为。例如,在数据中心A的服务器可能需要使用与在数据中心B不同的DNS服务器,或者可能需要为Ubuntu系统使用一组类,而其他系统使用另一组不同的类。
1744 0
|
存储
《Puppet实战手册》——2.7 数组中多个元素的遍历
当Puppet遇到数组作为一个资源的名称时,它会为数组中每个元素的创建一个资源。在这个例子中,$packages数组中的每一个软件包都会被Puppet创建一个新的package资源,并且使用相同的参数(ensure => installed)。这是一种简化相似资源书写的方式。
2032 0
|
5月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
149 3
|
安全 Linux 网络协议
puppet yum模块、配置仓储、mount模块
转载:http://blog.51cto.com/ywzhou/1577335 作用:自动为客户端配置YUM源,为使用yum安装软件包提供便捷。 1、服务端配置yum模块 (1)模块清单 [root@puppet ~]# tree /etc/puppe...
1151 0

推荐镜像

更多