我正在尝试让类在 Puppet 中工作,但是当我在节点上尝试 Puppet Agent -t 时,它给出了一个错误:
root@webserver01:/etc# puppet 代理-t
信息:检索插件错误:无法从远程服务器检索目录:服务器上的错误 400:找不到类角色::webserver本地主机在节点上本地主机 警告:未在失败的目录上使用缓存错误:无法检索目录;跳过运行
注意:我编辑了本地主机上面的部分。我有以下 site.pp:
root@puppet:/etc/puppet/manifests# cat site.pp
node 'default' {
}
node 'webserver01' {
include roles::webserver
file {'/etc/test':
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
content => 'df',
}
}
模块路径:
root@puppet:/etc/puppet/manifests# puppet config print modulepath
Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
(at /usr/lib/ruby/vendor_ruby/puppet/settings.rb:1139:in `issue_deprecation_warning')
/etc/puppet/modules:/usr/share/puppet/modules
模块目录:
root@puppet:/etc/puppet/modules# tree --charset=ASCII
.
|-- roles
| `-- webserver
| |-- files
| |-- manifests
| | `-- init.pp
| `-- templates
和网络服务器类:
root@puppet:/etc/puppet/modules/webserver/manifests# cat init.pp
class webserver {
package { apache2:
ensure => present,
}
notify {"in webserver class": }
file {'/etc/test2':
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
content => 'df',
}
}
如果我在 /etc/puppet/modules/webserver 中拥有模块(删除角色部分),它就可以正常工作,但是当我尝试使用角色目录时,它仍然会失败。如果我将 init.pp 重命名为 webserver.pp,它仍然会失败。有人能帮忙吗?
答案1
带有roles::webserver
,roles
是它将查找的模块的名称 - 需要位于manifests
目录所在的位置。您的目录结构构成了webserver
模块,但它不起作用,因为它实际上不在模块目录中。要导入它,roles::webserver
类应该位于以下位置之一:
/etc/puppet/modules/roles/manifests/webserver.pp
或者
/etc/puppet/modules/roles/manifests/webserver/init.pp