It could suck more. It could also suck less.
After some time using Puppet, these are my thoughts - straight from my heart.
- for someone having any Groovy, Python or Java background, it's EXTREMELY PAINFUL to accept the limitations of the language
- a pathetically poor library of data manipulation functions (dimly enhanced with stdlib-puppet),
- no iterations, no easy way to transform data structures into a different structure
- very scarce OO support (there is class inheritance but it's deprecated (???!!!) ) - copy and paste syndrome is the natural outcome
- no support for nested resources - everything is at a flat level - to achieve nesting you must write classes, which introduces abstraction which IMHO is not always a good thing
- 2 constructs - define and class - whose use cases show a confusingly ambiguous separation
- same class "invokation" construct expressed in 2 totally different ways: "include classname" and "class { 'classname': parametername => parametervalue ...}" . This is like speaking German and Russian in the same sentence, it's just confusing.
- no enumerations (HORRIBLE! Everything is a String!)
- failure upon redefinition of the same resource name (can't you give me a simple option/construct to simply ignore the second declaration?)
- limited support for packaging and context separation between modules
- a DSL which is ugly and verbose (all those : and , .... and then, have you ever seen a list ending with a COMMA ???? It's ugly!)
- for those missing complex data modeling, hash data structures are there, but boy, how painful and fragile it is to use them
- no simple options to hook to a CMDB, you must use those hiera and yaml that to me are brittle and limited. Just give me an option to use a DB, it's my decision, why do you impose me to use YAML or JSON, I hate property files to maintain configuration.
- the seemingly best IDE available, Geppetto, is way more primitive (e.g. no refactoring available - which to me is an ESSENTIAL feature) than even the most basic Java IDE
- lack of a java-like "import modulename.* " statement to avoid having to verbosely specify the fully qualified name of each define/class defined in another module
- lack of notion of a scope/context to keep modules separated (sort of "module" notion in Java)
- Ruby???? How many sysops have ever used Ruby before? I mean, Python is 3 times more popular than Ruby, and probably 10 times more in the sysadmin community....
On the whole, although Puppet is a very good idea, the implementation is simply too limited in its options. I have said the same about Maven. It will evolve with time until it will incorporate all the features of a modern OO language - it's already evolving with 3.2 version - however it would have been much better to do it since the beginning.
On the whole using Puppet one has the sensation that the last 30 years of Software Engineering have passed in vain.
If Infrastructure is CODE (which is a fascinating concept, and I am all for it) then why not have at disposition the BEST coding languages on the market? Why should we castrate ourselves with a very limited DSL? Why reinventing the wheel to make it square?
After some time using Puppet, these are my thoughts - straight from my heart.
- for someone having any Groovy, Python or Java background, it's EXTREMELY PAINFUL to accept the limitations of the language
- a pathetically poor library of data manipulation functions (dimly enhanced with stdlib-puppet),
- no iterations, no easy way to transform data structures into a different structure
- very scarce OO support (there is class inheritance but it's deprecated (???!!!) ) - copy and paste syndrome is the natural outcome
- no support for nested resources - everything is at a flat level - to achieve nesting you must write classes, which introduces abstraction which IMHO is not always a good thing
- 2 constructs - define and class - whose use cases show a confusingly ambiguous separation
- same class "invokation" construct expressed in 2 totally different ways: "include classname" and "class { 'classname': parametername => parametervalue ...}" . This is like speaking German and Russian in the same sentence, it's just confusing.
- no enumerations (HORRIBLE! Everything is a String!)
- failure upon redefinition of the same resource name (can't you give me a simple option/construct to simply ignore the second declaration?)
- limited support for packaging and context separation between modules
- a DSL which is ugly and verbose (all those : and , .... and then, have you ever seen a list ending with a COMMA ???? It's ugly!)
- for those missing complex data modeling, hash data structures are there, but boy, how painful and fragile it is to use them
- no simple options to hook to a CMDB, you must use those hiera and yaml that to me are brittle and limited. Just give me an option to use a DB, it's my decision, why do you impose me to use YAML or JSON, I hate property files to maintain configuration.
- the seemingly best IDE available, Geppetto, is way more primitive (e.g. no refactoring available - which to me is an ESSENTIAL feature) than even the most basic Java IDE
- lack of a java-like "import modulename.* " statement to avoid having to verbosely specify the fully qualified name of each define/class defined in another module
- lack of notion of a scope/context to keep modules separated (sort of "module" notion in Java)
- Ruby???? How many sysops have ever used Ruby before? I mean, Python is 3 times more popular than Ruby, and probably 10 times more in the sysadmin community....
On the whole, although Puppet is a very good idea, the implementation is simply too limited in its options. I have said the same about Maven. It will evolve with time until it will incorporate all the features of a modern OO language - it's already evolving with 3.2 version - however it would have been much better to do it since the beginning.
On the whole using Puppet one has the sensation that the last 30 years of Software Engineering have passed in vain.
If Infrastructure is CODE (which is a fascinating concept, and I am all for it) then why not have at disposition the BEST coding languages on the market? Why should we castrate ourselves with a very limited DSL? Why reinventing the wheel to make it square?