The Puppet Labs Issue Tracker has Moved:

This issue tracker is now in read-only archive mode and automatic ticket export has been disabled. Redmine users will need to create a new JIRA account to file tickets using See the following page for information on filing tickets with JIRA:

Refactor #3691

The Catalog should include both dependency and containment edges

Added by Luke Kanies about 6 years ago. Updated about 3 years ago.

Status:DuplicateStart date:04/27/2010
Priority:HighDue date:
Assignee:eric sorenson% Done:


Target version:3.x
Affected Puppet version:2.7.19 Branch:

We've Moved!

Ticket tracking is now hosted in JIRA:


Right now, the catalogs sent from the server to the client include only containment edges, and the client has to go through some work internally to add dependency edges. In the course of doing so, it removes all of the containment edges. The current mechanism for removing them involves the infamous ‘whit’, which causes plenty of problems, including the need for the ‘anchor’ pattern.

If we can refactor the catalog creation on the server, and graph sorting on the client, so that we can have both kinds of edges in the graph at the same time, we can get rid of all of the code around the relationship graph, along with the need for whits, and all of the complicated graph stuff involving them, plus the need for the anchor pattern.

This will also make integration with other tools, like PuppetDB, easier.

Note that the “hard” parts about doing this work are twofold:

  • Correctly descending dependencies in priority to containment edges. The edge types aren’t equal and can’t be treated as such.

  • Detecting dependency cycles.

It’s that last bit that blocked me last time I tried to do this. I have an attempt at this from a long time ago:

But I couldn’t get cycle detection working, so I couldn’t get it merged.

Related issues

Related to Puppet - Bug #8040: Classes should be able to contain other classes to provid... Closed 06/22/2011
Related to Puppet - Bug #11339: Class ordering bug? Closed 12/12/2011


#1 Updated by Jesse Wolfe almost 6 years ago

  • Target version changed from 2.6.0 to 52

#2 Updated by Luke Kanies over 5 years ago

  • Assignee deleted (Luke Kanies)

Note that this is pretty messy. I have a branch named ‘refactor/master/3691-no_relationship_graph’ that is about 95% of the way there, but it’s all pre-code cleanup so it’d be a messy merge.

#3 Updated by James Turnbull about 5 years ago

  • Target version deleted (52)

#4 Updated by Luke Kanies over 3 years ago

  • Subject changed from The relationship graph should be removed to The Catalog should include both dependency and containment edges
  • Description updated (diff)
  • Assignee set to eric sorenson
  • Affected Puppet version changed from 0.25.4 to 2.7.19

#5 Updated by eric sorenson over 3 years ago

  • Priority changed from Normal to High
  • Target version set to 3.x
  • Keywords set to backlog

Bumping into backlog to propose for Q1'13 engineering efforts.

#6 Updated by eric sorenson about 3 years ago

  • Status changed from Accepted to Duplicate

Since this describes a possible implementation to solve #8040 but we’re tracking the progress on that bug, I’m marking this one closed / duplicate.

Also available in: Atom PDF