Merge pull request #25455 from hashicorp/jbardin/destroy-doc
Update destroy doc
This commit is contained in:
commit
af20d5404f
|
@ -32,6 +32,11 @@ digraph create {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `A` is created
|
||||||
|
1. `B` is created
|
||||||
|
1. `C` is created
|
||||||
|
|
||||||
## Resource Updates
|
## Resource Updates
|
||||||
|
|
||||||
An existing resource may be updated with references to a newly created
|
An existing resource may be updated with references to a newly created
|
||||||
|
@ -52,6 +57,11 @@ digraph update {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `A` is created
|
||||||
|
1. `B` is created
|
||||||
|
1. `C` is created
|
||||||
|
|
||||||
## Simple Resource Destruction
|
## Simple Resource Destruction
|
||||||
|
|
||||||
The order for destroying resource is exactly the inverse used to create them.
|
The order for destroying resource is exactly the inverse used to create them.
|
||||||
|
@ -74,13 +84,16 @@ digraph destroy {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `C` is destroyed
|
||||||
|
1. `B` is destroyed
|
||||||
|
1. `A` is Destroyed
|
||||||
|
|
||||||
## Resource Replacement
|
## Resource Replacement
|
||||||
|
|
||||||
Resource replacement is the logical combination of the above scenarios. Here we
|
Resource replacement is the logical combination of the above scenarios. Here we
|
||||||
will show the replacement steps involved when `B` depends on `A`.
|
will show the replacement steps involved when `B` depends on `A`.
|
||||||
|
|
||||||
|
|
||||||
In this first example, we simultaneously replace both `A` and `B`. Here `B` is
|
In this first example, we simultaneously replace both `A` and `B`. Here `B` is
|
||||||
destroyed before `A`, then `A` is recreated before `B`.
|
destroyed before `A`, then `A` is recreated before `B`.
|
||||||
|
|
||||||
|
@ -106,6 +119,12 @@ digraph replacement {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `B` is destroyed
|
||||||
|
1. `A` is destroyed
|
||||||
|
1. `A` is created
|
||||||
|
1. `B` is created
|
||||||
|
|
||||||
|
|
||||||
This second example replaces only `A`, while updating `B`. Resource `B` is only
|
This second example replaces only `A`, while updating `B`. Resource `B` is only
|
||||||
updated once `A` has been destroyed and recreated.
|
updated once `A` has been destroyed and recreated.
|
||||||
|
@ -129,6 +148,12 @@ digraph replacement {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `A` is destroyed
|
||||||
|
1. `A` is created
|
||||||
|
1. `B` is updated
|
||||||
|
|
||||||
|
|
||||||
While the dependency edge from `B update` to `A destroy` isn't necessary in
|
While the dependency edge from `B update` to `A destroy` isn't necessary in
|
||||||
these examples, it is shown here as an implementation detail which will be
|
these examples, it is shown here as an implementation detail which will be
|
||||||
mentioned later on.
|
mentioned later on.
|
||||||
|
@ -166,6 +191,12 @@ digraph replacement {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `B` is destroyed AND `A` is created
|
||||||
|
1. `B` is created
|
||||||
|
1. `A` is destroyed
|
||||||
|
|
||||||
Note that in this first example, the creation of `B` is inserted in between the
|
Note that in this first example, the creation of `B` is inserted in between the
|
||||||
creation of `A` and the destruction of `A`. This becomes more important in the
|
creation of `A` and the destruction of `A`. This becomes more important in the
|
||||||
update example below.
|
update example below.
|
||||||
|
@ -190,10 +221,17 @@ digraph replacement {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `A` is created
|
||||||
|
1. `B` is updated
|
||||||
|
1. `A` is destroyed
|
||||||
|
|
||||||
Here we can see clearly how `B` is updated after the creation of `A` and before
|
Here we can see clearly how `B` is updated after the creation of `A` and before
|
||||||
the destruction of `A`. To introduce another term, the prior resource `A` is
|
the destruction of the _deposed_ resource `A`. (The prior resource `A` is
|
||||||
sometimes referred to as "deposed" before it is destroyed, to disambiguate it
|
sometimes referred to as "deposed" before it is destroyed, to disambiguate it
|
||||||
from the newly created `A`.
|
from the newly created `A`.) This ordering is important for resource that
|
||||||
|
"register" other resources, and require updating before the dependent resource
|
||||||
|
can be destroyed.
|
||||||
|
|
||||||
The transformation used to create these graphs is also where we use the extra
|
The transformation used to create these graphs is also where we use the extra
|
||||||
edges mentioned above connecting `B` to `A destroy`. The algorithm to change a
|
edges mentioned above connecting `B` to `A destroy`. The algorithm to change a
|
||||||
|
@ -219,6 +257,9 @@ digraph update {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `B` is updated
|
||||||
|
1. `A` is destroyed
|
||||||
|
|
||||||
### Forced Create Before Destroy
|
### Forced Create Before Destroy
|
||||||
|
|
||||||
|
@ -255,9 +296,9 @@ digraph replacement {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
In order to resolve these cycles, and all resources that precede a resource
|
In order to resolve these cycles, all resources that precede a resource
|
||||||
with `create_before_destroy` must in turn be handled in the same manner.
|
with `create_before_destroy` must in turn be handled in the same manner.
|
||||||
Reversing the incoming edged to `A destroy` resolves the problem:
|
Reversing the incoming edges to `A destroy` resolves the problem:
|
||||||
|
|
||||||
![Correct create_before_destroy replacement](./images/replace_all_cbd.png)
|
![Correct create_before_destroy replacement](./images/replace_all_cbd.png)
|
||||||
<!--
|
<!--
|
||||||
|
@ -281,6 +322,12 @@ digraph replacement {
|
||||||
}
|
}
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
Order of operations:
|
||||||
|
1. `A` is created
|
||||||
|
1. `B` is created
|
||||||
|
1. `B` is destroyed
|
||||||
|
1. `A` is destroyed
|
||||||
|
|
||||||
This also demonstrates why `create_before_destroy` cannot be overridden when
|
This also demonstrates why `create_before_destroy` cannot be overridden when
|
||||||
it is inherited; changing the behaviour here isn't possible without removing
|
it is inherited; changing the behaviour here isn't possible without removing
|
||||||
the initial reason for `create_before_destroy`; otherwise cycles are always
|
the initial reason for `create_before_destroy`; otherwise cycles are always
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Loading…
Reference in New Issue