wow, thanks for this very exhaustive answer!

is there a way to get the list of resources created when using a puppet 
apply (instead of puppet agent)?

the point is that we need this when refactoring puppet modules, in order to 
test the modules in a vagrant machine and check that there are not 
regression issues.
so, i run our current puppet modules in a vagrant machine, get the list of 
all puppet resources created,
then i refactor the puppet modules, i run again the refactored puppet 
modules in a new vagrant machine,
and i compare all the files and other resources.


On Friday, December 13, 2013 7:32:39 PM UTC+1, Charlie Sharpsteen wrote:
>
> On Friday, December 13, 2013 5:30:19 AM UTC-8, David Portabella wrote:
>
> Given this puppet manifest (test.pp):
>> $dir = '/tmp'
>> file {'myfile':
>>   path => "$dir/myfile.txt",
>>   content => 'hello'
>> }
>>
>> puppet produces this report:
>> [...]
>>     File[myfile]: !ruby/object:Puppet::Resource::Status
>>       resource: File[myfile]
>>       file: /Users/david/test.pp
>>       line: 4
>>       evaluation_time: 0.001354
>>       change_count: 1
>>       out_of_sync_count: 1
>>       tags: 
>>         - file
>>         - myfile
>>         - class
>>       time: 2013-12-13 11:44:59.092716 +01:00
>>       events: 
>>         - !ruby/object:Puppet::Transaction::Event
>>           audited: false
>>           property: ensure
>>           previous_value: !ruby/sym absent
>>           desired_value: !ruby/sym file
>>           historical_value: 
>>           message: "defined content as 
>> '{md5}5d41402abc4b2a76b9719d911017c592'"
>>           name: !ruby/sym file_created
>>           status: success
>>           time: 2013-12-13 11:44:59.093067 +01:00
>>       out_of_sync: true
>>       changed: true
>>       resource_type: File
>>       title: myfile
>>       skipped: false
>>       failed: false
>>       containment_path: 
>>         - Stage[main]
>>         - ""
>>         - File[myfile]
>> [...]
>>
>> so, the report tells that it has created File[myfile],
>> but it does not contain the path of the file /tmp/myfile.txt.
>>
>> that's a pity, because it means that I cannot get a list of all the files 
>> updated by puppet.
>>
>> is there a way to get the final path of all File resources created by 
>> puppet?
>> (not "$dir/myfile.txt", but "/tmp/myfile.txt")
>>
>  The report is focused on describing the changes that occurred during that 
> run. To that end, only the title is included as that information is 
> sufficient to uniquely identify the reporting resource when combined with 
> resource_type. Information concerning properties that were not changed 
> during the run is omitted as this data can be obtained from the catalog 
> that the agent was processing.
>
> In this specific situation, you can modify your file resource such that 
> the path is used as the title:
>
> $dir = '/tmp'
> file { "$dir/myfile.txt":
>   content => 'hello'
> }
>
> However, the general problem of matching changes to resources can be 
> solved by loading the report and then loading the catalog and joining the 
> two datasets using the resource_type and title. However, this particular 
> task is one of the problems PuppetDB was designed to solve. PuppetDB stores 
> both the catalogs and reports and provides an API that can be used to query 
> the data.
>
> For example, the changes related to myfile can be retrieved by querying 
> the events 
> endpoint<https://docs.puppetlabs.com/puppetdb/1.5/api/query/v3/events.html>of 
> the PuppetDB API:
>
> curl -G 'http://localhost:8080/v3/events' --data-urlencode query=\'["and", 
> ["=", "resource-type", "File"],
>   ["=", "containing-class", "Testfile"],
>   ["=", "certname", "pe-310-agent.puppetdebug.vlan"]]'
>
> Which gives results similar to the following:
>
> [ {
>
>   "status" : "success",
>   "timestamp" : "2013-12-13T17:11:39.144Z",
>   "certname" : "pe-310-agent.puppetdebug.vlan",
>   "containing-class" : "Testfile",
>   "containment-path" : [ "Stage[main]", "Testfile", "File[myfile]" ],
>   "report" : "6bed5163b50b5857921b5ec27d9147b428c684f8",
>   "run-start-time" : "2013-12-13T17:11:29.382Z",
>   "resource-title" : "myfile",
>   "configuration-version" : "1386954691",
>   "run-end-time" : "2013-12-13T17:11:36.527Z",
>   "property" : "ensure",
>   "message" : "defined content as '{md5}5d41402abc4b2a76b9719d911017c592'",
>   "new-value" : "file",
>   "old-value" : "absent",
>   "line" : 44,
>   "file" : "/etc/puppetlabs/puppet/modules/testfile/manifests/init.pp",
>   "report-receive-time" : "2013-12-13T17:11:41.334Z",
>   "resource-type" : "File"} ]
>
> The resource contained in the catalog delivered to that node, which 
> contains properties such as the path, can be retrieved by passing the 
> resource Type and title to the resources 
> endpoint<https://docs.puppetlabs.com/puppetdb/1.5/api/query/v3/resources.html>
> :
>
> curl -G 'http://localhost:8080/v3/resources/File/myfile' --data-urlencode 
> 'query=["=", "certname", "pe-310-agent.puppetdebug.vlan"]'
>
> This returns all the parameters of interest:
>
> [ {
>   "parameters" : {
>     "path" : "/tmp/myfile.txt",
>     "mode" : "0755",
>     "content" : "hello",
>     "backup" : "main",
>     "alias" : [ "/tmp/myfile.txt" ]
>   },
>   "line" : 45,
>   "file" : "/etc/puppetlabs/puppet/modules/testfile/manifests/init.pp",
>   "exported" : false,
>   "tags" : [ "default", "node", "myfile", "testfile", "class", "file" ],
>   "title" : "myfile",
>   "type" : "File",
>   "resource" : "93f90701c8f54a485246a9e3725040f1992fd90b",
>   "certname" : "pe-310-agent.puppetdebug.vlan"} ]
>
> The power of PuppetDB in this situation is that your reporting script can 
> now focus on analyzing the data instead of finding and then filtering it.
>
> Hope this helps!
> -- 
> Charlie Sharpsteen
> Open Source Support Engineer
> Puppet Labs
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/d2a0ca3e-cb85-439c-a908-7efdd80f9b43%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to