我已经阅读了有关范围的文档,但我仍然无法解决这个问题。我有两个非常相似的环境 - 所以我有:
模块/django-env/manifests/init.pp
class django-env {
package { "python26":
ensure => installed
}
# etc ...
}
import "er.pp"
Run Code Online (Sandbox Code Playgroud)
模块/django-env/manifests/er.pp
$venvname = "er"
$venvpath = "/home/django/virtualenvs"
class er {
file { "$venvpath/$venvname" :
ensure => directory
}
# etc ...
}
class er-dev {
include er
}
class er-bce-dev {
$venvname = "er-bce"
include er
}
Run Code Online (Sandbox Code Playgroud)
清单/模块.pp
import "django-env"
Run Code Online (Sandbox Code Playgroud)
清单/节点.pp
node default {
# etc ...
}
node 'centos-dev' imports default {
include django-env
include er-bce-dev
include er-dev
}
Run Code Online (Sandbox Code Playgroud)
这里的结果是“继承”有效——但只有“centos-dev”节点下的第一个“er-”项被处理,我要么得到 er-bce-dev 要么得到 er-dev,但不能同时得到两者。我在这里误解了一些基本的东西。
这是import和include之间的区别吗?(不确定我是否理解)
Mik*_*kko 11
Puppet 不支持这种配置,但可以轻松绕过限制。原因在于两个基本的傀儡“规则”:
er-dev
并且er-bce-dev
都包括 class er
。但是该类不能被包含两次,因此er
类仅使用 default$venvname = "er"
或 overridden 执行$venvname = "er-dev"
,但不能同时使用两者。
解决方案:将er
类更改为定义(请参阅 Puppet 语言教程(http://docs.puppetlabs.com/guides/language_tutorial.html)中的“定义” ):
模块/django-env/manifests/er.pp
# Create new er resource definition
define django-env::er($vpath="/home/django/virtualenvs", $vname="er") {
file { "$vpath/$vname" :
ensure => directory
}
# etc ...
}
Run Code Online (Sandbox Code Playgroud)
我们不需要$venvname
和$venvpath
变量,它们在定义中被指定为默认值。该名称django-env::er
将定义添加到django-env
命名空间并允许自动导入(见下文)。
import
和include
statemens的区别是:
import
处理文件,不执行类include
执行类注意:最后一条规则有一个非常强烈的例外:Puppet 模块查找。include
语句在许多情况下会自动导入。这里是其中的一些:
include foo
尝试导入文件 module_dir/foo/manifests/init.pp
include foo::bar
进口 module_dir/foo/manifests/bar.pp
通过这些自动导入和资源定义,您可以非常轻松地定义多个虚拟环境。改变node 'centos-dev'
:
node 'centos-dev' imports default {
include django-env
# The er resource with default values:
django-env::er { 'er-bce': }
# Another er resource with different environment name:
django-env::er { 'er-bce-dev': vname => 'bce-dev'}
}
Run Code Online (Sandbox Code Playgroud)
您可以删除基本上所有import
考虑django-env
模块的语句。
木偶快乐!