Loading search data...

Objectif : Instancier rapidement une machine Windows 2019 Server

Le principale objectif est de pouvoir lancer mes playbooks à destination des machines Windows sur ma machine Linux! Il faut donc que je puisse rapidement installer une machine de test Windows 2019 Server.

Vagrant toujours …

J’ai tester plusieurs boxes vagrant permettant d’instancier rapidement une VM en un minimum d’opérations. J’ai fini par prendre celle créé par ruzickap.

Il met régulièrement à jour ses VMS et en propose toute une série :

  • Windows 10
  • Windows Server 2012, 2016, 2019 et 2022
  • Ubuntu 14.04, 18.04 et 20.04

Celle qui m’intéresse ici c’est Windows 2019. Dont voici mon vagrantfile :

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "peru/windows-server-2019-standard-x64-eval"
  config.vm.synced_folder ".", "/vagrant", :disabled => true
  #config.vm.hostname = "test-windows"
  config.vm.provider "libvirt" do |hv|
    hv.cpus = "2"
    hv.memory = "4096"
  end
  config.vm.network "forwarded_port", guest: 443, host: 8443
  config.vm.network "private_network", ip: "192.168.33.10"
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provision-playbook.yml"
  end
end

Quelques explications:

  • Je désactive le partage de dossier config.vm.synced_folder -> false
  • On utilise bien le provider libvirt (lien pour l’installation)
  • 4 Go est un minimun mais comme je dispose que de 8Go sur ma vm Linux je dois faire avec ca.
  • Partage du port 443 et je fixe l’ip qui est directement ajouté à mon fichier /etc/hosts via le plugin vagrant-hostsupdater.
  • Ensuite pour finaliser l’installation j’utilise un playbook Ansible.

Mon playbook Ansible :

Ce playbook ne fait qu’installer et configurer OpenSSH (les explications par là ): J’utilise [chocolatey](https://community.chocolatey.org/), qui grace à son module qui auto-installe choco si est absent, pour installer OpenSSH Server

---
- hosts: all
  gather_facts: no

  tasks:
    - win_chocolatey:
        name: openssh
        state: latest
        package_params: /SSHServerFeature
      register: package
      tags: package

    - name: open port 22 for inbound SSH connections
      win_firewall_rule:
        name: Win32-OpenSSH inbound
        protocol: tcp
        localport: 22
        direction: in
        action: allow
        state: present
        enabled: yes
        profiles: domain,private
      tags: firewall

    - name: start sshd service
      win_service:
        name: sshd
        state: started
        start_mode: delayed
        force: yes
        force_dependent_services: yes
      when: package is changed
      tags: service

    - name: Start ssh-agent service
      win_service:
        name: ssh-agent
        state: started
        start_mode: delayed
        force: yes
        force_dependent_services: yes
      tags: service

    - name: Registry configuration for vagrant
      win_regedit:
        path: HKLM:\SOFTWARE\OpenSSH
        name: '{{ item.name }}'
        data: '{{ item.data|default(None) }}'
        type: "{{ item.type|default('dword') }}"
        state: "{{ item.state|default('present') }}"
      with_items:
      - name: DefaultShell
        type: string
        data: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
      - name: DefaultShellCommandOption
        type: string
        data: /c
        state: absent
      - name: DefaultShellEscapeArguments
        data: 0
        state: absent
      tags: registry

    - win_file:
        path: '%USERPROFILE%/.ssh/'
        state: directory
      tags: key

    - win_copy:
        src: authorized_keys
        dest: '%USERPROFILE%/.ssh/authorized_keys'
      tags: key

    - win_copy:
        src: sshd_config
        dest: 'C:\ProgramData\ssh\'
      tags: key

    - win_service:
        name: sshd
        state: restarted
        force: yes
        force_dependent_services: yes

J’utilise les modules windows suivant (fichier requirements.yml)

collections:
  - name: community.windows
    version: 1.7.0
  - name: ansible.windows
    version: 1.7.3

Pour les installer :

ansible-galaxy collection install -r requirements.yml

Il faut en plus d’Ansible installer le module pip pywinrm :

pip install pywinrm

On teste :

vagrant up

Bringing machine 'default' up with 'libvirt' provider...
==> default: Box 'peru/windows-server-2019-standard-x64-eval' could not be found. Attempting to find and install...
    default: Box Provider: libvirt
    default: Box Version: >= 0
==> default: Loading metadata for box 'peru/windows-server-2019-standard-x64-eval'
    default: URL: https://vagrantcloud.com/peru/windows-server-2019-standard-x64-eval
==> default: Adding box 'peru/windows-server-2019-standard-x64-eval' (v20211001.01) for provider: libvirt
    default: Downloading: https://vagrantcloud.com/peru/boxes/windows-server-2019-standard-x64-eval/versions/20211001.01/providers/libvirt.box
    default: Calculating and comparing box checksum...
==> default: Successfully added box 'peru/windows-server-2019-standard-x64-eval' (v20211001.01) for 'libvirt'!
==> default: Machine booted and ready!
==> default: [vagrant-hostsupdater] Checking for host entries
==> default: Forwarding ports...
==> default: 3389 (guest) => 3389 (host) (adapter eth0)
==> default: 5986 (guest) => 5986 (host) (adapter eth0)
==> default: 5985 (guest) => 5985 (host) (adapter eth0)
==> default: 443 (guest) => 8443 (host) (adapter eth0)
==> default: Configuring and enabling network interfaces...
==> default: Running provisioner: ansible...
    default: Running ansible-playbook...

PLAY [all] *********************************************************************

TASK [win_chocolatey] **********************************************************
changed: [default]
[WARNING]: Chocolatey was missing from this system, so it was installed during
this task run.

TASK [open port {{ opt_openssh_port }} for inbound SSH connections] ************
changed: [default]

TASK [win_service] *************************************************************
changed: [default]

On teste la connexion ssh :

vagrant ssh
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

PS C:\Users\vagrant>

Récupérons la conf ssh de vagrant pour l’ajouter dans la config ssh :

vagrant ssh-config >> ~/.ssh/config

dont le contenu est :

Host default
  HostName 192.168.121.252
  User vagrant
  Port 22
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /home/vagrant/.vagrant.d/insecure_private_key
  IdentitiesOnly yes
  LogLevel FATAL

On créé un fichier d’inventaire:

``ìni [all] default [all:vars] ansible_shell_type=powershell


On teste ansible :

```bash
ansible -m win_ping -i hosts all
default | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Objectif atteint !

Si vous voulez plus de tutorials Ansible je vous renvoie sur le billet de l'introduction à ansible

Mots clés :

devops ansible tutorials infra as code formation ansible

Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur Ko-Fi. Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne nous coûte plus cher, via ce lien. Je vous remercie de votre soutien