diff --git a/build.sh b/build.sh
new file mode 100755
index 0000000..01d34b4
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,117 @@
+#!/usr/bin/env bash
+
+##########################################################################
+# This is the Cake bootstrapper script for Linux and OS X.
+# This file was downloaded from https://github.com/cake-build/resources
+# Feel free to change this file to fit your needs.
+##########################################################################
+
+# Define directories.
+SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
+TOOLS_DIR=$SCRIPT_DIR/tools
+ADDINS_DIR=$TOOLS_DIR/Addins
+MODULES_DIR=$TOOLS_DIR/Modules
+NUGET_EXE=$TOOLS_DIR/nuget.exe
+CAKE_EXE=$TOOLS_DIR/Cake/Cake.exe
+PACKAGES_CONFIG=$TOOLS_DIR/packages.config
+PACKAGES_CONFIG_MD5=$TOOLS_DIR/packages.config.md5sum
+ADDINS_PACKAGES_CONFIG=$ADDINS_DIR/packages.config
+MODULES_PACKAGES_CONFIG=$MODULES_DIR/packages.config
+
+# Define md5sum or md5 depending on Linux/OSX
+MD5_EXE=
+if [[ "$(uname -s)" == "Darwin" ]]; then
+ MD5_EXE="md5 -r"
+else
+ MD5_EXE="md5sum"
+fi
+
+# Define default arguments.
+SCRIPT="setup.cake"
+CAKE_ARGUMENTS=()
+
+# Parse arguments.
+for i in "$@"; do
+ case $1 in
+ -s|--script) SCRIPT="$2"; shift ;;
+ --) shift; CAKE_ARGUMENTS+=("$@"); break ;;
+ *) CAKE_ARGUMENTS+=("$1") ;;
+ esac
+ shift
+done
+
+# Make sure the tools folder exist.
+if [ ! -d "$TOOLS_DIR" ]; then
+ mkdir "$TOOLS_DIR"
+fi
+
+# Make sure that packages.config exist.
+if [ ! -f "$TOOLS_DIR/packages.config" ]; then
+ echo "Downloading packages.config..."
+ curl -Lsfo "$TOOLS_DIR/packages.config" https://cakebuild.net/download/bootstrapper/packages
+ if [ $? -ne 0 ]; then
+ echo "An error occurred while downloading packages.config."
+ exit 1
+ fi
+fi
+
+# Download NuGet if it does not exist.
+if [ ! -f "$NUGET_EXE" ]; then
+ echo "Downloading NuGet..."
+ curl -Lsfo "$NUGET_EXE" https://dist.nuget.org/win-x86-commandline/latest/nuget.exe
+ if [ $? -ne 0 ]; then
+ echo "An error occurred while downloading nuget.exe."
+ exit 1
+ fi
+fi
+
+# Restore tools from NuGet.
+pushd "$TOOLS_DIR" >/dev/null
+if [ ! -f "$PACKAGES_CONFIG_MD5" ] || [ "$( cat "$PACKAGES_CONFIG_MD5" | sed 's/\r$//' )" != "$( $MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' )" ]; then
+ find . -type d ! -name . ! -name 'Cake.Bakery' | xargs rm -rf
+fi
+
+mono "$NUGET_EXE" install -ExcludeVersion
+if [ $? -ne 0 ]; then
+ echo "Could not restore NuGet tools."
+ exit 1
+fi
+
+$MD5_EXE "$PACKAGES_CONFIG" | awk '{ print $1 }' >| "$PACKAGES_CONFIG_MD5"
+
+popd >/dev/null
+
+# Restore addins from NuGet.
+if [ -f "$ADDINS_PACKAGES_CONFIG" ]; then
+ pushd "$ADDINS_DIR" >/dev/null
+
+ mono "$NUGET_EXE" install -ExcludeVersion
+ if [ $? -ne 0 ]; then
+ echo "Could not restore NuGet addins."
+ exit 1
+ fi
+
+ popd >/dev/null
+fi
+
+# Restore modules from NuGet.
+if [ -f "$MODULES_PACKAGES_CONFIG" ]; then
+ pushd "$MODULES_DIR" >/dev/null
+
+ mono "$NUGET_EXE" install -ExcludeVersion
+ if [ $? -ne 0 ]; then
+ echo "Could not restore NuGet modules."
+ exit 1
+ fi
+
+ popd >/dev/null
+fi
+
+# Make sure that Cake has been installed.
+if [ ! -f "$CAKE_EXE" ]; then
+ echo "Could not find Cake.exe at '$CAKE_EXE'."
+ exit 1
+fi
+
+# Start Cake
+exec mono "$CAKE_EXE" $SCRIPT "${CAKE_ARGUMENTS[@]}"
diff --git a/nuspec/nuget/Cake.Terraform.nuspec b/nuspec/nuget/Cake.Terraform.nuspec
index 6105503..19ef5b2 100644
--- a/nuspec/nuget/Cake.Terraform.nuspec
+++ b/nuspec/nuget/Cake.Terraform.nuspec
@@ -15,8 +15,8 @@
Cake, Script, Build, Terraform, Hashicorp
-
-
+
+
diff --git a/setup.cake b/setup.cake
index 7180adf..ed85166 100644
--- a/setup.cake
+++ b/setup.cake
@@ -1,4 +1,4 @@
-#load nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.Recipe&prerelease
+#load nuget:https://www.myget.org/F/cake-contrib/api/v2?package=Cake.Recipe&version=0.3.0-unstable0371
Environment.SetVariableNames();
diff --git a/src/Cake.Terraform.Tests/Cake.Terraform.Tests.csproj b/src/Cake.Terraform.Tests/Cake.Terraform.Tests.csproj
index 64998c9..0062f3b 100644
--- a/src/Cake.Terraform.Tests/Cake.Terraform.Tests.csproj
+++ b/src/Cake.Terraform.Tests/Cake.Terraform.Tests.csproj
@@ -1,12 +1,12 @@
- net45
+ net461
-
-
+
+
diff --git a/src/Cake.Terraform.Tests/TerraformApplyTests.cs b/src/Cake.Terraform.Tests/TerraformApplyTests.cs
index 18ee72b..94d4415 100644
--- a/src/Cake.Terraform.Tests/TerraformApplyTests.cs
+++ b/src/Cake.Terraform.Tests/TerraformApplyTests.cs
@@ -60,7 +60,7 @@ public void Should_throw_if_process_has_a_non_zero_exit_code()
[Fact]
public void Should_find_linux_executable()
{
- var fixture = new TerraformPlanFixture(PlatformFamily.Linux);
+ var fixture = new TerraformApplyFixture(PlatformFamily.Linux);
fixture.Environment.Platform.Family = PlatformFamily.Linux;
@@ -115,6 +115,20 @@ public void Should_set_input_variables_file()
Assert.Contains("-var-file \"./aws-creds.json\" -var \"access_key=foo\" -var \"secret_key=bar\"", result.Args);
}
+
+ [Fact]
+ public void Should_Append_Auto_Approve_When_AutoApprove_Is_True()
+ {
+ var fixture = new TerraformApplyFixture {
+ Settings = new TerraformApplySettings {
+ AutoApprove = true
+ }
+ };
+
+ var result = fixture.Run();
+
+ Assert.Contains("-auto-approve", result.Args);
+ }
}
}
}
\ No newline at end of file
diff --git a/src/Cake.Terraform/Cake.Terraform.csproj b/src/Cake.Terraform/Cake.Terraform.csproj
index d7116e1..bf3bbd4 100644
--- a/src/Cake.Terraform/Cake.Terraform.csproj
+++ b/src/Cake.Terraform/Cake.Terraform.csproj
@@ -1,12 +1,12 @@
- net45;netstandard1.6
+ net461;netstandard1.6
- 0.19.3
+ 0.22.0
diff --git a/src/Cake.Terraform/TerraformApplyRunner.cs b/src/Cake.Terraform/TerraformApplyRunner.cs
index 29398b7..e1b88be 100644
--- a/src/Cake.Terraform/TerraformApplyRunner.cs
+++ b/src/Cake.Terraform/TerraformApplyRunner.cs
@@ -13,7 +13,20 @@ public TerraformApplyRunner(IFileSystem fileSystem, ICakeEnvironment environment
public void Run(TerraformApplySettings settings)
{
- var builder = new ProcessArgumentBuilder().Append("apply");
+ var builder = new ProcessArgumentBuilder()
+ .Append("apply");
+
+ // Order of AutoApprove and Plan are important.
+ if (settings.AutoApprove)
+ {
+ builder.Append("-auto-approve");
+ }
+
+ // Use Plan if it exists.
+ if (settings.Plan != null)
+ {
+ builder.Append(settings.Plan.FullPath);
+ }
if (!string.IsNullOrEmpty(settings.InputVariablesFile))
{
diff --git a/src/Cake.Terraform/TerraformApplySettings.cs b/src/Cake.Terraform/TerraformApplySettings.cs
index 3803d3f..2802089 100644
--- a/src/Cake.Terraform/TerraformApplySettings.cs
+++ b/src/Cake.Terraform/TerraformApplySettings.cs
@@ -20,5 +20,11 @@ public class TerraformApplySettings : TerraformSettings
/// https://www.terraform.io/docs/configuration/variables.html#variable-files
///
public string InputVariablesFile { get; set; }
+
+ ///
+ /// Skip interactive approval of plan before applying.
+ /// https://www.terraform.io/docs/commands/apply.html#auto-approve
+ ///
+ public bool AutoApprove { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Cake.Terraform/TerraformRunner.cs b/src/Cake.Terraform/TerraformRunner.cs
index e55b978..c16987a 100644
--- a/src/Cake.Terraform/TerraformRunner.cs
+++ b/src/Cake.Terraform/TerraformRunner.cs
@@ -22,10 +22,7 @@ protected override string GetToolName()
protected override IEnumerable GetToolExecutableNames()
{
-
- return new [] { _platform.IsUnix() ? "terraform" : "terraform.exe" };
+ return new[] { _platform.IsUnix() ? "terraform" : "terraform.exe" };
}
-
-
}
}
\ No newline at end of file
diff --git a/tools/packages.config b/tools/packages.config
index 5657d95..747e13e 100644
--- a/tools/packages.config
+++ b/tools/packages.config
@@ -1,4 +1,4 @@
-
+