Articles of 木偶

什么使用,而不是导入关键字?

我使用camptocamp / puppet-nagios中的以下示例清单: node 'central_monitoring_server' { import "nagios" $nagiosadmin_password = "XXXX" … include apache::base include nagios::base include nagios::nsca::daemon include nagios::webinterface } 不过我有这样的警告: 警告:使用“导入”已在nagios.pp中弃用。 请参阅http://links.puppetlabs.com/puppet-import-deprecation 我已经按照这样的链接说: 新用户应该避免import关键字,现有用户应该停止使用它。 相反,请执行以下操作: 要将节点定义保存在单独的文件中,请指定一个目录作为主清单。 要加载类和定义的types,请使用模块。 这两个function一起完全取代了导入。 但是,我不知道我应该怎么做。 我可以使用include关键字而不是import : include nagios 这就是全部? 这是否应该以同样的方式工作? 我使用木偶v3.7.4。

木偶:编译二进制文件

我们使用puppet来分发我们自己的软件(也就是我们写的东西,我们要在自己的服务器上运行)。 所以我们必须编译这个软件。 对我来说,我可以把它拉到木偶大师身上,这是有道理的。 编译一次,分发,我们的机器是同质的,二进制文件运行在他们的受膏主机上。 但是当我们升级主机时,各种库将会改变,我们可能会发现自己需要重新编译新的库集。 看来是正确的做法是打包我们的软件,把这些软件放到我们自己的地方,然后在木偶中使用软件包指令。 Q1:这听起来不错吗?我错过了一些重要的东西吗? Q2:那么deb是如何打包上传的? 这是一个手动释放过程吗? 这意味着我们将testing服务器升级到新的操作系统和库版本,以便进行编译和打包。 Q2B:现在假设我安装了CI服务器,我一直告诉我的团队我会安装。 据我所知,CI服务器对dist-upgrades一无所知。 那么这个部分必须保持手册吗?

为什么Hiera没有find环境,也不是傀儡

鉴于这些文件: # find /etc/puppetlabs/code -type f | grep -v modules | xargs head -n 100 ==> /etc/puppetlabs/code/environments/production/hieradata/common.yaml <== pgwatch: password: "mypass1" puppetdb: password: "mypass2" ==> /etc/puppetlabs/code/environments/production/manifests/site.pp <== node "todd.ca.seevibes.com" { class { 'postgresql::globals': encoding => 'UTF-8', locale => 'en_US.UTF-8', manage_package_repo => true, version => '9.1', } -> class{'postgresql::server': } -> postgresql::server::db{'puppetdb': user => 'puppetdb', password […]

文件复制失败使用Puppet文件资源

我正在尝试使用文件资源复制文件。 我的代码如下: node 'Node-002' { file { "/root/helloworld.txt": ensure => file, owner => "root", group => "root", mode => "0644", source => "puppet://modules/templates/${fqdn}/hosts.erb", } } 但是由于以下错误而失败 Error: /Stage[main]/Main/Node[Node-002]/File[/root/helloworld.txt]: Could not evaluate: Could not retrieve information from environment production source(s) puppet:///modules/templates/Node-002.example.com/hosts.erb 模板位置如下所示: ls -l /apps/wps/puppetlabs/code/environments/production/modules/templates/Node-002.example.com/hosts.erb -rw-r–r– 1 puppet puppet 462 Jul 20 02:13 /apps/wps/puppetlabs/code/environments/production/modules/templates/Node-002.wiley.com/hosts.erb 即使我在source参数中给出了完整的path,也会出现相同的错误。 我正在使用木偶4.5.4 […]

是否有可能通知Puppet中的File 资源并触发订阅该文件的资源?

