您好我是傀儡新手而且我正在尝试制作测试课程,但当我运行puppet apply-t
时,我收到错误Error: Evaluation Error: Error while evaluating a Function Call, Could not find class ::heroes
在我的测试目录下我有
.
├── examples
│ ├── init.pp
│ └── superhero.pp
└── manifests
├── init.pp
└── superhero.pp
2 directories, 4 files
在清单下的superhero.pp
下显示代码
class heroes {
user { 'thor':
ensure => present,
}
}
在我的superhero.pp
示例中,代码为
include heroes
在错误显示的示例下运行puppet apply --noop superheroes.pp
时,不确定为什么?
这是模块
下的完整树├── hosts
│ ├── examples
│ │ └── init.pp
│ └── manifests
│ └── init.pp
├── nginx
│ ├── examples
│ │ └── init.pp
│ ├── files
│ │ ├── default.conf
│ │ ├── index.html
│ │ └── nginx.conf
│ ├── index.html
│ └── manifests
│ ├── index.html
│ └── init.pp
├── test
│ ├── examples
│ │ ├── admins.pp
│ │ ├── init.pp
│ │ └── superhero.pp
│ └── manifests
│ ├── admins.pp
│ ├── init.pp
│ └── superhero.pp
└── users
├── examples
│ ├── admins.pp
│ └── init.pp
└── manifests
├── admins.pp
└── init.pp
答案 0 :(得分:6)
我认为可能存在两个问题
首先,当在puppet apply superheroes.pp
目录中运行examples
时,它不知道在哪里寻找其他模块(例如heroes
你include
})。要知道在哪里查找模块,you need to give it a modulepath:
puppet apply --modulepath = / path / to / modules --noop superhero.pp
另一个问题是您声明的heroes
类位于test/manifests/superhero.pp
。 Puppet尝试查找类的规则描述为here和here。除非你做一些不太常见的事情,比如在另一个类中定义一个类,puppet将使用以下规则来定位该类:
::
分隔)标识模块。init.pp
,否则文件名为.pp
扩展名的最后一个细分manifests
目录下的子目录。木偶看的路径是
<modulepath>/<module name>/manifests/<subdirectories>.../<file name>.pp
以下是文档中的示例:
== class name == == path ==
apache <module path>/apache/manifests/init.pp
apache::mod <module path>/apache/manifests/mod.pp
apache::mod::passenger <module path>/apache/manifests/mod/passenger.pp
回到你的问题:在include heroes
后,木偶会查看<modulepath>/heroes/manifests/init.pp
。相反,要在test/manifests/superhero.pp
中查看木偶,您需要添加课程test::superhero
。