On Friday, December 12, 2014 6:00:08 AM UTC-6, Jeff wrote:
>
> For reasons I wont go into, it looks like I need to start using stages.
>


Do be certain to be clear, for you own sake: you have decided that run 
stages are the best solution to your problem.  No one *needs* run stages, 
but they are convenient for certain tasks.  Anything you can do with 
stages, you can also do without, albeit more verbosely.  Be sure you are 
aware of stages' limitations and drawbacks 
<https://docs.puppetlabs.com/puppet/latest/reference/lang_run_stages.html#limitations-and-known-issues>
.

 

> I have a few classes which i need to apply before doing anything in the 
> 'main' stage.
>
> My problem is that I'm assigning classes using an enc (foreman) so 
> assigning the stage to an assigned class is not as straightforward as it 
> would normally be in a pure-puppet environent. What I've done is declare 
> the $stage variable as part of the class definition, for example:
>
> class myclass (
> $myparam = 'myalue',
> $stage = 'setup'
> ){
> include stdlib
> ....
> }
>
>

I would normally say that you should not do that.  Every class has a 
'stage' metaparameter without you declaring it, and though it may work for 
you to also declare it yourself, that's not the sort of thing I would be 
comfortable relying upon to *continue* working.  With that said ...

 

> This works... around 50% of the time, quite frequently I get compilation 
> errors like..
>
> Error: Could not retrieve catalog from remote server: Error 400 on SERVER: 
> Puppet::Parser::Compiler failed with error ArgumentError: Could not find 
> stage setup specified by Class[myclass] on node mynode
>
>

... I don't think the problem here is your declaration of a 'stage' 
parameter.  Instead, it looks like the Stage resource you are referencing 
is not getting declared.

I am uncertain -- because I avoid stages myself -- whether a given stage's 
resource declaration needs to be evaluated before any classes are assigned 
to that stage.  I had supposed not, by analogy with schedules.  In that 
case, a good alternative would be to declare all relevant Stages at top 
scope in your site manifest, so that you can be certain that they will be 
available on every node.

 

> Is this method of assigning a stage to a class supported? If not how else 
> can I assign a stage to a class which is being assigned by the enc?
>
>

What happens if you set a 'stage' (meta)parameter without declaring stage 
as a class parameter?  I would expect that to work (as well, at least, as 
what you're doing now).  If it doesn't then you should file a bug report 
against Foreman.


John

-- 
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/fb2ec656-fc43-4c4b-a2fa-bb256beb5452%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to