Ruby 使用puppet解析/etc/hosts的ip和主机名,并将其转换为/etc/sysconfig/network scripts/ifcfg-eth0

Ruby 使用puppet解析/etc/hosts的ip和主机名,并将其转换为/etc/sysconfig/network scripts/ifcfg-eth0,ruby,puppet,Ruby,Puppet,我正在踢机器与鞋匠安装红帽6,也把主机名。 我现在正在使用/etc/hosts文件管理我的机器(将来可能会切换到dns),希望让puppet(或任何可以工作的东西)通过/etc/hosts解析并找到我的ip地址和主机名(基于kickstart上cobbler提供的主机名)。诀窍是有些机器在/etc/hosts文件中有多个IP和主机名,例如: 192.168.80.192 testsrv01-maint 192.168.80.193 testsrv02-maint 192.168.80.194

我正在踢机器与鞋匠安装红帽6,也把主机名。 我现在正在使用/etc/hosts文件管理我的机器(将来可能会切换到dns),希望让puppet(或任何可以工作的东西)通过/etc/hosts解析并找到我的ip地址和主机名(基于kickstart上cobbler提供的主机名)。诀窍是有些机器在/etc/hosts文件中有多个IP和主机名,例如:

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
#
维护网络

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
#
关闭网络

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
#
主数据网络

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
#
辅助数据网络

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
我需要捕获每个ip和主机名对(一行),并将其转换为/etc/sysconfig/networkscripts/ifcfg eth*(eth1、eth2、eth3……)。Puppet将需要创建尽可能多的ifcfg eth*文件,因为/etc/hosts中有与主机名匹配的文件

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
我只需要将$IP和$hostname附加到ifcfg eth文件中,其余内容都是通用的

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec

那么,如何使用puppet为“testsrv01”获取4x ifcfg eth文件呢?

puppet非常不适合此任务。这需要一个脚本,Puppet不支持这个脚本。Puppet允许您声明可以在不同平台上移植实施的机器状态

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
对于Shell或Perl脚本来说,该任务足够简单

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
对于Puppet,它需要以下脚本

192.168.80.192  testsrv01-maint
192.168.80.193  testsrv02-maint
192.168.80.194  testsrv03-maint
192.168.120.192  testsrv01-ilo
192.168.120.193  testsrv02-ilo
192.168.120.194  testsrv03-ilo
192.168.150.192  testsrv01-pri
192.168.150.193  testsrv02-pri
192.168.150.194  testsrv03-pri
192.168.200.192  testsrv01-sec
192.168.200.193  testsrv02-sec
192.168.200.194  testsrv03-sec
  • 写入自定义事实以检索每个地址/主机名对
  • 设计一个定义的类型来将这样的一对呈现到ethX文件中
  • 您甚至可能需要生成相应的清单,以便为每个地址选择适当的接口索引

    192.168.80.192  testsrv01-maint
    192.168.80.193  testsrv02-maint
    192.168.80.194  testsrv03-maint
    
    192.168.120.192  testsrv01-ilo
    192.168.120.193  testsrv02-ilo
    192.168.120.194  testsrv03-ilo
    
    192.168.150.192  testsrv01-pri
    192.168.150.193  testsrv02-pri
    192.168.150.194  testsrv03-pri
    
    192.168.200.192  testsrv01-sec
    192.168.200.193  testsrv02-sec
    192.168.200.194  testsrv03-sec
    
    从各方面考虑,你不会利用木偶的长处,也不会遭受它的一些弱点

    192.168.80.192  testsrv01-maint
    192.168.80.193  testsrv02-maint
    192.168.80.194  testsrv03-maint
    
    192.168.120.192  testsrv01-ilo
    192.168.120.193  testsrv02-ilo
    192.168.120.194  testsrv03-ilo
    
    192.168.150.192  testsrv01-pri
    192.168.150.193  testsrv02-pri
    192.168.150.194  testsrv03-pri
    
    192.168.200.192  testsrv01-sec
    192.168.200.193  testsrv02-sec
    192.168.200.194  testsrv03-sec