我有一台运行CentOS 6.6的机器,我想安装Puppet 4.x。 我按照文档页面上的说明,我先安装了Puppet仓库: rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm 无论我尝试通过百胜(木偶服务器或木偶代理)安装,它提供了我的木偶版本3.8.7。 但是我在Puppet官方网站上看到最新的Puppet是4.4。 我阅读文档,但我找不到通过yum安装此版本的方法。
木偶模板文件是erb rails文件。 我想要的行: Include modsecurity.d/*.conf 如果包含类mod_security,则包含在最终文件中。 从傀儡文档: http : //docs.puppetlabs.com/guides/templating.html – 这个片段将打印目录中的所有定义的类: <% classes.each do |klass| -%> The class <%= klass %> is defined <% end -%> 条件: <% if broadcast != "NONE" %> broadcast <%= broadcast %> <% end %> 我是新的语法。 定义的意思是否与包含一样? 对于条件如何检查一个特定的类,即如果isdefined(mod_security)…?
我写了一个自定义Puppet的事实,需要安装biosdevname工具。 我不知道如何正确设置,以便在工具尝试实例化自定义事实之前安装此工具。 事实是在这个过程的早期加载的,所以我不能简单地在清单中放置一个package { biosdevname: ensure => installed } ,因为在Puppet得到这个的时候,这个自定义事实已经失败了。 我很好奇,如果我能通过Puppet的运行阶段来解决这个问题的话。 我试过了: stage { pre: before => Stage[main] } class { biosdevname: stage => pre } 和: class biosdevname { package { biosdevname: ensure => installed } } 但是这不起作用……木偶在进入pre阶段之前加载事实: info: Loading facts in physical_network_config ./physical_network_config.rb:33: command not found: biosdevname -i eth0 info: Applying configuration version […]
package { 'mailman': ensure => installed, require => Package['exim4'], } maillist { 'mailman': ensure => 'present', admin => $admin, description => 'Site list', password => $master_password, require => Package['mailman'], } 如果没有安装“mailman”软件包,puppet会抱怨“找不到maillist的默认提供者”。 它似乎认为这是在清单中的错误,因为它完全中止,不适用于任何configuration。 因此,它不处理“package {'mailman':…}”指令,这意味着它不会安装mailman。 我需要注释掉maillist指令,然后应用configuration,以便安装mailman,然后取消注释并重新应用。 但这并不令人满意。 我怎样才能以更好的方式做到这一点?
为什么傀儡会在[每周]安排呢? 我在一个无主的设置中运行木偶,所以通过清单申请我只是运行puppet apply /etc/puppet/manifests/site.pp 在debugging模式下,这些只是挂起之前所说的最后一件事情 debug: /Schedule[never]: Skipping device resources because running on a host debug: /Schedule[daily]: Skipping device resources because running on a host debug: /Schedule[monthly]: Skipping device resources because running on a host debug: /Schedule[puppet]: Skipping device resources because running on a host debug: /Schedule[hourly]: Skipping device resources because running on a host […]
在傀儡中,模块的名字可以有一个破折号,因此variables也可以。 但是,那么我们如何使用这样的variables呢? 例如,我有一个在google-authenticator::params类中定义的$ssh_modevariables,所以我希望能够调用$google-authenticator::params::ssh_mode ,但puppet( $google-authenticator::params::ssh_mode )在短划线。 使用${google-authenticator::params::ssh_mode}也没有帮助。 我能做些什么来访问这个variables?
我有兴趣学习使用Puppet。 我反复看到的一个例子是用户pipe理。 据Puppet网站介绍 ,“configurationpipe理 – 用户账号”是Puppet Enterprise中唯一存在的function。 然而,我所看到的例子并没有提到需要企业版本。 FAQ的部分内容是: 我们只有一个开源版本的Puppet。 那么如果希望同时pipe理超过10个节点的用户,那么还需要为Puppet Enterprise支付费用吗? 我猜测那里的模型可能与Red Hat类似? 像Ubuntu这样的分布式软件包实际上是对木偶企业的分布?
我有几个模块使用相同的pipe理员邮件,现在它硬编码到位,是否正确设置一个全局variables,我的意思是,在全球范围内,还是有什么我可以做到这一点?
我有一个类,准备在puppet文件夹内的configuration文件和密钥,以便他们可以由其他节点下载。 除了木偶主人以外,其他每个节点都会被调用一次。 我遇到的问题是我只需要创build一次根目录,例如: file { '/etc/puppet/files/root': ensure => directory } 但是,当我开始多次调用该类时,会导致重复的资源。 我意识到,我可以通过使用这样的东西来简单地修复它,以提供一个独特的资源标题: file { "create-parent-dir-for-${name}": path => '/etc/puppet/files/rootdir', ensure => directory } 但是创build许多额外的资源来做同样的事情感觉不对,所以我很想知道是否有其他解决scheme。
如果一个variables是双引号,并且包含一个\n $test="hello\nworld" file { '/tmp/hello': content => $test } 然后创build一个新行: /tmp/hello hello world 问题 如果由于hierainput或regsubst结果导致input不是双引号,该怎么办: $test2=hiera("hiera::input") file { '/tmp/hello': content => $test2 } 结果是: hello\nworld 试图解决这个问题 假设是双引号内容variables将解决问题。 无论是: file { '/tmp/hello': content => "$test2" } 也不: file { '/tmp/hello': content => "\"$test2\"" } 解决了这个问题。 后者导致: "hello\nworld" 第二次尝试 在StackOverflow上阅读此答案后,尝试了另一个尝试。 hiera.yaml — bla: haha\nblabla 清单文件 $test=hiera('bla') $quoted […]