โš ๏ธ Status: Dependency cycle detected (again)
RELAX, TODAY IS THE FIRST DAY OF THE REST OF YOUR LIFE

Puppet: Because manually configuring 1000 servers is for peasants, but debugging a single manifest for 8 hours is totally reasonable.

๐Ÿ”ฅ Greatest Hits

$ puppet help help help help help
Error: Puppet help only takes two (optional) arguments: a subcommand and
an action
Error: Try 'puppet help help help' for usage

๐ŸŽฏ The Dependency Dance

# This should work...
class myapp {
  package { 'important-package':
    ensure => present,
    before => Service['myapp'],
  }
  
  service { 'myapp':
    ensure  => running,
    require => Package['important-package'],
  }
}

# Dependency cycle detected. Good luck!

๐Ÿ”„ The Puppet Wayโ„ข

  1. Write a simple manifest
  2. Run puppet apply
  3. Watch it fail spectacularly
  4. Add 47 dependency arrows
  5. Still fails, but now with more circular dependencies
  6. Rewrite everything in Ansible
  7. Miss the good old days of ssh server && sudo thing

"What you wrote vs. what Puppet heard"

What you wrote:
file { '/etc/config':
  content => 'production settings',
}
What Puppet heard:
file { '/etc/config':
  content => 'test settings from 3 runs ago',
  mode    => '000',
  owner   => 'nobody',
}

๐Ÿ’ก Pro Tips

  • Always remember: Puppet knows better than you
  • If it's not converging, you're not doing it the Puppet Wayโ„ข
  • When in doubt, add more notify => arrows
  • "It works on my laptop" is not a valid Puppet strategy
  • The catalog will definitely compile this time. Definitely.
  • Puppet runs every 30 minutes whether you need it or not
  • Hiera is totally intuitive once you read the documentation 47 times

"Puppet: Making simple tasks complicated since 2005"

โ€” Everyone who's tried to deploy a file with specific permissions