Puppet教程:Puppet Manifests入门
Puppet非常庞大,并且是业内许多主要参与者正在使用的高效工具。
话虽这么说,很难将整个文档容纳在单个帖子中或者什至几个帖子中。
现在开始在theitroad2上为客户节点制作第一个Manifests。
开始列表之前的首要任务是在/etc/puppet/manifest /下的puppet master上配置site.pp文件。
尽管我们是在初次配置Puppet母版时确实创建了site.pp,但该文件仍为空。
现在,如下所示填充我们的site.pp文件。
[root@theitroad1 manifests]# pwd /etc/puppet/manifests [root@theitroad1 manifests]# ls site.pp [root@theitroad1 manifests]# cat site.pp import 'nodes.pp' $puppetmaster = 'puppet.theitroad.com' [root@theitroad1 manifests]#
从上面显示的示例中可以看到,该文件位于theitroad1(这是我们的Puppet主服务器)机器上的/etc/puppet/manifests目录中,并且我其中有一个名为site.pp的文件。
该文件包含两个线。
import语句告诉我们导入一个名为nodes.pp的文件。
然后,我们定义了一个名为“ puppetmaster”的变量,该变量可以在我们的Puppet列表中的任何位置使用。
请注意以下重要事项:
- Puppet列表的扩展名为.pp。
- “导入”语句用于在启动puppet时加载文件(因此,在上述情况下,当启动puppet时,它将加载nodes.pp文件)
- 要导入目录中包含的所有文件,我们可以以其他方式(例如import'clients/*')使用import语句。这将导入该目录内的所有.pp文件。
- 为了在字符串中使用变量,例如在site.pp文件中定义的变量,我们需要将该字符串放在双引号中,例如“这是$puppetmaster示例”
尽管在上面的示例中,我们已经导入了名为nodes.pp的文件,但是到目前为止,列表列表中没有名为nodes.pp的文件。
因此,让我们创建该文件。
现在,此文件包含客户端定义。
这意味着该文件将保存客户端的主机名,以及所有需要应用于该主机的内容。
注意:遵循惯例是在名为nodes.pp的文件中进行代理定义。
我们可以创建任何名称的文件,然后将该文件名导入site.pp文件。
(重要的是文件的内容)
[root@theitroad1 manifests]# pwd /etc/puppet/manifests [root@theitroad1 manifests]# ls nodes.pp site.pp [root@theitroad1 manifests]# cat nodes.pp node 'theitroad2.theitroad.com' { include httpd } [root@theitroad1 manifests]#
在上面显示的示例中,我们在Puppet主文件的列表目录中创建了一个nodes.pp文件。
文件的内容在theitroad2.theitroad.com上定义了一个主机(我们的代理)。
关于nodes.pp文件,请记住一些重要事项
- 节点是将连接到Puppet主服务器并获取配置的客户端
- 可以使用语句node在nodes.pp文件中定义一个节点。
- 通过将节点保持在单个qoutes中来定义它们。
- FQDN(完全限定域名)通常在添加节点定义时使用。
- 在节点定义中的第一个柯立括号之后,将开始应用要应用于节点的配置。
- 我们可以在节点内部包含一个类或者一个模块(再次提醒我!不要担心!我们稍后将介绍类和模块。)
- 在我们的nodes.pp的include语句中的httpd是一个模块(我们将在不久后创建)
- 我们可以使用逗号分隔列表,或者每行一个include statemet,在一个节点中包括多个类和模块。
puppet中的模块不过是列表,文件,模板,类等的集合。
换句话说,它是可移植的列表(包含puppet的所有组件)。
我们可以制作一个模块,其中包含配置完整程序包所需的所有必要内容。
例如,我们可以制作一个模块,该模块将为服务器配置ftp,并包含该模块,并在该主机的nodes.pp文件中包含include指令。
现在,使我们的模块名为httpd(已包含在nodes.pp文件中)
Puppet模块的结构:
Puppet中的每个模块都必须牢记其结构来构造。
模块必须包含所有必需的文件和目录。
我们定义的每个模块都必须存在一个名为init.pp的重要文件。
当Puppet启动时,通常会自动加载模块。
为了自动加载模块,必须在/etc/puppet/puppet.conf文件中提及保存模块的目录。
它是通过以下方式完成的。
关于Puppet中的模块要记住的一些重要事项
- 每个模块都必须遵循Puppet的模块结构及其文件和目录
- init.pp文件对于模块是必需的。
- 默认情况下,puppet将在/etc/puppet/modules和/var/lib/puppet/modules目录中查找模块。
- 我们可以为puppet添加添加目录,以在[main]部分下的puppet.conf文件中使用help moduledir参数查找模块。
例如:moduledir =/opt/modules /:/modules /
让我们创建第一个模块(nodes.pp中包含的httpd模块)
步骤1:创建模块的第一步是创建其所需的目录。
因此,我们将在/etc/puppet/modules /目录中创建模块(默认情况下,puppet将其中查找模块)。
[root@theitroad1 puppet]# pwd /etc/puppet [root@theitroad1 puppet]# mkdir -p modules/httpd/{files,templates,manifests} [root@theitroad1 puppet]# ls auth.conf manifests puppet.conf fileserver.conf modules puppet.conf.rpmsave [root@theitroad1 puppet]# touch modules/httpd/manifests/init.pp [root@theitroad1 puppet]#
在上面的示例中,我们创建了一个名为modules的目录,并其中创建了名为files,manifests,templates的目录。
此外,我们还在manifests目录中创建了一个名为init.pp的文件(非常必要)
因此,名为httpd的模块的全部内容将位于目录/etc/puppet/modules/httpd /中
步骤2:现在,填充我们刚刚为名为httpd的模块创建的init.pp文件。
因此,如上图所示,我创建了一个名为theitroad.conf的示例httpd配置文件。
到现在为止,已完成以下操作。
- 制作一个带有一个变量的site.pp文件,并其中导入nodes.pp文件
- 我们制作了一个nodes.pp文件,并在我们的theitroad2节点中包含了一个名为httpd的模块
- 我们制作了一个名为httpd的模块,其中包含两个资源(包和文件)
现在,让我们重新启动puppet master并在客户端(theitroad2)上运行puppet agent。
哇,你看到了吗?
当我在客户端节点(theitroad2)上运行Puppet代理程序时,它做了两件事,从上述屏幕截图中的通知消息中可以清楚地看出。
- 它在客户端节点theitroad2上安装了httpd软件包
- 它在/etc/httpd/conf.d/下创建了theitroad.conf。
它也报告了该文件的md5sum。