# Variables you can override: # enable_hyperv: true|false (default false) # install_docker: true|false (default true) - name: Ensure Windows Containers feature is installed ansible.windows.win_feature: name: Containers state: present include_management_tools: yes register: containers_feature - name: Ensure Hyper-V (optional, needed for some isolation modes) ansible.windows.win_feature: name: Hyper-V state: present include_management_tools: yes register: hyperv_feature when: enable_hyperv | default(false) - name: Reboot if required after feature installation ansible.windows.win_reboot: msg: "Rebooting after enabling Containers/Hyper-V features" pre_reboot_delay: 15 when: containers_feature.reboot_required or (enable_hyperv | default(false) and hyperv_feature.reboot_required | default(false)) - name: Ensure NuGet provider is available (for PowerShell packages) ansible.windows.win_powershell: script: | if (-not (Get-PackageProvider -Name NuGet -ErrorAction SilentlyContinue)) { Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force Write-Output "installed" } else { Write-Output "present" } register: nuget_provider changed_when: "'installed' in nuget_provider.stdout" - name: Ensure DockerMsftProvider module (package provider) is installed ansible.windows.win_psmodule: name: DockerMsftProvider state: present when: install_docker | default(true) - name: Install/Update Docker (Mirantis / Microsoft packaged) runtime ansible.windows.win_powershell: script: | $pkg = Get-Package -Name docker -ErrorAction SilentlyContinue if (-not $pkg) { Install-Package -Name docker -ProviderName DockerMsftProvider -Force Write-Output "installed" } else { Write-Output "present" } register: docker_pkg changed_when: "'installed' in docker_pkg.stdout" when: install_docker | default(true) - name: Ensure Docker service is enabled and running ansible.windows.win_service: name: docker start_mode: auto state: started when: install_docker | default(true) - name: (Optional) Pull a test Windows base image ansible.windows.win_powershell: script: | docker image inspect mcr.microsoft.com/windows/nanoserver:ltsc2022 2>$null if ($LASTEXITCODE -ne 0) { docker pull mcr.microsoft.com/windows/nanoserver:ltsc2022 Write-Output "pulled" } else { Write-Output "present" } register: base_image changed_when: "'pulled' in base_image.stdout" when: install_docker | default(true) - name: Debug summary ansible.builtin.debug: msg: containers_feature_changed: "{{ containers_feature.changed }}" hyperv_feature_changed: "{{ (hyperv_feature.changed if (enable_hyperv | default(false)) else false) | default(false) }}" docker_installed_changed: "{{ (docker_pkg.changed if (install_docker | default(true)) else false) | default(false) }}"