On Fri, Apr 6, 2012 at 8:26 PM, jcbollinger <john.bollin...@stjude.org> wrote:
>
>
> On Apr 6, 1:07 am, sam <er.sureshprajap...@gmail.com> wrote:
>> Hi All,
>>
>> Hope you people are doing good.
>>
>> I have a manifest file :
>>
>> lass profile {
>
>
> That's supposed to be "class" of course.  I guess it's a cut & paste
> error.
>
> Anyway, this class (and all of your others) really ought to be in a
> module.
>
>
>> # setup profile parms. We dont handle non Ubuntu OS yet
>>     if ("$operatingsystem" == "Ubuntu") {
>>         file {
>>             "/etc/profile.d":
>>                 ensure  => directory,
>>                 purge   => true,
>>                 force   => true,
>>                 recurse => true,
>>                 owner   => root,
>>                 group   => root,
>>                 mode    => 644;
>>         }
>>     }}
>>
>> class profile::ulimit inherits profile {
>
>
> This class really oughtn't to inherit from class "profile".  Puppet
> class inheritance is only appropriate where the subclass overrides one
> or more properties of one of its superclass's resources (if even
> then).  In all other cases, including this one, you should use
> composition instead:
>
>    include 'profile'
>
>
>>     if ("$operatingsystem" == "Ubuntu") {
>>         define set_ulimit($limit="null") {
>>                 file {
>>                     "/etc/profile.d/ulimit.sh":
>>                         ensure  => file,
>>                         mode    => 644,
>>                         owner   => root,
>>                         group   => root,
>>                         content => template('profile/ulimit.sh.erb');
>>                     }
>>         }
>>
>>         set_ulimit { "ulimit.sh": limit  => "$((2 * 1073741824))"; }
>>     }}
>>
>> class profile::ulimit::full inherits profile::ulimit {
>>     if ("$operatingsystem" == "Ubuntu") {
>>         if defined(Set_ulimit["ulimit.sh"]) {
>>             Set_ulimit["ulimit.sh"] {
>>                 limit  => "unlimited" #unlimited
>>             }
>>         }
>>     }
>>
>> }
>>
>> when i run puppet parser validate it gives me error :
>>
>> err: Could not parse for environment production: Classes, definitions,
>> and nodes may only appear at toplevel or inside other classes;
>> expected '%s' at
>> /home/vgsuresh/svn/operations/puppet/modules/profile/manifests/init.pp:19
>> err: Try 'puppet help parser validate' for usage
>
>
> Your definition "set_ulimit" can only appear at top level or
> (directly) inside a class.  It cannot appear inside a conditional
> statement, and you don't need it to do.  Just move the definition
> outside the conditional.  It makes no difference to declare it
> unconditionally if you only declare instances conditionally.  As a
> matter of style, though, it should appear at top level (but in a
> module) instead of inside a class.
>
> Furthermore, your naming and manifest design suggest a fundamental
> misunderstanding: definitions should not be construed as functions or
> (especially) macros.  Rather, they define *resource types*, analogous
> to Puppet's built-in resource types in almost every way.  You are
> likely to have continual trouble with definitions until you adjust
> your mental model.
>
> Note also:
>
> 1) Although the 'defined' function can be used to determine whether a
> particular resource has been declared, that's poor practice.  If your
> manifest structure does not pre-determine the answer (which in your
> case it does) then the answer is parse-order dependent (which will
> bite you eventually).
>
> 2) Since your manifest structure already controls whether resource
> Set_ulimit["ulimit.sh"] will have been declared by the time your class
> profile::ulimit::full is parsed (it is declared by the superclass),
> you don't need to test for it via 'defined':
>
> class profile::ulimit::full inherits profile::ulimit {
>    if ("$operatingsystem" == "Ubuntu") {
>        Set_ulimit["ulimit.sh"] {
>            limit  => "unlimited" #unlimited
>        }
>    }
> }
>
> 3) Really, the whole approach is awkward.  It would be much better to
> build this around a *data* hierarchy (via Hiera) than around a class
> hierarchy.  You could merge 'set_ulimit' into class "profile::ulimit"
> and get rid of class "profile::ulimit::full" altogether.  With a bit
> more work you could even get rid of the conditional statements, or at
> least convert them to be generic instead of OS-specific.
>
>
> John
>


Hi John,


thanx for looking into it.
Problem resolved.



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



-- 
Best Regards,
Suresh Kumar Prajapati
Operations Engineer | Inmobi India
E-mail: er.sureshprajap...@gmail.com
Mob No: +91-9611708308
----------------------------------------------------------------------------------------
Theory is when you know all and nothing works. Practice is when all
works and nobody knows why. In this case we have put together theory
and practice: nothing works... and nobody knows why!

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

Reply via email to