微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Puppet 独立错误 - 未知资源类型:'testme_service::install' 解决方案 A:在 testme_service::install 中以不同的方式调用 profile解决方案 B:可行,但同事不鼓励此解决方案...

如何解决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 举报,一经查实,本站将立刻删除。