On Jul 6, 2012, at 12:53 AM, Mike Reed <mjohn.r...@gmail.com> wrote: > Hello all, > > I'm looking to run multiple commands via exec within a single class like so: > > class boost_install { > # This will place the gzip locally in /tmp. File is pulled from > puppet. > file { "/tmp/boost_1_41_0.tar.bz2" : > source => "puppet:///boost_install/boost_1_41_0.tar.bz2" , > ensure => present , > } > > # This will extract the boost gzip to the /tmp directory. > # This will untar only if the /tmp/boost_1_41_0 directory does not > exist. > exec { "tar -xjvf /tmp/boost_1_41_0.tar.bz2" : > cwd => "/tmp/" , > creates => "/tmp/boost_1_41_0" , > path => ["/bin" , "/usr/sbin"] , > } > > # This will run the boost bootstrapper. bjam should be run after this. > # This will only run if the ls command returns a 1. > # The unless will have to be redone because we have no way of > upgrading easily and this is sloppy. > exec { "/tmp/boost_1_41_0/bootstrap.sh" : > unless => 'ls /usr/local/include/boost' , > path => ["/bin/" , "/sbin/" , "/usr/bin/" , "/usr/sbin/"] , > } > > # This will run the boost bjam modifier and should run only after the > bootstrap.sh has been run > # This will only run if the ls command returns a 1. > # This unless will have to be redone because we have no way of > upgrading easily and this is sloppy. > exec { "/tmp/boost_1_41_0/bjam cxxflags=-fPIC install" : > unless => 'ls /usr/local/include/boost' , > path => ["/bin/" , "/sbin/" , "/usr/bin/" , "/usr/sbin/"] > , > } > } > > However, after running the above class, I get the following: > > err: /Stage[main]/Boost_install/Exec[/tmp/boost_1_41_0/bootstrap.sh]/returns: > change from notrun to 0 failed: /tmp/boost_1_41_0/bootstrap.sh returned 1 > instead of one of [0] at > /etc/puppet/modules/boost_install/manifests/init.pp:18 > err: /Stage[main]/Boost_install/Exec[/tmp/boost_1_41_0/bjam cxxflags=-fPIC > install]/returns: change from notrun to 0 failed: /tmp/boost_1_41_0/bjam > cxxflags=-fPIC install returned 1 instead of one of [0] at > /etc/puppet/modules/boost_install/manifests/init.pp:21 > notice: Finished catalog run in 1.31 seconds > > I was under the impression that I should be getting the "install returned 1" > output but it's usually silent and the command doesn't run. I'm assuming > that neither the bootstrap or bjam commands should run as the > /usr/local/include/boost directories exist on the machine and I'm expecting > the "ls" to return a 0; which it does on the machine because those > directories exist. > > I'm obviously missing something here and I'm looking for some direction. > > I do suspect that this can be done in a more elegant fashion especially since > the bjam command is dependent upon the bootstrap.sh script running but I was > hoping to at least get this working. > > Thanks in advance for the thoughts.
Puppet manifests do not run in a top-down manner, but instead run semi-randomly. Because your file and exec resources need to run in a specific order, you need to define that order specifically. You can accomplish this by keeping the order you have and simply adding a 'require' parameter to each that points to the previous resource. Even better would be to convert the entire thing into a single package/rpm that you keep in a repository and have puppet install it with a single 'package' resource. -- Peter Bukowinski -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.