Hi Edd,

puppet insists in unique resources.
Therefore you can not define the file resource for tar archive twice.

Another option would be to fetch the file via exec (wget/curl/scp),
create a flagfile afterwards and remove the archive after extraction.

Additionally you can set the unless parameter on the exec copy resource
to run only if the destination diretory does not exist.

Example:

class apache-maven-v3 {

   # fetch from storage
   exec { 'copy_maven_v3':
        command => "curl http://...../apache-maven-v3-bin.tar.gz -o
/usr/local.... && touch /usr/local/java/copy_finished",
        creates => '/usr/local/java/copy_finished',
        # run only if extracted path does not exist
        unless => "test -d /usr/local/java/apache-maven-v3",
   }

   #extract
   exec { 'install_maven_v3:
      ...
   }

   # remove archive
   file { 'delete_copied_archive':
      path => '/usr/local/java/...',
      ensure => absent,
   }

}


kind regards,

Martin



On 05/03/2011 08:37 PM, Edd Grant wrote:
> Hi Martin,
> 
> Have tried this out and have noticed that the copied .gz file is left
> in /usr/share/java after unpacking. I tried adding another file
> resource to delete it but because this points to the same filepath as
> the initial resource puppet disallows it:
> 
> Example below:
> 
> class apache-maven-v3 {
> 
>   require java-app-base
> 
>   # copy file from puppet master to local system
>   file { 'copy_maven_v3':
>     path => "/usr/local/java/apache-maven-3.0.3-bin.tar.gz",
>     source => "puppet:///modules/apache-maven-v3/apache-maven-3.0.3-
> bin.tar.gz",
>   }
> 
>   # extract local file
>   exec { 'install_maven_v3':
>     command => "/bin/tar zxf /usr/local/java/apache-maven-3.0.3-
> bin.tar.gz",
>     cwd => "/usr/local/java",
>     creates => "/usr/local/java/apache-maven-3.0.3",
>   }
> 
>   #delete copied archive
>   # Puppet disallows this...
>   file { 'delete_copied_archive':
>     path => "/usr/local/java/apache-maven-3.0.3-bin.tar.gz",
>     ensure => "absent",
>   }
> 
>   # make sure the order is set properly
>   File['copy_maven_v3'] -> Exec['install_maven_v3'] ->
> File['delete_copied_archive']
> }
> 
> gives the following error:
> 
> Could not run Puppet configuration client: Cannot alias
> File[copy_maven_v3] to ["/usr/local/java/apache-maven-3.0.3-
> bin.tar.gz"]; resource ["File", ["/usr/local/java/apache-maven-3.0.3-
> bin.tar.gz"]
> ] already exists
> 
> Is there an elegant puppetesque way of dealing with this? I'm trying
> to avoid resorting to exec commands if possible!
> 
> Cheers,
> 
> Edd
> 
> 
> 
> On May 3, 10:45 am, Martin Alfke <tux...@gmail.com> wrote:
>> Hi Edd,
>>
>> here is an example:
>>
>> class apache-maven-v3 {
>>         # prepare local filesystem
>>         file { 'java_path':
>>                 path => "/usr/local/java",
>>                 ensure => directory,
>>         }
>>         # copy file from puppet master to local system
>>         file { 'copy_maven_v3':
>>                 path => "/usr/local/java/apache-maven-3.0.3-bin.tar.gz",
>>                 source =>
>> "puppet:///modules/apache-maven-v3/apache-maven-3.0.3-bin.tar.gz",
>>         }
>>         # extract local file
>>         exec { 'install_maven_v3':
>>                 command => "/bin/tar zxf 
>> /usr/local/java/apache-maven-3.0.3-bin.tar.gz",
>>                 cwd => "/usr/local/java",
>>                 creates => "/usr/local/java/apache-maven-3.0.3",
>>         }
>>         # make sure the order is set properly
>>         File['java_path'] -> File['copy_maven_v3'] -> 
>> Exec['install_maven_v3']
>>
>> }
>>
>> kind regards,
>>
>> Martin
>>
>> On 05/03/2011 11:06 AM, Edd Grant wrote:
>>
>>> Hi Nan,
>>
>>> Thanks for the answer - I'm not 100% clear how I could acheive this,
>>> could you expand on your suggestion a little, perhaps with an example?
>>> Would the file resource point at the .gz file in the module? If so how
>>> would I then reference the file resource in the tar command?
>>
>>> Many thanks,
>>
>>> Edd
>>
>>> On May 2, 4:15 pm, Nan Liu <n...@puppetlabs.com> wrote:
>>>> Use a file resource to deploy it to the agent and make the exec depend
>>>> on the file resource.
>>
>>>> On May 2, 2011, at 7:58, Edd Grant <e...@eddgrant.com> wrote:
>>
>>>>> Hi All,
>>
>>>>> I have defined the following module to untar/unzip and copy the Maven
>>>>> distributable to a convenient location:
>>
>>>>> class apache-maven-v3 {
>>>>>  exec { "/bin/tar xzf /etc/puppet/modules/apache-maven-v3/files/
>>>>> apache-maven-3.0.3-bin.tar.gz":
>>>>>    cwd => "/usr/local/java",
>>>>>    creates => "/usr/local/java/apache-maven-3.0.3",
>>>>>  }
>>>>>  ...
>>>>> }
>>
>>>>> The above definition executes perfectly however in order to keep the
>>>>> module portable I want to replace the absolute path to the .gz file
>>>>> with a puppet:/// URI e.g.
>>
>>>>> exec { "/bin/tar xzf 
>>>>> puppet:///modules/apache-maven-v3/apache-maven-3.0.3-bin.tar.gz":
>>
>>>>> When I change the class to use the puppet:/// URI I get the following
>>>>> error:
>>
>>>>> (/Stage[main]/Apache-maven-v3/Exec[/bin
>>>>> /tar xzf 
>>>>> puppet:///modules/apache-maven-v3/apache-maven-3.0.3-bin.tar.gz]/return
>>>>> s) change from notrun to 0 failed: /bin/tar xzf 
>>>>> puppet:///modules/apache-maven-v
>>>>> 3/apache-maven-3.0.3-bin.tar.gz returned 2 instead of one of [0] at /
>>>>> etc/puppet/
>>>>> modules/apache-maven-v3/manifests/init.pp:11
>>
>>>>> It appears to me that the puppet:/// URI is not being resolved in the
>>>>> exec and this is causing the tar command to operate on the literal
>>>>> path puppet:///modules/apache-maven-v3/apache-maven-3.0.3-bin.tar.gz
>>>>> which of course doesn't exist.
>>
>>>>> Looking at the docs I can't see any examples of puppet:/// being used
>>>>> in this way, is there anyway I can obtain the resolved absolute path
>>>>> to pass this in to my exec? Failing that it there a standard approach
>>>>> for combining a puppet:/// URI with an exec?
>>
>>>>> Cheers,
>>
>>>>> Edd
>>
>>>>> --
>>>>> 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 
>>>>> athttp://groups.google.com/group/puppet-users?hl=en.
> 

-- 
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.

Reply via email to