Articles of 木偶

用AugeasconfigurationPAM

我正在尝试使用Augeas在默认的Ubuntu 14.04安装中configuration/etc/pam.d目录下的文件。 我的目标是find所有具有“nullok”或“nullok_secure”参数的节点,并从configuration中删除这些参数。 这将最终由Puppet强制执行,但我目前正在使用本地机器上的augtool进行configuration。 从我读过的所有东西,下面的expression式应该让我用'nullok和'nullok_secure'节点: augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok'] augtool print /files/etc/pam.d/*/*/argument[../argument = 'nullok_secure'] 或者,交替地: augtool print /files/etc/pam.d/*/*/argument[. = 'nullok'] augtool print /files/etc/pam.d/*/*/argument[. = 'nullok_secure'] 不幸的是,这些都没有让我到任何地方,我不能,为我的生活找出原因。 这是我知道有一个文件的augtool print (为augtool print删除了注释): /files/etc/pam.d/common-auth /files/etc/pam.d/common-auth/1 /files/etc/pam.d/common-auth/1/type = "auth" /files/etc/pam.d/common-auth/1/control = "[success=2 default=ignore]" /files/etc/pam.d/common-auth/1/module = "pam_unix.so" /files/etc/pam.d/common-auth/1/argument = "nullok_secure" /files/etc/pam.d/common-auth/2 /files/etc/pam.d/common-auth/2/type = "auth" /files/etc/pam.d/common-auth/2/control = "[success=1 default=ignore]" /files/etc/pam.d/common-auth/2/module […]

木偶为补丁pipe理

