On Sat, Aug 11, 2012 at 7:48 PM, Stefan Schulte <[email protected]> wrote: > On Sat, Aug 11, 2012 at 01:46:57PM -0700, James A. Peltier wrote: >> ----- Original Message ----- >> | On Fri, Aug 10, 2012 at 05:10:20PM -0700, Douglas Garstang wrote: >> | > How can I pass an array to a define? It's not documented in the >> | > puppet >> | > language guide. >> | > >> | > I've got: >> | > >> | > define lvm::create_vg ( $pvdisks ) { >> | > exec { >> | > 'pvcreate': >> | > command => "/sbin/pvcreate -yf $pvdisks", >> | > unless => "/sbin/pvdisplay $pvdisks", >> | > ... >> | > } >> | > } >> | > >> | > class someclass { >> | > lvm::create_vg { >> | > 'bcvg01': >> | > pvdisks => ['/dev/xvdb1', '/dev/xvdc1']; >> | > } >> | > } >> | > >> | > Inside the define, $pvdisks gets expanded to '/dev/xvdb1/dev/xvdc1' >> | > >> | > Doug. >> | >> | Inside your define $pvdisks is whatever you passed as the pvdisks >> | parameter, so in your case $pvdisks *is* an array. But in the unless >> | parameter you use the array in a string context so all your items are >> | concatenated. Unfortunately puppet does not have a join function to >> | convert an array to a string. >> | >> | On the other hand it may not be desired to destroy every disk you >> | pass >> | as in the pvdisks array if only one of the disks is not a LVM disk >> | (as >> | pvdisplay returns with a non-zero exitcode as soon as one disk is not >> | recognized to be a LVM disk) >> | >> | So the best approach is probably to get the LVM puppet plugin and >> | replace your exec with >> | >> | physical_volume { $pvdisks: >> | ensure => present, >> | } >> | >> | The physical_volume is a new type that comes with the LVM plugin. >> | >> | [1] http://forge.puppetlabs.com/puppetlabs/lvm >> | >> | -Stefan >> >> Great! But what happens if you want to specify multiple physical volumes be >> a member of a single data volume during creation. Is the expectation that >> you'd always specify a lvm:vg with the initial disk and then lvm:vg extend >> that volume? > > Do you mean something like sda1 and sda2 beeing two physical volumes in > the volume group vg? This should work: > > > physical_volume { [ '/dev/sda1', '/dev/sda2']: > ensure => present. > } > > volume_group { 'vg': > ensure => present, > physical_volumes => [ '/dev/sda1', '/dev/sda2' ], > require => [ > Physical_volume['/dev/sda1'], > Physical_volume['/dev/sda2'], > ], > } > > -Stefan
Yeah, well I tried the puppet labs lvm module. After I fixed the syntax errors, which included a missing '}' in the code (wtf!??!), it seems that custom types don't work with environments... http://projects.puppetlabs.com/issues/4409 Doug. -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.
