Issue #1472 has been updated by jamtur01.

Status changed from Ready for Checkin to Closed

Pushed in commit:"98e79f8b7dbbdcb29c91b6099569e180bd8267c7" in branch 0.24.x
----------------------------------------
Bug #1472: Defined exported resource are not collected properly.
http://projects.reductivelabs.com/issues/show/1472

Author: masterzen
Status: Closed
Priority: High
Assigned to: jamtur01
Category: transactions
Target version: 0.24.6
Complexity: Unknown
Patch: None
Affected version: 0.24.4
Keywords: exported collect resource define


Hi,
On puppet > 0.24.4 (including 0.24.5), I can't seem to collect "defined" 
resource. Native resource are collected fine.

This doesn't work:
<pre>
# Non-working site.pp

define deftest ()
{
   warning("DEFTEST ${fqdn} on ${name}")
   file { "${name}":
     content => "test"
   }
}

node "xen1.internal" {
  $part = "xen1"

  @@deftest {
     "/tmp/${part}":
       tag => "test"
  }
  Deftest <<| tag=='test' |>>
}

node "xen2.internal" {
  $part = "xen2"

  @@deftest {
    "/tmp/${part}":
       tag => "test"
  }
  Deftest <<| tag=='test' |>>
}
</pre>

Proof:
running manually on xen1.internal gives:
<pre>
info: Loading fact netmask
info: Loading fact ldap_auth_bind_user
info: Loading fact configured_ntp_servers
info: Retrieving plugins
info: Loading fact netmask
info: Loading fact ldap_auth_bind_user
info: Loading fact configured_ntp_servers
info: Caching catalog at /var/lib/puppet/state/localconfig.yaml
notice: Starting catalog run
notice: Finished catalog run in 0.11 seconds
</pre>

localconfig.yaml doesn't contain anything about /tmp/xen1.

Puppetmaster says:
<pre>
info: Expiring the node cache of xen1.internal
info: Not using expired node for xen1.internal from cache; expired at Thu Jul 
31 13:26:12 +0200 2008
info: Caching node for xen1.internal
debug: Creating default schedules
debug: 
/Settings[/etc/puppet/puppet.conf]/Settings[puppetmasterd]/File[/etc/puppet/manifests/site.pp]:
 Autorequiring File[/etc/puppet/manifests]
debug: Finishing transaction 23539572950260 with 0 changes
debug: Scope(Node[xen1.internal]): Collected 1 Deftest resource in 0.01 seconds
warning: Scope(Deftest[/tmp/xen1]): DEFTEST xen1.internal on /tmp/xen1
debug: Scope(Node[xen1.internal]): Collected 0 Deftest resources in 0.00 seconds
info: Stored catalog for xen1.internal in 0.35 seconds
notice: Compiled catalog for xen1.internal in 0.50 seconds
</pre>
Which proved the puppetmaster has seen the collected resource.
As the storeconfig database shows too:
<pre>
mysql> select * from resources where host_id=79 and exported is not null;
+-------+-----------+---------+---------+----------------+----------+------+---------------------+
| id    | title     | restype | host_id | source_file_id | exported | line | 
updated_at          |
+-------+-----------+---------+---------+----------------+----------+------+---------------------+
| 51638 | /tmp/xen1 | File    |      79 |              1 |        1 |   12 | 
2008-07-31 13:27:12 |
| 51639 | /tmp/xen1 | Deftest |      79 |              1 |        1 |   23 | 
2008-07-31 13:27:12 |
+-------+-----------+---------+---------+----------------+----------+------+---------------------+
2 rows in set (0.01 sec)
</pre>

Let's play with xen2.internal now:
<pre>
info: Loading fact configured_ntp_servers
info: Loading fact ldap_auth_bind_user
info: Loading fact netmask
info: Retrieving plugins
info: Loading fact configured_ntp_servers
info: Loading fact ldap_auth_bind_user
info: Loading fact netmask
info: Caching catalog at /var/lib/puppet/state/localconfig.yaml
notice: Starting catalog run
warning: //Node[xen2.internal]/Deftest[/tmp/xen1]/File[/tmp/xen1]/checksum: 
File /tmp/xen1 does not exist -- cannot checksum
notice: //Node[xen2.internal]/Deftest[/tmp/xen1]/File[/tmp/xen1]/checksum: 
defined 'checksum' as '{md5}d9b5059238064ee18522f48e51730c21'
notice: //Node[xen2.internal]/Deftest[/tmp/xen1]/File[/tmp/xen1]/content: 
created file with contents {md5}b23295cbdd57c2f30132fb656a6ddb17
notice: Finished catalog run in 0.41 seconds
</pre>

