How to run terraform in container!
I am running this from Docker Desktop 2.3.0.2. on Windows 10. I am on my work network which brings special certificate issue.
Going to use this official Hashicorp Terraform Image.
Creating New Image to incorporate your certificate
Create a new dockerfile and insert following. Be sure to have your PEM file in the same directory.
##Pull down the latest version of terraform from Hashi FROM hashicorp/terraform:light ##Need this else you get cert trust error COPY "myWork.pem" "/usr/local/share/ca-certificates/" ##Need this to apply the new cert (above) on this box ##https://manpages.ubuntu.com/manpages/xenial/man8/update-ca-certificates.8.html#name RUN "/usr/sbin/update-ca-certificates" ##Need this so that it runs terraform upon launch ENTRYPOINT ["/bin/terraform"]
Run following command to build your image
docker build -t terraform:latest .
Now you should bee a new image...
docker image ls
Create a terraform launcher
Now you can launch this image every time you want to invoke Terraform.
docker run --rm -it terraform:latest -version
But that's not very helpful. So we'll need to attach some volumes to make this useful. See this link for details. This is a little more useful call to this image from docker
docker run --rm -it -e TF_LOG=%debugVar% -e TF_CLI_CONFIG_FILE=%TF_CLI_CONFIG_FILE_NEW% -v %cd%:/data -v %tf_config%:/terraform -w /data -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker terraform:latest %newarg%
Now we'll make this into a Batch Script and ensure it's accessible from %PATH%. You can also create an Alias if you have permission to edit Registry.
This Batch Script is gonna add some extra features
- Enable toggling Debug at will
- Ability to pass in Terraform Config
- Ability to write and read back credential via Terraform Login
@echo off :dockerizedTerraform setlocal enabledelayedexpansion :: Initiall set this to 0, remember /A means this is number type set /A debug = 0 ::Set all the incoming argument into another variable, didn't know how to work with %* set "args=%*" ::loop through the arguments, when something we want to is found, flag it :: if there are more special flags we need to catch then just them here :: be sure to put quote around both side of comparison for %%x in (%*) do ( if "%%x" == "-debug" set /A debug = 1 ) :: If debug flag was set to 1 then remove -debug from the args if %debug%==1 ( set "newarg=%args:-debug= %" set "debugVar=DEBUG" ) else ( set "newarg=%args%" set "debugVar= " ) :: use -e for passing in environment variables to Docker container ::Need to pass in environment variable for the token file :: but we need to mount the volume and pass in the remote-end equivalent FOR %%i IN ("%TF_CLI_CONFIG_FILE%") DO ( :: get the folder path set "tf_config=%%~di%%~pi" :: get the file name and extension set "tf_config_file=%%~ni%%~xi" ) ::This will be the mount point for the terraform configuration file set "TF_CONFIG_PATH=terraform" ::THis will be the new config file location in the remote-end set "TF_CLI_CONFIG_FILE_NEW=/%TF_CONFIG_PATH%/%tf_config_file%" docker run --rm -it -e TF_LOG=%debugVar% -e TF_CLI_CONFIG_FILE=%TF_CLI_CONFIG_FILE_NEW% -v %cd%:/data -v %tf_config%:/terraform -w /data -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/docker:/var/lib/docker terraform:latest %newarg%
You can download the files here.
No comments:
Post a Comment