Depending on how your development and test environments are managed, installing Microsoft SQL Server may be a common task, or at least a complex task for a Windows Administrator. Ansible can provide a way to make this task consistant and repeatable. Using the excellent package of DBATools (https://dbatools.io/) we can even use Ansible to execute complex configuration steps. I have posted the role developed in this guide to Ansible Galaxy for ease of reuse. However, this guide will cover indepth the individual steps and how they operate.
When many Windows administrators think of installing applications even very basic ones it's always... Next Next Next Finish. Ansible and configuration management tools like it don't work like this, they can't press Next. They require silent installers that run start to finish on their own. My recommendation for solving this problem on Windows is Chocolatey. It brings to Windows all the advantages of a Linux package manager like yum or apt-get and integrates well with Ansible through its win_chocolatey module that we used previously when setting up our test environment. Since Chocolatey is built on top of the NuGet infrastructure, that means we can install packages from Chocolatey.org, NuGet.org, MyGet.org, file shares, directories, custom feeds and from private feeds. In this guide, we'll be developing an Ansible role to install internal server we can use to deploy our own company-specific packages.
If you've used WSL on a system that connects to a corporate environment you may have experienced issues resolving host names, particularly for your internal network. Here's how to resolve that. The primary issue is the interaction between the DNS changes the VPN connection creates (switching to corporate internal DNS) and how WSL discovers DNS settings to populate /etc/resolv.conf is flawed, this is how I fixed it for my corporate VPN solution (GlobalProtect).
This is the final part of a three part series. In the first entry of this series we configured Vagrant and built our basic inventory for Ansible. We then used Ansible to create a common role with basic tasks that we need to complete on all hosts. Now we will create specialized playbooks to create both our CONTOSO.com domain controller and create a basic member file server to the domain.