Pokażę ci kilka operacji, które administrator może wykonać na zdalnym systemie Windows za pomocą ansible-playbook.
Ansible jest obecnie jednym z najczęściej używanych narzędzi DevOps na rynku. Zawiera kilka modułów systemu Windows, które służą do konfigurowania i zarządzania serwerem Windows. Zakładam, że masz już zainstalowany Ansible w systemie Windows, z którego chcesz zarządzać serwerami Windows.
Poniżej przedstawiono niektóre z najczęściej używanych zadań wykonywanych codziennie przez administratorów systemu Windows. Zdziwisz się, jak łatwo jest zarządzać systemem Windows za pomocą Ansible.
Adres IP mojego kontrolera Ansible Windows to 192.168.0.106, a adres IP mojego zdalnego systemu Windows to 192.168.0.102. Zanim zaczniesz, upewnij się, że uruchomiłeś moduł win_ping, aby sprawdzić, czy możesz połączyć się ze zdalnym serwerem Windows, czy nie.
[email protected] ~ $ ansible win -m win_ping 192.168.0.102 | SUCCESS => { "changed": false, "ping": "pong" }
Moje połączenie ze zdalnym hostem powiodło się.
Zacznijmy więc od Poradników Ansible…
Spis treści:
Kopiowanie plików
win_copy to moduł ansible, który kopiuje plik z lokalnego serwera do zdalnego hosta Windows. Użyję tego modułu do skopiowania pojedynczego pliku PDF.
Użyj poniższego kodu YAML, podaj ścieżki źródłowe i docelowe.
[email protected] ~ $ vi copy.yml --- - hosts: win tasks: - name: Copy File win_copy: src: C:output.pdf dest: C:ansible_examples remote_src: yes
Uruchom ansible-playbook dla win_copy.
[email protected] ~ $ ansible-playbook copy.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Copy File] ***************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Plik został pomyślnie skopiowany do lokalizacji docelowej w zdalnym systemie Windows.
Zainstaluj/Odinstaluj MSI
Aby zainstalować aplikację przy użyciu pliku MSI, musisz użyć win_get_url, aby podać ścieżkę do pliku MSI do pobrania, a następnie użyć modułu win_package, aby go zainstalować. Stan obecny oznacza, że na komputerze zostanie zainstalowany plik MSI, a aplikacja jest w stanie obecnym.
Tutaj instaluję Apache.
Kod YAML do użycia:
[email protected] ~ $ vi msi.yml --- - name: Installing Apache MSI hosts: win tasks: - name: Download the Apache installer win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi - name: Install MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi state: present
Uruchom ansible-playbook, aby zainstalować za pomocą MSI.
[email protected] ~ $ ansible-playbook msi.yml PLAY [Installing Apache MSI] ***************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Download the Apache installer] ********************************************************************************************************* changed: [192.168.0.102] TASK [Install MSI] *************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Teraz przejdź do systemu Windows i sprawdź, czy aplikacja Apache została pomyślnie zainstalowana.
C:Usersnewsblog.pl>cd C:Program Files (x86)Apache Software FoundationApache2.2bin C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v Server version: Apache/2.2.25 (Win32) Server built: Jul 10 2013 01:52:12
Możesz także instalować aplikacje za pomocą MSI z argumentami. Poniżej znajduje się ten sam przykład co powyżej, ale zamiast stanu używamy argumentu install do zainstalowania Apache.
Kod YAML do użycia:
--- - name: Installing Apache MSI hosts: win tasks: - name: Download the Apache installer win_get_url: url: https://archive.apache.org/dist/httpd/binaries/win32/httpd-2.2.25-win32-x86-no_ssl.msi dest: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi - name: Install MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi arguments: - /install - /passive - /norestart
Aby odinstalować aplikację za pomocą pliku MSI, musisz użyć modułu win_package. Stan nieobecny oznacza, że aplikacja zostanie odinstalowana przy użyciu pliku MSI.
Tutaj odinstalowuję Apache.
[email protected] ~ $ vi uninstall_msi.yml --- - name: UnInstalling Apache MSI hosts: win tasks: - name: UnInstall MSI win_package: path: C:ansible_exampleshttpd-2.2.25-win32-x86-no_ssl.msi state: absent
Uruchom ansible-playbook, aby odinstalować za pomocą MSI.
[email protected] ~ $ ansible-playbook uninstall_msi.yml PLAY [UnInstalling Apache MSI] ***************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [UnInstall MSI] ************************************************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Teraz, jeśli sprawdzę wersję Apache, otrzymam poniższe dane wyjściowe, gdy aplikacja zostanie odinstalowana.
C:Program Files (x86)Apache Software FoundationApache2.2bin>httpd -v 'httpd' is not recognized as an internal or external command, operable program or batch file.
Odinstaluj oprogramowanie (.EXE)
Możesz także odinstalować oprogramowanie za pomocą pliku .exe, używając identyfikatora produktu tego oprogramowania.
[email protected] ~ $ vi uninstall.yml --- - hosts: win tasks: - name: Uninstall 7-Zip from the exe win_package: path: C:Program Files7-ZipUninstall.exe product_id: 7-Zip arguments: /S state: absent
Uruchom ansible-playbook, aby odinstalować 7-Zip.
[email protected] ~ $ ansible-playbook uninstall.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Uninstall 7-Zip from the exe] *********************************************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP ************************************************************************************************************************************************************************************* 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Zatrzymaj/uruchom/uruchom ponownie usługi systemu Windows
Moduł win_service ansible służy do uruchamiania, zatrzymywania lub ponownego uruchamiania usługi. Tutaj pokażę, jak zatrzymać usługę tomcat.
Musisz podać nazwę usługi w pliku YAML i ustawić stan na zatrzymanie.
[email protected] ~ $ vi service.yml --- - hosts: win tasks: - name: Stop service Tomcat win_service: name: Tomcat8 state: stopped
Uruchom ansible-playbook, aby zatrzymać usługę tomcat.
[email protected] ~ $ ansible-playbook service.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Stop service Tomcat] **************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Jeśli sprawdzisz usługę tomcat w systemie Windows, jest teraz w stanie zatrzymania.
Możesz zdefiniować stan do uruchomienia, ponownego uruchomienia lub wstrzymania, aby zmienić stan usługi.
Zbieranie faktów
Używając modułu win_disk_facts ansible, możesz pobrać wszystkie informacje o dysku hosta docelowego.
[email protected] ~ $ vi disk.yml --- - hosts: win tasks: - name: Get disk facts win_disk_facts: - name: Output first disk size debug: var: ansible_facts.disks[0].size - name: Convert first system disk into various formats debug: msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}' vars: # Get first system disk disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}' # Show disk size in Gibibytes disksize_gib_human: '{{ disk.size|filesizeformat(true) }}' disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB'
Uruchom ansible-playbook, aby uzyskać informacje o dysku.
[email protected] ~ $ ansible-playbook disk.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Get disk facts] ************************************************************************************************************************ ok: [192.168.0.102] TASK [Output first disk size] **************************************************************************************************************** ok: [192.168.0.102] => { "ansible_facts.disks[0].size": "1000204886016" } TASK [Convert first system disk into various formats] **************************************************************************************** ok: [192.168.0.102] => { "msg": "932 GiB vs 931.5 GiB" } PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Korzystając z modułu win_command ansible, możesz wykonywać polecenia na zdalnym hoście i uzyskiwać informacje o procesorze, szczegóły urządzenia i wiele więcej.
[email protected] ~ $ vi check.yml --- - hosts: win tasks: - name: Get disk facts win_command: wmic cpu get caption, deviceid, name, numberofcores, maxclockspeed, status register: usage - debug: msg="{{ usage.stdout }}"
Uruchom ansible-playbook, aby uzyskać informacje o systemie zdalnym.
[email protected] ~ $ ansible-playbook check.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Get facts] ************************************************************************************************************************ changed: [192.168.0.102] TASK [debug] ********************************************************************************************************************************* ok: [192.168.0.102] => { "msg": "Caption DeviceID MaxClockSpeed Name NumberOfCores Status rrnIntel64 Family 6 Model 142 Stepping 9 CPU0 2712 Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz 2 OK rrnrrn" } PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Uruchamianie poleceń
Niezależnie od poleceń, które uruchomisz w oknie, można je uruchomić za pomocą modułu ansible win_command. Wystarczy podać polecenie w pliku YAML. Tutaj po prostu tworzę katalog.
[email protected] ~ $ vi commands.yml --- - hosts: win tasks: - name: run an executable using win_command win_command: whoami.exe - name: run a cmd command win_command: cmd.exe /c mkdir C:test
Uruchom ansible-playbook, aby wykonać operację win_command.
[email protected] ~ $ ansible-playbook commands.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [run an executable using win_command] *************************************************************************************************** changed: [192.168.0.102] TASK [run a cmd command] ********************************************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Zmienne środowiska
System Windows ma wiele zmiennych środowiskowych, na przykład JAVA_HOME. Za pomocą modułu ansible win_environment można dodawać lub modyfikować zmienne środowiskowe w systemie Windows. W tym przykładzie dodaję nową zmienną do listy zmiennych środowiskowych systemu Windows.
[email protected] ~ $ vi env.yml --- - hosts: win tasks: - name: Set an environment variable for all users win_environment: state: present name: NewVariable value: New Value level: machine
Uruchom ansible-playbook, aby dodać zmienną środowiskową na zdalnym komputerze z systemem Windows.
[email protected] ~ $ ansible-playbook env.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Set an environment variable for all users] ********************************************************************************************* changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Przejdź do okna zmiennych środowiskowych; zobaczysz, że nowa zmienna, którą właśnie dodałeś, jest tutaj obecna.
Dodaj/edytuj rejestr
Moduł win_regedit ansible służy do dodawania lub edytowania szczegółów rejestru na zdalnym komputerze z systemem Windows. Musisz podać ścieżkę rejestru i treści do dodania/zaktualizowania. Tutaj tworzę nowy wpis rejestru newsblog.pl w ścieżce HKLM:SOFTWARE, a następnie dodaję nazwę i dane do tego rejestru.
[email protected] ~ $ vi registry.yml --- - hosts: win tasks: - name: Creating a registry win_regedit: path: HKLM:SOFTWAREnewsblog.pl - name: Modifying a registry, adding name and data win_regedit: path: HKLM:SOFTWAREnewsblog.pl name: Geek data: Flare
Uruchom ansible-playbook, aby dodać rejestr.
[email protected] ~ $ ansible-playbook registry.yml PLAY [win] *********************************************************************************************************************************** TASK [Gathering Facts] *********************************************************************************************************************** ok: [192.168.0.102] TASK [Creating a registry] ******************************************************************************************************************* changed: [192.168.0.102] TASK [Modifying a registry, adding name and data] ******************************************************************************************** changed: [192.168.0.102] PLAY RECAP *********************************************************************************************************************************** 192.168.0.102 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Jeśli przejdziesz do Edytora rejestru w systemie zdalnym, zobaczysz, że ten rejestr został pomyślnie dodany z parametrami Nazwa i Dane.
Usuń dziennik
Moduł win_eventlog ansible służy do dodawania, czyszczenia lub usuwania dzienników zdarzeń systemu Windows z systemu Windows.
Przejdź do Windows Powershell i wyświetl listę dzienników zdarzeń obecnych na zdalnym komputerze z systemem Windows.
PS C:Usersnewsblog.pl> Get-EventLog -List Max(K) Retain OverflowAction Entries Log ------ ------ -------------- ------- --- 20,480 0 OverwriteAsNeeded 33,549 Application 20,480 0 OverwriteAsNeeded 0 HardwareEvents 512 7 OverwriteOlder 20 Internet Explorer 20,480 0 OverwriteAsNeeded 0 Key Management Service 128 0 OverwriteAsNeeded 190 OAlerts Security 20,480 0 OverwriteAsNeeded 44,828 System 15,360 0 OverwriteAsNeeded 3,662 Windows PowerShell
Teraz pokażę, jak usunąć logi ze wszystkich źródeł dla Internet Explorera.
[email protected] ~ $ vi log.yml --- - hosts: win tasks: - name: Remove Internet Explorer Logs win_eventlog: name: Internet Explorer state: absent
Uruchom ansible-playbook, aby usunąć program Internet Explorer ze zdalnego komputera z systemem Windows.
[email protected] ~ $ ansible-playbook log.yml PLAY [win] ************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************* ok: [192.168.0.102] TASK [Remove Internet Explorer Logs] ********************************************************************************************************************************************** changed: [192.168.0.102] PLAY RECAP ************************************************************************************************************************************************************************************* 192.168.0.102 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Teraz, jeśli ponownie wyświetlisz dzienniki zdarzeń, zobaczysz, że dzienniki Internet Explorera zostały usunięte.
PS C:Usersnewsblog.pl> Get-EventLog -List Max(K) Retain OverflowAction Entries Log ------ ------ -------------- ------- --- 20,480 0 OverwriteAsNeeded 33,549 Application 20,480 0 OverwriteAsNeeded 0 HardwareEvents 20,480 0 OverwriteAsNeeded 0 Key Management Service 128 0 OverwriteAsNeeded 190 OAlerts Security 20,480 0 OverwriteAsNeeded 44,835 System 15,360 0 OverwriteAsNeeded 56 Windows PowerShell
Tak więc chodziło o podręczniki Ansible, które można wykorzystać do zdalnej administracji systemem Windows. Śmiało wypróbuj te podręczniki. Możesz też spróbować innych Moduły Ansible Windows do dyspozycji.