Network Management With Puppet

So our new Puppet 2.7.0 (or Statler) release went out last night into the big wide world as a release candidate. It’s got some pretty cool features in it and a bunch of bug fixes. Some of the new features are just awesome:

  • Apache 2.0 license
  • Puppet Face (inter-face!) to the API to make building Puppet command line tools easy
  • Deterministic ordering
  • Ruby 1.9 support
  • Better dependency cycle reporting

But one that I am really excited about is our first stab at network device management with Puppet. It’s based on an open-space discussion that happened at PuppetCamp EU in May 2010 and it was the amazing Brice Figureau who has implemented the start of a network management solution. Brice totally doesn’t pay for a single beer at Puppet Camp either. :) It’s very early days for this feature and currently this initial solution has a base network type/provider and providers for managing Cisco interfaces (including ip address, trunking, etc) and vlans. The Puppet network provider can connect to remote switch/routers either through ssh and/or telnet. To manage an interface:

interface {
 "FastEthernet 0/1":
    device_url => "ssh://user:pass@cisco2960.domain.com/",
    mode => trunk,
    encapsulation => dot1q,
    trunk_allowed_vlans => "1-99,200,253",
    description => "to back bone router"
}

Or

interface {
 "Vlan 1":
    device_url => "ssh://user:pass@router.domain.com/",
    description => "internal net",
    ipaddress => [ "192.168.0.1/24", "fe08::/128 link-local"]
}

And to manage vlans:

vlan {
 "99":
  description => "management",
    device_url => "ssh://user:pass@cisco2960.domain.com/",
}

A current limitation is that it isn’t possible to have 2 switches with the same interface name and obviously we like to polish up the authentication interface to include other options. We’d also love testing and feedback on this new feature and if you’re interested in submitting a provider to support other network devices we’d love to see and/or help with that too!

comments powered by Disqus