我在虚拟主机上安装了 puppet 以进行测试。我使用的是 epel 的当前版本 2.6.18。为简单起见,此测试安装将在同一系统上运行服务器和客户端。
安装完 puppet 后,我运行puppet master --mkusers
启动服务器。一切正常。
--configtest显示我的模块目录是默认/etc/puppet/modules
文件夹。
我创建了文件夹结构 /etc/puppet/modules/ntp/manifests/,然后创建了一个如下的 ntp.pp 文件:
class ntp {
package {'ntp':
ensure => present
}
service {'ntp':
ensure => running,
}
}
include ntp
发行puppet --parseonly /etc/puppet/modules/ntp/manifests/ntp.pp
返回干净。无错误。
接下来我发布
puppet agent --test --server=`hostname
然后回来
info: Caching catalog for localhost.localdomain
info: Applying configuration version '1256130640'
notice: Finished catalog run in 1.23 seconds
我已经确认 ntp 尚未安装,方法是检查rpm -qa ntp
发行puppet --configprint all
确认上述模块路径。
我究竟做错了什么?
答案1
您没有使用正确的文件结构和命名约定,以便 Puppet 自动加载器能够正确查找和应用模块清单。您ntp.pp
应该被调用init.pp
,并且您的服务器应该有一个包含 的节点定义include ntp
。
这意味着你应该有这种目录结构:
$ tree /etc/puppet
/etc/puppet
├── manifests
│ └── site.pp
└── modules
└── ntp
└── manifests
└── init.pp
site.pp
:
# cat /etc/puppet/manifests/site.pp
node somenode {
include 'ntp'
}
init.pp
:
# cat /etc/puppet/modules/ntp/manifests/init.pp
class ntp {
package { 'ntp':
ensure => present
}
service { 'ntp':
ensure => running
}
}
此后,您的puppet agent --test
运行应该可以按预期进行。
你的下一站是学习木偶文档:http://docs.puppetlabs.com/learning/index.html
编辑:请注意,Puppet 2.6.18 已经过时了,很久以前就停产了。即使是 Puppet 2.7.x 也将于 10 月 1 日达到 EOL。如果您试用 Puppet,请使用当前的 Puppet 3.2.x 系列。每个主要操作系统和发行版都有可用的软件包,对于 RHEL/CentOS,请参阅http://yum.puppetlabs.com/。