Puppet教程:Puppet Manifests入门

时间:2020-03-21 11:46:40  来源:igfitidea点击:

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。