puppet - Puppet 独立错误 - 未知资源类型:'testme_service::install'
问题描述
我对 puppet 很陌生,我正在测试 puppet 角色和配置文件策略(在 puppet 独立模式下),但我遇到了一个错误。
我构建了一个最小的可重现示例来说明这个问题。此示例的目的只是确认 /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 ...
intestme_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",
}
}
推荐阅读
- javascript - ScrollTo 功能是 AMP 吗?
- c++ - 为什么 LoadImage 将我的 16x16 图标加载为 32x32?
- c# - PdfDocument.GetPageSize() 未设置为对象 iText7 的实例
- syntax - Turtle-RDF 本体 (OWL) - 可以重用基础吗?
- makefile - 'make && make install' 中的错误:makefile:37: ***缺少分隔符。停止
- javascript - 如何通过 chrome 扩展向已部署的 FLASK APP 发送 POST(带 url 的 json 文件)请求?
- yii2 - 如何使用模板将 Material texbox 转换为 Yii2 textInput
- swift - 如何将字符串转换为 json 字典。?
- android - 无法让 Dagger 注入 Viewmodel
- amazon-web-services - 如何从 s3 存储桶获取数据到 aws athena