Ansible — Windows Server

Még nem írtam az Ansible-ről, de egy hasznos kis tool. Főleg automatizációs, konfigurációs célokra használtam eddig. Az OpenSource verziója szerencsére teljesen szabadon (ingyenesen) használható. Csak a Tower licensz köteles. De ez eddig nem okozott nagy problémát :)
További infó: https://www.ansible.com/get-started

Akkor bele a közepébe…
Linuxon nagyon jól használható az Ansible. Az új 16.04-es Ubuntu-ban (Xenial) már a 2.0-s változata van. A régiekben azért még az 1.x volt igen vegyesen, de külső repo-val persze az újabb is felrakható volt.
Ami miatt ez a bejegyzés született az a Windows-al való használata.
Jó pár órát túrtam a netet, mire egy normális, egyszerű és viszonylag átlátható megoldást találtam a problémámra.
Hyper-V illetve Windows host-okat szerettem volna egy Linux szerverről ansible segítségével irányítani ill. konfigurálni. Például Hyper-V virtuális gépeket létrehozni, törölni, menteni, stb… stb… de innentől már nincsenek határok :)
A Windows-t az Ansible 1.9-es verzójától tudja vezérelni (ha jól láttam). Ettől kezdve képes WinRM-en keresztül PowerShell vagy szimpla CMD parancsokat kiadva vezérelni a Windows Host-ot illetve host-okat.

Akkor jöjjön a megoldás.

Windows

A Windows szervert a szokásos módon kell telepíteni. Next-next-finish, vagy ahogy szimpatikus.
A tesztemnél egy Hyper-V Core-t telepítettem VirtualBox-ban 2 NIC-el. (NAT és Host-Only)
A Hyper-V Server a Host-Only interface-én a 192.168.56.102 -es IP-t kapta DHCP-n.

Telepítés utáni teendők:

Jelen esetben csak ellenőrizni kellett, hogy minden NIC-en engedélyezve legyen a DHCP. A többi (gépnév, remote desktop) most nem volt fontos. Persze aktív kiszolgáló esetében már ezekkel is foglalkozni kell :)

Át kell állítani a network kapcsolatot public-ról lehetőleg privátra:

Get-NetConnectionProfile
Set-NetConnectionProfile -Name "Unidentified network" -NetworkCategory Private
Set-NetConnectionProfile -Name "network" -NetworkCategory Private

Tűzfal kikapcsolás:

netsh advfirewall set allprofiles state off

Igen, ez nem a legszebb és legbiztonságosabb megoldás, de a legegyszerűbb :)

WinRM service indítás:

Set-Service -StartupType Automatic WinRM
Start-Service WinRM

Ezen a Windows Remote Management Service-en keresztül kapcsolódik és adja ki majd a parancsait az Ansible a Linux szerverről.

Egyéb Powershell config:

Enable-PSRemoting -Force
Set-ExecutionPolicy RemoteSigned

Egyéb winrm config:

winrm get winrm/config
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
winrm set winrm/config/service/auth '@{Basic="true"}'
winrm set winrm/config/client '@{AllowUnencrypted="true"}'

WinRM service beállítása, hogy az Ansible tudjon hozzá csatlakozni.

Igen, egyik beállítás sem a legbiztonságosabb, de most a működés volt a cél.

Linux — Ansible Host

Egy Ubuntu 16.04-et (Xenial) használtam a tesztben.
Szintén 2db NIC-el (NAT és Host-Only). Mindkettő szintén DHCP-n kapta az IP-t a VirtualBox-ban.

Ansible telepítés:

apt-get update
apt-get install -y ansible python-winrm

A python-winrm és függőségeire a Windows vezérlése miatt van szükség.

Ansible config:

/etc/ansible/hosts:


[win]
192.168.56.102

Ebben a fájlban soroltam fel a “win” csoport tagjaként a Hyper-V host-omat.

/etc/ansible/group_vars/win.yml:

ansible_ssh_user: Administrator
ansible_ssh_pass: MySuperSecretPassword
ansible_ssh_port: 5985
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

Itt a változókat tartalmazó fájlnév és mappa nagyon fontos!
Ennek a fájlnak neve, tartalma és a helye (mappa) a kulcs.
Ezt a változókat/paramétereket tartalmazó “win.yml” fájlt fogja felolvasni az Ansible minden a “win” csoportra érvényesülő playbook futásakor.
Mivel a Windows elérés nem SSH alapú, így a fenti paraméterekkel (user, password,port) fog a Win Server-hez csatlakozni az Ansible.

/srv/ansible/win.playbook:

- hosts: win
tasks:
- name: ipconfig
raw: ipconfig > c:\users\administrator\desktop\ipconfig.txt
- name: get-vm
raw: get-vm
register: vmlist
- name: print
debug:
msg: "MyVMs: {{ vmlist.stdout }}"

Néhány alap dolgot elvégző playbook fájl.
Az Ansible YAML alapú fájlokat használ. Ezekben a szöveget SPACE-el kell identálni!

Playbook futtatás:

ansible-playbook /srv/ansible/win.playbook

Példa kimenet:

PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [192.168.56.102]
TASK [ipconfig] ****************************************************************
ok: [192.168.56.102]
TASK [get-vm] ******************************************************************
ok: [192.168.56.102]
TASK [print] *******************************************************************
ok: [192.168.56.102] => {
"msg": "MyVMs: \r\nName State CPUUsage(%) MemoryAssigned(M) Uptime Status \r\n---- ----- ----------- ----------------- ------ ------ \r\ntestvm1 Off 0 0 00:00:00 Operating normally\r\n\r\n\r\n"
}
PLAY RECAP *********************************************************************
192.168.56.102 : ok=4 changed=0 unreachable=0 failed=0
Ennyi.
Nem látszik bonyolultnak, de nem volt egyszerű kitalálni a hiányzó parancsokat, illetve összerakni ezt a config-ot a sokszor túlbonyolított vagy elavult blog bejegyzésekből illetve kézikönyvekből...
Forrás:
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.