我正在考虑使用Puppet进行大规模的补丁pipe理。 基于一些研究,这样做的方法是创build一个类并将其应用于任何需要的地方,如以下情况: class mypack_update { package { 'mypack': # ensure => '1.0.1d-15.el6', ensure => '1.0.1g-16.el6_5.7', } } 但是,这似乎是不实际的,特别是如果你有许多可用的补丁,从内核到ssl,bash等在许多机器上。 有什么最好的做法,我可以按照使这更容易? 我们主要使用的Linux发行版是SLES 11.3。

使用工头安装软件包

我有一个运行Foreman和Puppet(作为主)的Ubuntu 14.04服务器,以及一些其他的Ubuntu 14.04机器,它们是Puppet节点。 我想用Foreman来确保Puppet节点安装了某些软件包。 对于普通的木偶,你可以包括类似的东西 package { "screen": ensure => "installed" } 触发一个apt命令并安装屏幕。 但我不知道如何与福尔曼做到这一点。 这甚至有可能吗? 我还没有find任何的引用,所有的search结果有一些如何安装福尔曼本身。

木偶:在实现导出的资源时能否提供额外的信息?

假设我想让hostB为每个puppet节点拥有一个独特的文件,但是hostB只知道hostB 。 理论上讲,如果我们允许hostB写一个自定义事实( my_special_owner ),然后通过hostA的my_resource定义中的my_resource函数来读取这个事实,那么理论上可以这样做。 但是这似乎太脏了:它污染事实名称空间与无意义的东西,可能会导致名称冲突。 对于这样一个简单的事情也是很多的编码。 以下是我所想到的一个模型: define my_resource() { $owner=${my_collector::owner} #This attempt fails file{$name: ensure=>exists, owner=>$owner} } node hostA { @@my_resource{"/tmp/file1.tmp"} } class my_collector($owner) { # How to pass $owner to the collector below? My_resource <<| |>> } node hostB { class {'my_collector': owner=>bob} }

木偶无法find依赖关系

我inheritance了一个傀儡服务器。 它有几十个主机在pipe理,它大多工作正常。 当我主要说有几个主机检查时失败: Error: Failed to apply catalog: Could not find dependency File[/etc/postfix/main.cf] for Augeas[set postfix 'relayhost' to 'smtp.mydomain.net'] 我捅了一下,并确定有问题的类定义是在文件“default.pp” postfix::config { "relayhost": value => "smtp.mydomain.net" } 现在,我的(可能是不正确的)理解,这个文件是由puppetpipe理的每个主机使用,但问题只存在于less数主机上。 大多数工作正常。 因此,我正在研究的问题是在客户端而不是服务器的理论。 显然,首先要检查的是文件/etc/postfix/main.cf是否确实存在于问题主机上。 它确实。 我花了一天的时间search这个,所有我发现的问题往往是人写错误,而写清单。 我没有发现任何使用清单的特定主机遇到​​麻烦,而清单在其他主机上显然可以正常工作。 我是傀儡(但不是Linux)的新手,我发现它很有趣,尽pipe你从傀儡中得到的错误信息可能有点神秘。 任何帮助最受欢迎。 系统是与木偶3.2.3-1的CentOS 6 —更新— (对不起,延迟回复,我在澳大利亚,所以时区差异适用) 好的,所以根据Craig给出的答案,我已经傀儡木偶上的puppet dir作为main.c的实例了 root@svd7puppetmaster:/etc/puppet ] # grep -R main.cf * modules/postfix/manifests/init.pp: file { '/etc/postfix/main.cf': modules/postfix/manifests/init.pp: source […]

使用审批控制pipe理数千台机器

我们是一家初创企业,正在加速并遇到pipe理数百台机器的问题,不得不每晚和每周发布一次,以及pipe理他们的configuration。 这通常是一个或多个系统pipe理员的工作,但在我们的情况下,我们只需要一个就可以完成。 我们研究了诸如Puppet和Distributed Shell之类的工具,但是它们都不符合我们正在寻找的东西。 对于每台机器,都需要从源代码构build一些Linux模块,更新软件包,设置堆栈和Linuxconfiguration,从Git中下载源代码,以及自动更新数据库模式定义。 问题是,我们需要通过批准来做到这一点。 那里有没有什么工具可以让我们在执行之前执行要批准的命令? 木偶似乎是最接近我们需要的,但从源头build设似乎很难build立,并需要一个额外的端口是开放的(我们只有端口22可用)。

木偶主机

你可以让Puppet在自定义端口上监听端口80而不是8140,因为我已经看到了它。 它可以在etc/puppet/puppet.conf为 masterport = 80 有一个命令,不知道我是否使用正确的puppet agent –server puppetmaster –masterport 80告诉代理在端口80听。然而,改变主人的conf文件,并重新启动木偶,它仍然听主站上的端口8140。 REF: http://docs.puppetlabs.com/references/latest/configuration.html?_ga=1.180521710.894759668.1437550934#masterport

错误:应用目录失败:Package 上的参数名称失败:

运行puppet时出现以下错误: 错误:无法应用目录:参数名称在包[ntp]上失败:名称在/etc/puppet/modules/ntp/manifests/install.pp:4上必须是string而不是数组 $ cat install.pp class ntp::install inherits ntp { package { 'ntp': ensure => $package_ensure, name => $package_name, } 在木偶大师,我已经安装ntp,并怀疑这是否导致冲突。 我安装了命令: $ sudo apt-get update && sudo apt-get -y install ntp 和configuration $ cat /etc/ntp.conf server 0.us.pool.ntp.org server 1.us.pool.ntp.org server 2.us.pool.ntp.org server 3.us.pool.ntp.org

Facter:自定义实际脚本“被parsing,但返回一个空的数据集”

对于facter / puppet,我安装了一行一行的shell脚本。 实际上有几个 在随后的运行,并与facter -p ,我看到以下输出: Fact file /etc/facter/facts.d/system_facts_<factname>.sh was parsed but returned an empty data set 如果我从命令行手动运行脚本,我会得到预期的输出。 如果我使用facter -p <factname>我得到空string。 木偶版本:3.8.2 注意:不是Facter的自定义事实,当由Puppet代理调用时返回空数据集

多个Puppet类需要访问资源并为其添加一个值,所以在其他类被评估之后,另一个类可以遍历它

我对Puppet相对来说比较陌生,最近又inheritance了一个非常大的基础设施(许多RHEL 6机器上的Puppet 3.6)。 我的Puppet基础结构看起来有点像这样: 我有my_module :: mysql,它将安装和configurationMySQL(基于从仪表板或包含它的其他类传递给它的参数)。 在许多其他事情中,它设置日志文件的位置。 (还有一些类似的类,有时这个类可能在同一个节点上被称为几种不同的方法。) 我现在有了my_module :: flume,它可以安装和configurationApache Flume,所以我可以在别处发布一些日志。 我的问题是:我需要my_module :: flume来知道my_module :: mysql的每个实例在哪里放置它的日志文件,所以它可以将它们添加到Flumeconfiguration文件中。 做这个的最好方式是什么? 我想我可以添加到某种types的资源(一个全局variables或文件),每个类可以添加一个文件path,所以my_module :: flume可以迭代通过列表,并将每个path添加到configuration文件,但我不知道如何做到这一点,同时仍然确保: 每次运行Puppet时都会启动日志文件列表(例如,不存在的日志文件不在列表中)。 Flume类只有在所有其他类已将path添加到列表之后才被评估。 任何input将不胜感激。