Articles of 木偶

轻松重新创build服务器的“状态”

我希望能够非常容易地为dev / testing / prod设置新的服务器。 能够设置新的开发虚拟机的原因是显而易见的,但为了推动我的关注是增加一个新的生产服务器/迁移到新的服务器。 我假设一个传统的备份解决scheme将不会工作,因为硬件可能会不同,所以二进制文件/configuration可能会有所不同。 我想要获得木偶的经验,所以我正在考虑创build一个清单来设置我的用户,安装Postgres,Nginx,PHP-FPM等,并按我指定的方式进行configuration。 然后我可以在新的服务器上安装puppet,拷贝我的清单并在本地应用。 这将使我的服务器configuration保持同步更容易。 有没有更好的方法,我不知道,我的方法有什么陷阱?

木偶:检查一组variables

编辑:我想出了我认为是这个最好的方法。 感谢人们回答我的问题 – 一路上有所帮助。 我要发布我的解决scheme,以便其他人可以find它,如果他们想要的。 原问题: 我想用puppet自动configuration一些我们的NFS文件系统。 但是,我希望清单能够确保在正确的networking上拥有知识产权。 Puppet通过interfaces和ipaddress_***事实有助于提供关于机器分配的IP的事实。 问题是我需要检查所有的接口(我宁愿不要假设它们是如何连接的)。 问题1:木偶可以通过事实列表循环吗? 例如: for $if in $interfaces { //do something } 问题2:如果Puppet能够做到这一点,是否有一种方法来评估一个string作为一个variables。 interfaces提供了一个非常好的方法来知道有多lessipaddress_***和network_***variables,但即使我可以循环它的值,我需要做一些事情: for $if in $interfaces { $net_var = eval("network_${if}") if $net_var = /^192\.168\.2\.0$/ { //do something } } 这可能吗? 我是否完全错误(对木偶有点新鲜)? 我最终做了什么: Puppet允许您为模块定义自定义分析器函数。 这些自定义函数只是ruby,所以你可以有效地做任何你想要的内容,包括循环。 你把它们放在<module_dir>/lib/puppet/parser/functions/ 。 为了做我想做的,我创build了<module_dir>/lib/puppet/parser/functions/has_network.rb以下内容: #has_network.rb require 'ipaddr' module Puppet::Parser::Functions newfunction(:has_network, :type => […]

如何将string转换为Puppet中的整数?

我想检查一个variables的内容是否是一个奇数。 但我需要一个整数。 $ip_array = split($ipaddress, '.') $odd_ip = $ip_array[3] % 2 if $odd_ip == 1 { notice("is odd") } 有一个简单的方法来将string转换为整数吗?

基本木偶:用ENC编写基础架构configuration,样式,方法?

我几乎不知道木偶问这个问题。 我想我明白,特定节点的configuration将由一些模块组成,并附带一些特定于节点的粘合剂。 从教程和文档可以看出,特定于节点的资源将位于node /nodename/ { }资源中的manifest / site.pp文件中,其中包含相关类的“includes”,以及使节点特定的资源configuration更改。 现在input一个外部节点分类器(ENC),如theForeman。 从我阅读的ENC文档中,我可以使用site.pp中的node /nodename/ { }资源,但是我不能声明任何新的资源。 基本上不推荐。 生成的YAML只是包含和可变的设置。 那么对于给定节点或主机组的特定configuration,这个接口是怎么做的? 你最终创build一个特定于节点的类吗? 你在哪里把这个类,在一个特定于节点的模块? 或者,您是否为您的特定于站点的configuration创build了一个全面的模块,并使用可以分配给特定节点的类?

我们如何在傀儡环境中实现自动联网?

我们的基础设施:我们运行一个约250个节点的木偶大师(大约100个硬件服务器)。 节点本身的操作系统完全被木偶化。 现在我们正在考虑将这个木偶设置扩展到以下领域: IP / DHCPpipe理 APCconfiguration 交换机configuration(通过SNMP,我们有Arista交换机) 库存pipe理(服务器在哪里?机器保修多久? 有没有一个软件(开源或无所谓),让我们实现这一目标? 我想它有一个关系数据模式,如server或switch ,可以通过Web UI填写。 然后,对于这四个点中的每一个,都有脚本从表中提取数据并将其推送到设备。 对,为什么我们不为这个傀儡呢? 我们很乐意,因为我们想要在一个地方有所有的configuration,但… 1 + 2 可以在傀儡中完成,但是250个节点看起来像是一个大傀儡地狱的地狱。 另外,我们希望通过puppet领class很快添加虚拟机configuration,所以“IP保留系统”需要“被动”,因此IMO需要在傀儡之外。 3可能是不可能的,因为交换机还没有准备好傀儡, 当我们在傀儡的节点层上面添加一个“硬件”层时,4可能与puppet是可能的 。 有什么想法吗?

如何安全地禁止用户的密码通过木偶?

我有我的SSH服务器设置为只使用密码身份validation禁用公钥身份validation。 当通过木偶添加用户时,我想禁用用户密码。 到目前为止,我已经提出了这似乎工作,但我不知道这是多么安全: user { 'john': ensure => 'present', comment => 'John Smith', groups => ['adm','sudo','wheel','users'], home => '/home/john', managehome => true, shell => '/bin/bash', password => '*', } 正在使用password => '*'定义被认为是安全的禁用用户密码?

我怎样才能在puppet需要一些资源?

在我的Puppet清单中,我需要执行一个命令,但是只有在另一个exec的数组驱动集合完成之后。 像这样(伪代码): define foo() { exec { "touch $name": } } …. { $bars = [ "a", "b", "c" ] foo { $bars : } exec { "echo Done" : require => [ Foo["a"], Foo["b"], Foo["c"] ] } } 如何实现上面给出的相同的依赖关系,而不用手动重复列表$bars的每个元素?

你删除不需要的包(* NIX),还是你禁用它们?

我正在build造一个皮匠和木偶设置。 我所做的一件事是用puppet禁用不需要的服务,但后来我想:我应该把它们与鞋匠一起移除,而不是在它们被安装后禁用它们吗? 例如,puppet中的基类通知客户端禁用smartd,cpuspeed,microcode_ctl和readahead_early(如果其虚拟机)。 为什么不删除呢? 如果我确实需要一些这些软件包,我可以安装。 当然,如果机器转换成物理硬件,我将不得不记得再次安装这些软件包。 我认为我的问题的最佳解决scheme是创build一个puppet类,如果它是虚拟的,则禁用服务A,如果不是,则启用它。 但是 ,也许别人有其他的见解?

木偶模块资源

我不想不断地写自己的模块来把系统转换成傀儡pipe理,我宁愿尽可能地利用社区。 到目前为止,我遇到了两个编译分发模块, Puppet Wiki和Puppet Managed的站点。 还有什么,和/或你觉得有用吗?

pipe理puppet filebucket?

我们正在实施Puppet,并希望使用filebucket来replace内部文件更改跟踪器。 将文件桶物理布局到哈希目录树中,以及在主文件桶中缺less“哪个客户端”元数据,这使得这有点具有挑战性。 我find了puppet附带的filebucket实用程序,以及http://reductivelabs.com/trac/puppet/wiki/Recipes/FileBucket中的快速和简洁的索引配方。 我可以看到使用这些作为合理pipe理界面的构build块并不是什么大问题。 但不是重新发明轮子… 任何人都有更好的?