0

根据 hiera 上的Puppet 文档,以下示例应该可以工作,但由于某种原因,它没有将参数传递给模块。

我有一个名为 的简单模块hello,它接受参数hello::talk,并输出一个文件/home/user/hello.txt

这是课程:

class hello {
    // other stuff
}
define hello::talk (
    $say_hello = true,
    $message = '',
    $say_goodbye = false,
) {
    file { '/home/user/hello.txt':
        owner => root, group => root, mode => 0755,
        ensure => file,
        content => template('hello/template.erb')
    }
}

如果在一个节点内,我会这样使用它:

node foo {
    include hello
    hello::talk {'config':
        say_hello = true,
        message = 'howdy!',
        say_goodbye = false,
    }
}

它按预期工作(创建文件等)

但是如果我尝试用 hiera 来做,我只能让它包含类,但不能做hello::talk一点。

这是我的 common.yaml:

classes:
    - hello

hello::talk -
    say_hello = true
    message = "Oh dear ..."
    say_goodbye = false

和site.pp:

hiera_include('classes')

node foo {

}

没有制作文件:(

更新

好的,所以我有点误解了文档大声笑......而且我仍然误解和之间的区别class......define但我想我的大脑稍后会明白这一点

我设法通过将 common.yaml 文件更改为define hello::talkclass hello::talk

classes:
    - hello
    - hello::talk

hello::talk::say_hello = true
hello::talk::message = 'Yay! ... Kinda'
hello::talk::say_goodbye = true

这让我想到了一个新问题……有没有一种方法可以重组类,这样,就像其他模块一样,我只需要包含hello然后可以设置参数。另外,如果我不必不断使用hello::talk::来设置参数,那就太好了......

4

1 回答 1

1

类和定义之间的主要区别在于,一个类只能调用一次,如果您提供不同的名称,则可以多次调用定义。

关于你的最后一个问题。

您需要在 hello 类中移动参数并在其中调用 hello::talk 类/定义(我假设 hello::talk 是这里的定义):

class hello (
    say_hello   = true,
    message     = 'howdy!',
    say_goodbye = false
) {
    hello::talk {'config':
      say_hello   => $say_hello,
      message     => $message ,
      say_goodbye => $say_goodbye,
    }
}

使用上述结构,您可以在 hiera 中设置:

classes:
    - hello

hello::say_hello: true
hello::message: 'Yay! ... Kinda'
hello::say_goodbye: true
于 2015-11-10T08:37:17.807 回答