我正在浏览一个旧的木偶代码。它使用 mysql puppet 模块来安装 mysql-server。
我遇到了这个
class { '::mysql::server':
}
Run Code Online (Sandbox Code Playgroud)
和这个
class { 'mysql::server':
}
Run Code Online (Sandbox Code Playgroud)
现在我很困惑。它们是同一个意思还是两者之间有什么区别?
这是一个非常好的问题。简短的回答是它们是相同的,并且::类名不需要这样。
::我一直认为需要使用首字母来避免范围模糊(include bar在类foo中将包括::foo::bar而不是::bar),但检查文档,他们说,例如,include必须使用类的全名。
一个工作示例:
$ cat scope.pp
class foo {
class bar {
notice("foo::bar")
}
class { 'bar':
}
}
class bar {
notice("bar")
}
class { 'foo':
}
$ puppet apply scope.pp
Notice: Scope(Class[Bar]): bar
Run Code Online (Sandbox Code Playgroud)
我要指出的是,虽然这对于类作用域是正确的,但对于 Puppet 中的变量作用域来说肯定不是这样,如下所示。
$ cat var_scope.pp
$bar = "bar"
class foo {
$bar = "foo::bar"
notice($::bar)
notice($bar)
}
include foo
notice($bar)
$ puppet apply var_scope.pp
Notice: Scope(Class[Foo]): bar
Notice: Scope(Class[Foo]): foo::bar
Notice: Scope(Class[main]): bar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
440 次 |
| 最近记录: |