我们正在使用Puppet来pipe理OpenStack安装。 OpenStack包含许多松散连接的部分,所有部分都通过AMQP进行通信。 有几个部分使用一个通用的configuration文件( /etc/nova/nova.conf ),所以典型的服务资源如下所示: service { 'openstack-nova-network': ensure => running, enable => true, subscribe => File['/etc/nova/nova.conf'], } 这一切都很好。 现在我们使用Puppet为一些底层Python代码安装一个修补程序。 当我们replace其中一个Python源文件时,我们希望重新启动使用它的服务。 一般来说,这与订阅/etc/nova/nova.conf的服务/etc/nova/nova.conf 。 我希望我可以通过通知文件来利用现有的依赖关系,像这样… file { '/path/to/some/file': source => 'puppet:///…/', notify => File['/etc/nova/nova.conf'], } …但这似乎没有工作。 除了为每项服务设置明确的notify条目之外,还有更好的方法来做到这一点吗? UPDATE 你知道,我开始怀疑我的问题不是很清楚。 我想为这个混乱道歉,并试图让我的请求更加明确: 我意识到我可以做一个显式的依赖关系,无论是作为服务的subscribe值或notify安装的文件的值。 问题是这意味着维护一个M * N的依赖关系matrix。 引入新文件意味着: 更新M service资源,或 更新N个file资源 这种重复的复制和粘贴工作容易出错,尤其是在多人负责configuration时。 一种select是维护一个中央服务清单: $services = [ service1, service2, service […]

意外的Puppet通知订单

我用傀儡vm跟随木偶教程,并有以下清单: # /root/learning-manifests/2.file.pp file { '/tmp/test1': ensure => present, content => "Hi.", } file { '/tmp/test2': ensure => directory, mode => 0644, } file { '/tmp/test3': ensure => link, target => '/tmp/test1', } notify { "I'm notifying you.": } notify { "So am I!": } 我的预期产出是: notice: I'm notifying you. notice: /Stage[main]//Notify[I'm notifying you.]/message: defined […]

在无DNS的环境中的木偶

虽然我知道DNS推荐给木偶,这是一个强制性的要求? 或者我可以使用普通的IP来获得这个? 谢谢。

木偶:可变的压倒一切的最佳实践

我想知道什么是在傀儡中重写variables的最佳实践。 我想让所有的节点(位于不同的地方,其中一些是qa,一些是活的)拥有相同的类。 现在我有这样的东西: class base_linux { <…> # something which requires $env and $relayhost variables } class linux_live { $relayhost="1.1.1.1" $env = "prod" include base_linux } class linux_qa { $relayhost="2.2.2.2" # override relayhost include base_linux } class linux_trunk { $env = "trunk" # override env inlude linux_qa } node "trunk01" { include linux_trunk include <something […]

添加一个木偶回购协议 – 服务器上的错误400:无效的参数启用在大括号?

我试图在接收新服务器时自动执行一些任务。 首先是添加一些yum回购。 我的/etc/puppet/modules/repo/manifests/init.pp : 1 class repo { 2 file { "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL": 3 owner => root, 4 group => root, 5 mode => 0644, 6 source => "puppet:///repo/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL" 7 } 8 9 yumrepo { 10 "epel": 11 descr => 'the epel repo', 12 mirrorlist => 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch', 13 enable => 1, 14 gpgcheck => 1, 15 […]

如果文件不存在,则使用Puppet将一行添加到文件中

我有一个定义的资源types来追加一个文件,如果它不存在,如下所示: define appendLineToFile($file, $line, $user) { exec { "echo \"\\n$line\" >> \"$file\"": path => '/bin', unless => "grep -Fx \"$line\" \"$file\"", user => $user, } } 它在大多数情况下都很有效,但是在下面这种情况下,双引号必须被两次转义(这非常令人费解)。 appendLineToFile { 'Add http_proxy & https_proxy to sudoers': file => '/etc/sudoers', line => "Defaults env_keep += \\\"http_proxy https_proxy\\\"", user => root, } 有没有办法改变它不需要转义的定义的资源types? 例如 line => "Defaults env_keep […]