The file /tmp/xen1 has been created (ie it exported the resource), but not the 
/tmp/xen2 file.

And the puppetmaster says:
<pre>
info: Expiring the node cache of xen2.internal
info: Not using expired node for xen2.internal from cache; expired at Thu Jul 
31 13:29:53 +0200 2008
info: Caching node for xen2.internal
debug: Scope(Node[xen2.internal]): Collected 2 Deftest resources in 0.01 seconds
warning: Scope(Deftest[/tmp/xen1]): DEFTEST xen2.internal on /tmp/xen1
warning: Scope(Deftest[/tmp/xen2]): DEFTEST xen2.internal on /tmp/xen2
debug: Scope(Node[xen2.internal]): Collected 0 Deftest resources in 0.00 seconds
info: Stored catalog for xen2.internal in 0.36 seconds
notice: Compiled catalog for xen2.internal in 0.40 seconds
</pre>
Definitely, the puppetmaster knows both exported resources.

The database now contains:
<pre>
+-------+-----------+---------+---------+----------------+----------+------+---------------------+
| id    | title     | restype | host_id | source_file_id | exported | line | 
updated_at          |
+-------+-----------+---------+---------+----------------+----------+------+---------------------+
| 51638 | /tmp/xen1 | File    |      79 |              1 |        1 |   12 | 
2008-07-31 13:27:12 |
| 51639 | /tmp/xen1 | Deftest |      79 |              1 |        1 |   23 | 
2008-07-31 13:27:12 |
| 51642 | /tmp/xen2 | File    |      80 |              1 |        1 |   12 | 
2008-07-31 13:30:53 |
| 51643 | /tmp/xen2 | Deftest |      80 |              1 |        1 |   33 | 
2008-07-31 13:30:53 |
+-------+-----------+---------+---------+----------------+----------+------+---------------------+
</pre>

Back to xen1, now puppet can see the /tmp/xen2 file:
<pre>
info: Loading fact netmask
info: Loading fact ldap_auth_bind_user
info: Loading fact configured_ntp_servers
info: Retrieving plugins
info: Loading fact netmask
info: Loading fact ldap_auth_bind_user
info: Loading fact configured_ntp_servers
info: Caching catalog at /var/lib/puppet/state/localconfig.yaml
notice: Starting catalog run
warning: //Node[xen1.internal]/Deftest[/tmp/xen2]/File[/tmp/xen2]/checksum: 
File /tmp/xen2 does not exist -- cannot checksum
notice: //Node[xen1.internal]/Deftest[/tmp/xen2]/File[/tmp/xen2]/checksum: 
defined 'checksum' as '{md5}2eba568f285d93e679f9d362dcf049b7'
notice: //Node[xen1.internal]/Deftest[/tmp/xen2]/File[/tmp/xen2]/content: 
created file with contents {md5}572ac7bb156d4895b43e08ccc8ef8076
notice: Finished catalog run in 0.08 seconds
</pre>

Conclusion: it seems that each node cannot collect its own "defined" resources, 
but can still see the effects of the other nodes defined exported resources.


Note1: if I use only file{} instead of defines in the manifest, it works fine.

Note2: it used to work fine at least in 0.23.x, but the collection should have 
been written with the underlying type of the define (ie file{} instead of 
Deftest). I'm not sure at which version it started to not work, I noticed it 
first on 0.24.4.

Note3: I noticed the issue on a more complex sample, which had another outcome 
(basically an already defined resource error). I tried to simplify the failing 
testcase but lost the hability to generate this error message, and discovered 
this issue. I think solving this bug will solve my original issue. 
Please see:
http://groups.google.com/group/puppet-users/browse_thread/thread/d04dccd244340581


----------------------------------------
You have received this notification because you have either subscribed to it, 
or are involved in it.
To change your notification preferences, please click here: 
http://reductivelabs.com/redmine/my/account

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Puppet Bugs" group.
To post to this group, send email to puppet-bugs@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/puppet-bugs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to