0

We have a server (managed by puppet) that generates a file once per day. Is there an approach I could use to make puppet do the following:

  • Recognize that the file is there on server A
  • Upload it to the puppet master
  • Ensure its existence on puppet-managed server B
  • Reload a service on server B

It's really the recognizing and uploading that I'm not clear on. I think I understand how to ensure the existence on server B and reload the service.

Any patterns or documentation would be helpful. Thanks.

1
  • does it need to be on the master? Commented Mar 18, 2013 at 16:42

2 Answers 2

1

I'd have a look into exported resources.

You could define an additional resource using a custom fact as source for the file contents:

node servera { @@file { "/generated/file" ensure => present, content => $::myspecialfilecontent tag => myspecialfile, } } 

and realise the resource on serverb:

node serverb { File <<| tag == 'myspecialfile' |>> { notify => Service["your_service"], } } 

the custom puppet fact could look like follows (put it in a modules/.../lib/facter/myspecialfilecontent.rb file and enable pluginsync):

filename = '/generated/file' Facter.add(:myspecialfilecontent) do setcode do if File.file?(filename) File.read(filename) end end end 

you need storeconfigs = true (puppetdb) for that though.

This is not a very clean solution but it could work.

0

Let's assume that you have a common class or node (like the default) that applies to all the nodes managed by puppet.

Here you create the policy to manage the file created daily, but only a virtual resource.

node default { $fsufix = strftime("%y_%m_%d") @file { "everyday_file" : path => "/scratch/usern/file_${fsufix}", ensure => present, } } 

Then for the serverA, you just need to check whether that file is present by realizing the virtual resource we just created earlier :

node 'serverA' inherits default { realize(File["everyday_file"]) } 

After this you want serverB to do the same as serverA plus refresh a service if the file is created or modified :

node 'serverB' inherits default { realize(File["everyday_file"]) service { "mysqld" : ensure => running, hasrestart => true, subscribe => File ["everyday_file"], } } 
3
  • are you sure this will catch the content of the file? IMHO when you specify a file without source/content puppet just ensures the file is there but does not care about its content... Commented Mar 19, 2013 at 9:11
  • question of OP has nothing about the content of the file. In any case, since this file is being produced everyday, I believe the content might be different and may need some kind of template, but that's another question... Commented Mar 19, 2013 at 12:59
  • as far as I understood it the file itself is generated by an application and not from within puppet... But of course I could be wrong... Commented Mar 19, 2013 at 13:33

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.