在 Puppet 应用期间找不到 class
Can not find class during Puppet apply
我的人偶结构如下
/puppet
/manifests
/nodes
redis.pp
site.pp
/modules
site.pp 类似于
class base {
include ml-basefw
include ml-users
include ml-filelimits
include repoforge
include epel
class { 'ml-yumrepo':
base_url => "http://${puppet_server}/yumrepo"
}
}
import 'nodes/*.pp'
node default {
include base
}
当我运行
puppet apply --modulepath=/puppet/modules:/puppet/manifests --noop --debug /puppet/manifests/nodes/redis.pp
我收到
Error: Could not find class base for redis-1.test.ml.com on node redis-1.test.ml.com
是否有关于我的文件布局的非标准内容阻止我使用应用程序?
我不是人偶模块的维护者,所以我无法更改文件结构或布局。
有很多相关问题,但我无法将它们与我遇到的问题联系起来。
编辑 1:添加 redis.pp
node /^redis-\d+(.stage)?(.test)?(.aws)?.ml.com$/ {
include base
include epel
class { 'redis':
package_ensure => '2.8.15-1.el6.remi',
service_ensure => 'running',
conf_bind => '0.0.0.0',
conf_port => '6379',
}
firewall { '176 allow port 6379 for redis traffic':
chain => 'INPUT',
state => ['NEW'],
dport => '6379',
proto => 'tcp',
action => 'accept'
}
}
当您 运行 puppet 改为针对您的 site.pp 文件应用时会发生什么?您的 redis.pp 文件中可能没有节点定义(也不应该)。
这确实看起来有点混乱和令人费解。
你想要的是
- 一个实际的
base
模块
- 在
/puppet/modules/base/manifests/init.pp
中定义 class base
您还应该通过更好地安排清单来放松 import
声明。如果您的 Puppet 版本足够新(我认为 3.6
+),只需查看 the docs.
首先,puppet 有入口清单文件。
在主模式下,条目是 site.pp 并且 puppet deprated 从 3.5 版本开始弃用它,它开始自动导入指定目录中的所有清单文件。
在应用模式下,条目是您命令中指定的文件。
因此它在您的生产环境中运行良好,puppet master 读取 site.pp(包含 class 基础)并导入节点/*.pp(redis.pp,包含节点定义)。但是当你使用 "puppet apply /puppet/manifests/nodes/redis.pp" 时,puppet 只是读取 redis.pp,没有人告诉 puppet 基础 class 在哪里。
我的人偶结构如下
/puppet
/manifests
/nodes
redis.pp
site.pp
/modules
site.pp 类似于
class base {
include ml-basefw
include ml-users
include ml-filelimits
include repoforge
include epel
class { 'ml-yumrepo':
base_url => "http://${puppet_server}/yumrepo"
}
}
import 'nodes/*.pp'
node default {
include base
}
当我运行
puppet apply --modulepath=/puppet/modules:/puppet/manifests --noop --debug /puppet/manifests/nodes/redis.pp
我收到
Error: Could not find class base for redis-1.test.ml.com on node redis-1.test.ml.com
是否有关于我的文件布局的非标准内容阻止我使用应用程序?
我不是人偶模块的维护者,所以我无法更改文件结构或布局。
有很多相关问题,但我无法将它们与我遇到的问题联系起来。
编辑 1:添加 redis.pp
node /^redis-\d+(.stage)?(.test)?(.aws)?.ml.com$/ {
include base
include epel
class { 'redis':
package_ensure => '2.8.15-1.el6.remi',
service_ensure => 'running',
conf_bind => '0.0.0.0',
conf_port => '6379',
}
firewall { '176 allow port 6379 for redis traffic':
chain => 'INPUT',
state => ['NEW'],
dport => '6379',
proto => 'tcp',
action => 'accept'
}
}
当您 运行 puppet 改为针对您的 site.pp 文件应用时会发生什么?您的 redis.pp 文件中可能没有节点定义(也不应该)。
这确实看起来有点混乱和令人费解。
你想要的是
- 一个实际的
base
模块 - 在
/puppet/modules/base/manifests/init.pp
中定义
class base
您还应该通过更好地安排清单来放松 import
声明。如果您的 Puppet 版本足够新(我认为 3.6
+),只需查看 the docs.
首先,puppet 有入口清单文件。 在主模式下,条目是 site.pp 并且 puppet deprated 从 3.5 版本开始弃用它,它开始自动导入指定目录中的所有清单文件。 在应用模式下,条目是您命令中指定的文件。
因此它在您的生产环境中运行良好,puppet master 读取 site.pp(包含 class 基础)并导入节点/*.pp(redis.pp,包含节点定义)。但是当你使用 "puppet apply /puppet/manifests/nodes/redis.pp" 时,puppet 只是读取 redis.pp,没有人告诉 puppet 基础 class 在哪里。