[Puppet Users] Re: Setting requirements using collection -vs- before/require meta-parameters

2011-06-29 Thread Jon Jaroker

 So it looks like we have a bug that I'm still trying to find in the
 database, and I think it might be affecting you.

 If you have a class that only declares other classes in it, and doesn't have
 any resources in it, then it gets removed from the dependency graph.



Hello Nigel,

To test whether this bug is the cause, I added a file resource to the
node class.   The updated node class is below.  Almost all of the
other classes contain a similar file resource that is used to generate
a dokuwiki-formatted page showing parameters and values.

I rebuilt 'node02' six times while developing the classes.  The node
class below remained unchanged.

The Class-DefinedType dependency below was not honored on two
rebuilds: Puppet attempted to install Package['java'] before the nfs
share containing the binary was mounted.

I noticed a second dependency failure within Class['role_frontend'].
It is a similar Class-DefinedType dependency, although reversed:

class role_frontend (...) {
...
 Class['tomcat'] - Tomcat::Instance | |
...
}

I observed one deployment where Tomcat::Instance was applied before
Class['tomcat'].  Both the Tomcat::Instance defined type and
Class['tomcat'] have at least one managed resource,  the file resource
I use to create dokuwiki file fragments.

These dependency failures appear when I work on unrelated classes.
For example, the tomcat dependency above started failing
intermittently after I added Class['tomcat::logging'] as a managed
resource within Class['tomcat'].

These dependency failures are intermittent.  They appear to occur
between Classes and Defined Types.  They appear to occur for both the
collector- and 'before/require' -approach to specifying dependencies.
They occur even when the classes contain at least one managed
resource.

My only workaround is to run puppet twice.  (The original workaround
of using collector and 'before' to specify dependencies also
intermittently fails.)

Please let me know if you want me to create a bug for this, or whether
you have debugging or workaround recommendations.

Regards,
Jon

---
node 'node02' inherits local {

S_nfs::Client | | - Class['role_frontend']

class{ 'role_frontend':
add_sampledata  = 'true',
}

s_nfs::client { '/opt/share':
action   = 'mount',
share_server = '10.10.10.14',
share_source = '/c/UserSource/Linux',
#before   = Class['s_java', 'tomcat'],
}

# Documentation File
file{Node Documentation:
path= '/tmp/node_doc',
ensure  = present,
content = 'Node Documentation Here',
}

}


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



[Puppet Users] Re: Setting requirements using collection -vs- before/require meta-parameters

2011-06-27 Thread Jon Jaroker
Hello Nigel,

Thank you for clarifying the syntax.  I suspect that Puppet does not
apply this dependency consistently.  The failure is intermittent.  I
am using a clumsy workaround to avoid the dependency failure.

My manifest is written so that 'infrastructure' is separate from
'roles'.   On my local workstation, I create a 'local' node using VM
Workstation.  When this 'local' node connects, puppet should first
connect the NFS share, which contains the Sun Java binary.  I then
assign a frontend role to this node.  This frontend role has a
Java class that expects the binary to exist in the /share directory.

Here is the actual node-role assignment I am using on one of the
testing VMs where the dependency fails:

-
node 'node02' inherits local {

S_nfs::Client | | - Class['role_frontend']

class{ 'role_frontend':
add_sampledata  = 'true',
}

s_nfs::client { '/opt/share':
action   = 'mount',
share_server = '10.10.10.14',
share_source = '/c/UserSource/Linux',
before   = Class['s_java', 'tomcat'],
}
}

-

In the above, I am using BOTH forms of the dependency assignment.  I
think this is wrong, but it has made the NFS-Class dependency work
consistently for the past few days.

When only one form of the dependency is used (either the 'collection'
or 'before'), then Class['java'] sometimes fails  because the NFS
share is mounted AFTER the class is applied.

I believe that the issue is with Puppet because I make changes ONLY to
Class['s_java'] or Class['tomcat'].  The node-role assignment above
does not changed.

As I develop the classes, I restore VM Workstation 'node02' to the
original 'clean' snapshot.  This snapshot does not have the NFS share
mounted, so Puppet must first mount the NFS share.  When only one form
of the dependency assignment is used, the Class['s_java'] is
incorrectly applied before the NFS mount about 30% of the time.

After adding both forms of the dependency (the 'collection' as well as
'before'), I have not had a failure for the past few days.

I believe my syntax is right and that the issue is specific to the
dependency.  I wonder if a timeout is occurring before the NFS share
is mounted, but this timeout failure is not being reported.  I am not
sure how to isolate the issue further, but the workaround has been OK.

Regards,
Jon

On Jun 25, 10:12 am, Nigel Kersten ni...@puppetlabs.com wrote:
 On Fri, Jun 24, 2011 at 5:44 PM, Jon Jaroker goo...@jaroker.com wrote:
  Hello,

  Could someone explain why a relationship implemented with a collection
  is honored by Puppet, but a 'before' or 'require' meta-parameter fails
  for the example below.

  --- THIS WORKS --
  Nfs::Client | |  - Class['myclass']
  class { 'myclass': }
  nfs::client { '/share':}
  

  -- DEPENDENCY IS NOT HONORED BY PUPPET HERE -
  class{'myclass': require = Nfs::Client['/share'] }
  nfs::client{'/share':}
  

  The nfs share must be mounted before packages can be installed in
  Class['myclass'].  Defining this relationship using 'before' or
  'require' meta-parameters did not succeed:  In the bottom example,
  Puppet would attempt to install packages contained in the class even
  though the nfs share was not mounted.

  I realize that the top example is applying the relationship to all
  'nfs::client' defined types (which is fine).   But why should this
  method work while the explicit 'before' or 'require' approach fail?

 At first glance I think that should work. What version of Puppet are
 you running?

 --
 Nigel Kersten
 Product, Puppet Labs
 @nigelkersten

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



Re: [Puppet Users] Re: Setting requirements using collection -vs- before/require meta-parameters

2011-06-27 Thread Nigel Kersten
On Mon, Jun 27, 2011 at 9:36 AM, Jon Jaroker goo...@jaroker.com wrote:


 After adding both forms of the dependency (the 'collection' as well as
 'before'), I have not had a failure for the past few days.

 I believe my syntax is right and that the issue is specific to the
 dependency.  I wonder if a timeout is occurring before the NFS share
 is mounted, but this timeout failure is not being reported.  I am not
 sure how to isolate the issue further, but the workaround has been OK.


So it looks like we have a bug that I'm still trying to find in the
database, and I think it might be affecting you.

If you have a class that only declares other classes in it, and doesn't have
any resources in it, then it gets removed from the dependency graph.

It's clearly a bug, and we're going to fix it.

Is this possibly your problem? Does the description fit?

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