如何解决Puppet 独立错误 - 未知资源类型:'testme_service::install' 解决方案 A:在 testme_service::install 中以不同的方式调用 profile解决方案 B:可行,但同事不鼓励此解决方案...
我对 puppet 还很陌生,我正在测试 puppet 角色和配置文件策略(在 puppet 独立模式下),但我遇到了错误。
我构建了一个 minimal reproducible example 来说明问题。此示例的目的只是确认 /tmp 中的文件。
我开始测试:
-
sudo /opt/puppetlabs/bin/puppet apply --noop -t -d -e "include role::testme_service"
。
但是,当我运行该命令时,我不断收到错误消息:
Error: Evaluation Error: Error while evaluating a Resource Statement,UnkNown resource type: 'testme_service::install' (file:
/opt/puppetlabs/puppet/modules/profile/manifests/init.pp,line: 3,column: 5)`
但是,我不明白 UnkNown resource
错误,因为我已经在 testme_service::install
模块中定义了 testme_service
。
这可能是 PEBKAC 问题,但我不明白如何修复错误(puppet 的目录对我来说仍然有点神奇)。
问题
我在 Ubuntu 18 上运行 puppet5.5 ......有人可以给我一些关于如何解决问题的指示,并解释如果我错误地构建了这个角色和配置文件测试我应该做什么?
概述:目录结构
ubuntu@test-04:/opt/puppetlabs/puppet/modules$ pwd
/opt/puppetlabs/puppet/modules
ubuntu@test-04:/opt/puppetlabs/puppet/modules$
ubuntu@test-04:/opt/puppetlabs/puppet/modules$ tree
.
├── profile
│ ├── data
│ ├── files
│ ├── manifests
│ │ ├── init.pp
│ │ └── site.pp
│ └── templates
├── README.md
├── role
│ ├── data
│ ├── files
│ ├── manifests
│ │ └── init.pp
│ └── templates
└── testme_service
├── data
├── files
├── manifests
│ └── init.pp
└── templates
15 directories,5 files
ubuntu@test-04:/opt/puppetlabs/puppet/modules$
文件内容:
profile/manifests/init.pp
有
class profile::testme_service {
testme_service::install { "install the testme_service config in /tmp":
version => '0.0.1-foo-the-bar',}
}
profile/manifests/site.pp
有
node /^test-04/ {
include profile::testme_service
}
node default {
fail("Hit the default node in profile... Could not find the correct per-node profile")
}
role/manifests/init.pp
有
class role::testme_service {
include profile::testme_service
}
testme_service/manifests/init.pp
有
# implement testme_service::install
class testme_service::install (
String $version = '__broken_default__',) {
file { '/tmp/testme.conf':
ensure => file,owner => 'root',content => "version: $version",}
}
解决方法
解决方案 A:在 testme_service::install
中以不同的方式调用 profile
profile/manifests/init.pp
class profile::testme_service {
class { "testme_service::install":
version => '0.0.1-foo-the-bar',}
}
解决方案 B:可行,但同事不鼓励此解决方案...
- 在
define ...
中使用class ...
而不是testme_service/manifests/init.pp
也解决了这个问题...
# implement testme_service::install
define testme_service::install (
String $version = '__broken_default__',) {
file { '/tmp/testme.conf':
ensure => file,owner => 'root',content => "version: $version",}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。