Articles of 木偶

木偶清单的例子

任何人都可以指向一个Puppet清单的完整示例(tar / zip)目录吗? 我得到指南,但只是看一个工作目录会更容易。

木偶:包装拆除,并确保停止

我对Puppet很新,但是到目前为止我非常喜欢。 现在我正在设置自动化一个小型的体系结构。 我有一个问题,但我想删除一个包,并确保它停止。 要做到这一点,我在清单中有以下条目: package { 'supervisor': ensure => absent, } service { 'supervisor': ensure => stopped, enable => false, hasstatus => true, } 这个问题是,一旦清单被应用到节点一次,下一次运行时会出现以下错误: debug: Service[supervisor](provider=debian): Could not find supervisor in /etc/init.d debug: Service[supervisor](provider=debian): Could not find supervisor.sh in /etc/init.d err: /Stage[main]/Screenly_core/Service[supervisor]: Could not evaluate: Could not find init script for 'supervisor' 有没有办法做某种条件语句,例如,如果程序包确实存在(然后在程序包移除之前运行),那么只能执行停止程序?

傀儡包,傀儡伪造,和良好的木偶代码?

有没有人有从PuppetLabs Forge提供的软件包的排名系统? 例如,有六个Apache软件包。 给定正态分布的话,可能会有效,一个会有不同的function,其余的都是未完成的小黑客。 有人知道使用哪一个。 我怎么知道?

如何使用Puppet为DNS区域生成良好的连续剧?

我的传统是在修改时将所有区域序列设置为时间戳。 既然Puppet是我的新宗教,我想从导出的资源构build区域文件时设置连续的时间戳。 一个有点琐碎的例子可能是这样的: file { "/tmp/dafile": content = inline_template("<%= Time.now.to_i %>"), } 这种方法的问题是,内容将始终不同,这将(最终)在每个木偶configuration轮询上引发区域文件的重build。 有没有什么办法可以插入一个时间戳,而不包含在与以前的状态进行比较的数据中?

确定/设置Puppet环境

我试图确定什么Puppet认为我的代理节点上的环境。 根据我在/etc/puppet/puppet.conf中configuration代理环境的文档 [agent] environment = development 为了查看环境,我发现这个代码添加了一个环境事实: require 'puppet' Facter.add("environment") do setcode do Puppet[:environment] end end 但是,在我的一个代理节点上,如果运行sudo facter -p environment ,则结果是生产 。 我试图通过sudo puppet agent –environment development来手动设置环境,但是结果是相同的。 任何想法发生了什么?

如何为一个定义types的通知或订阅设置处理程序?

如何将处理程序添加到puppet中定义的types? 例如,如果我有: define foo::bar ($baz) { … } 我如何在foo::bar中处理处理包含的东西 … notify => Foo::Bar['zippidy'] … ? 处理程序会在接收到通知时在条件逻辑内运行各种Execs。

如何在包含类时打破Puppet中的依赖关系

我有以下定义: class nginx::install{ … } class nginx::service{ … } class nginx::config{ … } class nginx{ include nginx::install, nginx::service, nginx::config } class jenkins::nginx{ include nginx file{'/etc/nginx/sites-enabled/jenkins': source => …, require => Class['nginx'], } } 但是当我运行这个时,Puppet告诉我我有一个循环: err: Could not apply complete catalog: Found 1 dependency cycle: (Class[Jenkins::Nginx] => File[/etc/nginx/sites-available/jenkins] => Class[Jenkins::Nginx]) Try the '–graph' option and opening […]

傀儡可以运行一个shell脚本(它从主下载),而不保存它?

我在Puppet模块中有一个步骤,粗略地做了以下设置一些应用程序键: file { '/root/setup_app_keys.sh': ensure => file, owner => 'root', group => 'root', mode => '0700', source => 'puppet:///modules/app_module/setup_app_keys.sh', } exec { 'setup_app_keys': unless => '/etc/pki/tls/private/app-foo.key', command => '/root/setup_app_keys.sh', user => 'root', group => 'root', } setup_app_keys.sh脚本有点太长,无法做成(可读的)单行程序,所以我把它保存到机器的文件系统中并从那里执行。 它在/etc/pki…创build它的文件/etc/pki…并且它工作得很好。 令人讨厌的是,shell脚本基本上是一次性使用的东西。 它不应该再次运行在机器的生命周期,但它必须留在Puppet存储它的文件系统。 如果它被删除,Puppet再次有用地重新创build它。 我认为必须有一种方法来使用exec完全重写,这将允许我在需要的时候从puppetmaster下载脚本,执行一次,然后放弃脚本(或者不把它存储在第一位)。 但是我试过的一切都是这样的: command => 'puppet:///modules/app_module/setup_app_keys.sh', 要么 command => 'curl http://__[various puppetmaster URLs]__ | sh', […]

木偶导出资源的.erb文件variables?

场景:我的configuration文件由一个.erb文件定义,其中包含下面的代码片段。 <% backupclients.each do |backup_files| -%> Job { Name = "Server" JobDefs = "DefaultJob" Client = <%= backup_files %>-fd Pool = TeraMonth Write Bootstrap = "/var/lib/bacula/<%= backup_files %>.bsr" } <% end -%> 服务器的configuration文件需要为每个客户端主机重复input。 如果我要创build一个简单的数组,这将工作没有问题。 然而,我想要做的是让每个主机自己注册,然后使用<<| |>>收集数据 <<| |>>编译指示与nagios_*types的nagios_*相似。 这个标准的例子涉及导出一个types。 class ssh { @@sshkey { $hostname: type => dsa, key => $sshdsakey } Sshkey <<| |>> […]

puppetlabs的file_linetypes不起作用

我一直在学习木偶,并用它来build立一个jenkins盒子。 我通过tomcat连接jenkins,因为我也可能在那里运行其他的webapps。 编辑 :我已经安装(通过puppet module install puppetlabs-stdlib )puppetlabs提供的stdlib使用file_linetypes。 这是用于设置jenkins和tomcat并将两者连接在一起的puppet模块清单。 class tomcat_jenkins { package{'java-1.7': ensure => installed, name => 'java-1.7.0-openjdk', } package{'tomcat6': ensure => installed, require => Package['java-1.7'], } package{'jenkins': ensure => installed, require => Yumrepo['jenkins'], } file{'jenkins-symlink': name => '/usr/share/tomcat6/webapps/jenkins.war', require => [Package['tomcat6'], Package['jenkins']], ensure => link, target => '/usr/lib/jenkins/jenkins.war', } file{ '/srv': ensure => […]