Questo è il modo in cui mi sono avvicinato a quest'area indossando il ruolo di sysadmin / devops. La maggior parte dei seguenti saranno solo principi generali che cerco di seguire e non specifici dello Chef.
Ho finito per andare con Puppet perché ho scoperto che c'erano più risorse in quel momento e mi sono sentito più facile da raccogliere per me.
Ho esaminato i vari moduli precompilati disponibili per cose come apache, php5, ecc. Molti di loro sembravano fare molto più di quanto avessi bisogno ed essere così poco familiari con la piattaforma che non mi fidavo di quello che stava succedendo. Ho deciso che sarebbe stato più semplice per me identificare ciò che dovevo fare su ciascun tipo di nodo.
Ho avviato il processo eseguendo il provisioning dell'ambiente di sviluppo locale del team (vargrant + virtual box). Per ogni servizio / componente ho creato un modulo: php5, apache2, redis, mysql, ecc.
Una volta che l'ambiente di sviluppo era stabile / funzionante, ho iniziato a sviluppare l'ambiente di controllo qualità. Ho definito tipi di nodi generici per server Web, redis, vernice, ecc. Che hanno riutilizzato gli stessi moduli di dev. Una volta fatto questo, la messa in scena e la produzione necessarie erano necessarie modifiche minime per essere operativi.
Mentre stai esaminando e scrivendo le tue ricette / modelli, dovresti considerare come riutilizzare / generalizzare. Non programmare cose come percorsi o utenti / gruppi che potrebbero cambiare tra distro / progetti / ambienti. Dal momento che stai guardando un approccio generalizzato, immagino che un grande ostacolo avrà a che fare con le differenze tra le distribuzioni * nix.
Ancora più importante, mantenere è semplice. Automatizza / standardizza le parti più importanti / che richiedono tempo dell'ambiente. Iterare, evolvere.