When I was trying to run terraform plan
in WSL Ubuntu (20.04) it seemed like it had hung. However, when exiting from the process I was receiving the following error:
The error was a red herring as my permissions were OK after double checking in Azure. Turning on the Terraform debug trace feature I found my real clue, and yes, it was DNS 🙂
The fix
When editing the /etc/resolve.conf file and restarting the WSL terminal the issue returns. The resolve.conf file is being auto generated on boot, reverting the changes.
To stop this and permanently keep your preferred nameserver entry, run the following commands in the terminal:
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf
This is removing the existing resolv.conf file, creating a new one and inserting the Google nameserver and then generating a wsl.conf file with the required entries. The last command sets the file attribute +i which means it cannot be modified.
Next, open PowerShell and run:
wsl --shutdown
When relaunching the WSL terminal and running cat /etc/resolv.conf
it’s now retaining the nameserver!
Finally, when runnign terraform plan
it is no longer hanging!
Conclusion
The resolv.conf file there is a message stating to generate wsl.conf within /etc/ however this doesn’t seem to do much. There is a large GitHub issue on this about this https://github.com/microsoft/WSL/issues/5420.
Although not directly related to Terraform, I stumbled across this issue when using WSL and Terraform.
Hope this helps others out there with the same issue!
Latest Posts
Never miss an update: Azure Verified Modules with GitHub Bot & Teams
Getting started: Continuous deployment with Azure Bicep and Azure DevOps
Eliminate old API versions in your Azure Bicep templates