如何在puppet中使用concat将两个文件合并到同一个文件中?

时间:2013-08-28 19:34:04

标签: puppet

define nagios::iconf( $host_name='', $ip='', $short_alias='',$service_name='',$remote_host_name='',$port=''){
$reconfigure = "/usr/local/nagios/etc/import/${host_name}.cfg"

   concat{$reconfigure:
      owner => nagios,
      group => nagios,
      mode  => 755
   }

   concat::fragment{"hosttemplate":
      target => $reconfigure,
      source => template('nagios/host.erb'),
      order  => 01,
   }

   concat::fragment{"servicetemplate":
      target => $reconfigure,
      ensure  => template("nagios/${service_name}.erb"),
      order   => 15
   }
}
include nagios

当我在site.pp中声明

node "blahblahhostname"{
nagios::iconf{'name1':
  host_name       => 'localhost'
  remote_host_name => 'blahblah1',
  ip      => '32.232.434.323',
  port    => '111',
  short_alias     => 'random',
  service_name    => 'servicename1'
}

nagios::iconf{'name2':
  host_name       => 'localhost'
  remote_host_name => 'blahblah1',
  ip      => '32.232.434.323',
  port    => '111',
  short_alias     => 'random',
  service_name    => 'servicename2'
}
include nagios
}

我收到重复声明错误。我哪里出错了?

2 个答案:

答案 0 :(得分:1)

问题在于

concat{"/usr/local/nagios/etc/import/localhost.cfg"
  owner => nagios,
  group => nagios,
  mode  => 755
}
由于host_name

定义了两次。当您在清单中调用define类型时,会导致重复警告。

您必须在define类型之外定义一次。可以在班级或manifests本身。类似的东西:

concat{"/usr/local/nagios/etc/import/localhost.cfg"
.....
.....

然后,其余代码,即concat::fragments可以进入define类型。

define nagios::iconf( $host_name='', $ip='',     $short_alias='',$service_name='',$remote_host_name='',$port=''){
$reconfigure = "/usr/local/nagios/etc/import/${host_name}.cfg"
   concat::fragment{"hosttemplate":
      target => $reconfigure,
      source => template('nagios/host.erb'),
      order  => 01,
   }

   concat::fragment{"servicetemplate":
      target => $reconfigure,
      ensure  => template("nagios/${service_name}.erb"),
      order   => 15
   }
}

答案 1 :(得分:0)

我必须承认,我不确定您的确在做什么,以及您的concat::fragment定义是否也可以,但重复声明错误是两次声明nagios::iconf的结果没有这些定义的唯一名称。您使用空字符串''两次。

修改
如果concat::fragmentdefine,那么concat::fragment{"hosttemplate":concat::fragment{"servicetemplate":可能是您遇到问题的原因。

当两次声明nagios::iconf时,木偶会尝试两次声明这些片段。 他们的名字不是唯一的。试试concat::fragment{"hosttemplate $name":concat::fragment{"servicetemplate $name":

concat{$reconfigure:也是define?试试concat{"$reconfigure $name":