在Puppet申请期间找不到课程

时间:2015-04-05 14:37:26

标签: puppet

我的木偶结构如下

/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

我的文件布局是否有一些非标准的东西阻止我使用apply?

我不是puppet模块的维护者,所以我无法改变文件结构或布局。

有许多相关的问题,但我无法将它们与我遇到的问题联系起来。

Edit1:添加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'
 }
}

3 个答案:

答案 0 :(得分:3)

当您运行puppet时,会对您的site.pp文件执行什么操作?您可能在redis.pp文件中没有节点定义(也不应该)。

答案 1 :(得分:2)

事实上这看起来有点混乱和错综复杂。

你想要的是

  • 一个实际的base模块
  • class base
  • 中定义/puppet/modules/base/manifests/init.pp

您还应该通过更好地安排清单来放弃import声明。如果您的Puppet版本已经足够(我认为3.6 +),请参阅the docs

答案 2 :(得分:-1)

首先,木偶有入口清单文件。 在主模式下,该条目是site.pp,而puppet deprated从版本3.5弃用它,它开始自动导入指定目录中的所有清单文件。 在应用模式下,该条目是命令中的指定文件。

所以它在您的生产环境中工作正常,puppet master读取site.pp(包含类库)和导入节点/ * .pp(redis.pp,包含节点定义)。但是当你使用“puppet apply /puppet/manifests/nodes/redis.pp”时,puppet只读了redis.pp,没有人告诉puppet基类的位置。