Commit Graph

22 Commits

Author SHA1 Message Date
Paul Hinze baa33d7326 core: dag errors should cascade to all descendents
We weren't marking skipped nodes as failing, so any
grandchild-and-deeper dependencies would still evaluate.

For example:

    A -> B -> C -> D

If B failed, C would be skipped, but D would still be evaluated.

This fixes the behavior so C, D, and any further descendents will all be
skipped when B fails.

Addresses crashing aspect of #2955 and likely a lot of other confusing
failure modes.
2015-08-07 11:38:58 -05:00
Mitchell Hashimoto caef7769ae dag: Replace with the same values is a no-op 2015-05-07 11:22:07 -07:00
Paul Hinze ce49dd6080 core: graph command gets -verbose and -draw-cycles
When you specify `-verbose` you'll get the whole graph of operations,
which gives a better idea of the operations terraform performs and in
what order.

The DOT graph is now generated with a small internal library instead of
simple string building. This allows us to ensure the graph generation is
as consistent as possible, among other benefits.

We set `newrank = true` in the graph, which I've found does just as good
a job organizing things visually as manually attempting to rank the nodes
based on depth.

This also fixes `-module-depth`, which was broken post-AST refector.
Modules are now expanded into subgraphs with labels and borders. We
have yet to regain the plan graphing functionality, so I removed that
from the docs for now.

Finally, if `-draw-cycles` is added, extra colored edges will be drawn
to indicate the path of any cycles detected in the graph.

A notable implementation change included here is that
{Reverse,}DepthFirstWalk has been made deterministic. (Before it was
dependent on `map` ordering.) This turned out to be unnecessary to gain
determinism in the final DOT-level implementation, but it seemed
a desirable enough of a property that I left it in.
2015-04-27 09:23:47 -05:00
Paul Hinze 97acccd3ed core: targeted operations
Add `-target=resource` flag to core operations, allowing users to
target specific resources in their infrastructure. When `-target` is
used, the operation will only apply to that resource and its
dependencies.

The calculated dependencies are different depending on whether we're
running a normal operation or a `terraform destroy`.

Generally, "dependencies" refers to ancestors: resources falling
_before_ the target in the graph, because their changes are required to
accurately act on the target.

For destroys, "dependencies" are descendents: those resources which fall
_after_ the target. These resources depend on our target, which is going
to be destroyed, so they should also be destroyed.
2015-03-31 14:49:38 -05:00
Mitchell Hashimoto 865de51816 dag: do a DFS for each vertex 2015-02-27 19:37:59 -08:00
Mitchell Hashimoto ed2075e384 dag: TransitiveReduction 2015-02-27 19:12:19 -08:00
Mitchell Hashimoto 5c2639bd10 dag: export more things 2015-02-19 12:08:07 -08:00
Mitchell Hashimoto 54fd742ef6 dag: walk should be able to be halted 2015-02-19 12:07:57 -08:00
Mitchell Hashimoto af8d33ddb8 dag: Replace 2015-02-19 12:07:56 -08:00
Mitchell Hashimoto 5b0004ffc7 dag: detect self references, use multierror 2015-02-19 12:07:56 -08:00
Mitchell Hashimoto e86698c50d dag: fix walk order issue, scc issues 2015-02-19 12:07:55 -08:00
Mitchell Hashimoto d59ced3c57 dag: Validate for DAGs 2015-02-19 12:07:55 -08:00
Mitchell Hashimoto e94c43e0dc dag: Walk 2015-02-19 12:07:55 -08:00
Mitchell Hashimoto cfa3d89265 dag: find root of AcyclicGraph 2015-02-19 12:07:55 -08:00
Mitchell Hashimoto 9dfce9c93a dag: Remove, RemoveEdge, DownEdges, UpEdges 2015-02-19 12:07:54 -08:00
Mitchell Hashimoto ae4d20f8ce dag: make vertices a set 2015-02-19 12:07:53 -08:00
Mitchell Hashimoto 01ec680019 terraform: ProviderTransform to map resources to providers by dep 2015-02-19 12:07:53 -08:00
Mitchell Hashimoto 6eb379fa75 terraform: start the transforms, adding orphans 2015-02-19 12:07:52 -08:00
Mitchell Hashimoto 21e4501edb terraform: start implementing interfaces for semantic checks 2015-02-19 12:07:52 -08:00
Mitchell Hashimoto b48a0cc3b9 dag: add tarjan to dag 2015-02-19 12:07:52 -08:00
Mitchell Hashimoto 2a910585a2 dag: new Graph API 2015-02-19 12:07:51 -08:00
Mitchell Hashimoto 87f4c3aae1 dag: rename to this 2015-02-19 12:07:51 -08:00