Merge pull request #13110 from hashicorp/jbardin/apply-plan

Don't Validate if we have an execution plan
This commit is contained in:
James Bardin 2017-03-27 18:51:24 -04:00 committed by GitHub
commit 9eb6faa679
3 changed files with 45 additions and 1 deletions

View File

@ -802,6 +802,39 @@ func TestApply_planVars(t *testing.T) {
}
}
// we should be able to apply a plan file with no other file dependencies
func TestApply_planNoModuleFiles(t *testing.T) {
// temprary data directory which we can remove between commands
td, err := ioutil.TempDir("", "tf")
if err != nil {
t.Fatal(err)
}
defer os.RemoveAll(td)
defer testChdir(t, td)()
p := testProvider()
planFile := testPlanFile(t, &terraform.Plan{
Module: testModule(t, "apply-plan-no-module"),
})
contextOpts := testCtxConfig(p)
apply := &ApplyCommand{
Meta: Meta{
ContextOpts: contextOpts,
Ui: new(cli.MockUi),
},
}
args := []string{
planFile,
}
apply.Run(args)
if p.ValidateCalled {
t.Fatal("Validate should not be called with a plan")
}
}
func TestApply_refresh(t *testing.T) {
originalState := &terraform.State{
Modules: []*terraform.ModuleState{

View File

@ -104,9 +104,13 @@ func (m *Meta) Backend(opts *BackendOpts) (backend.Enhanced, error) {
StateBackupPath: m.backupPath,
ContextOpts: m.contextOpts(),
Input: m.Input(),
Validation: true,
}
// Don't validate if we have a plan. Validation is normally harmless here,
// but validation requires interpolation, and `file()` function calls may
// not have the original files in the current execution context.
cliOpts.Validation = opts.Plan == nil
// If the backend supports CLI initialization, do it.
if cli, ok := b.(backend.CLI); ok {
if err := cli.CLIInit(cliOpts); err != nil {

View File

@ -0,0 +1,7 @@
resource "test_instance" "tmpl" {
foo = "${file("${path.module}/template.txt")}"
}
output "template" {
value = "${test_instance.tmpl.foo}"
}