9 Παράδειγμα Ansible Playbooks για διαχείριση των Windows

Θα σας δείξω αρκετές λειτουργίες που μπορεί να εκτελέσει ένας διαχειριστής σε ένα απομακρυσμένο σύστημα Windows χρησιμοποιώντας το ansible-playbook.

Το Ansible είναι ένα από τα πιο χρησιμοποιούμενα εργαλεία DevOps στην αγορά σήμερα. Παρέχει μια δέσμη λειτουργικών μονάδων των Windows που χρησιμοποιούνται για τη διαμόρφωση και τη διαχείριση του διακομιστή Windows. Υποθέτω ότι έχετε ήδη εγκατεστημένο το Ansible στα Windows από όπου θέλετε να διαχειριστείτε τους διακομιστές των Windows.

Ακολουθούν ορισμένες από τις εργασίες που χρησιμοποιούνται συνήθως από τους διαχειριστές των Windows σε καθημερινή βάση. Θα εκπλαγείτε όταν δείτε πόσο εύκολη διαχειρίζονται τα Windows χρησιμοποιώντας το Ansible.

Η διεύθυνση IP του μηχανήματος ελεγκτή Ansible Windows είναι 192.168.0.106 και η διεύθυνση IP του απομακρυσμένου συστήματος Windows μου είναι 192.168.0.102. Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε εκτελέσει μια ενότητα win_ping για να ελέγξετε εάν μπορείτε να συνδεθείτε με τον απομακρυσμένο διακομιστή των Windows ή όχι.

[email protected] ~
$ ansible win -m win_ping
192.168.0.102 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Η σύνδεσή μου με έναν απομακρυσμένο κεντρικό υπολογιστή είναι επιτυχής.

Λοιπόν, ας ξεκινήσουμε με τα Ansible Playbooks…

Αντιγραφή Αρχείων

Το win_copy είναι μια λειτουργική μονάδα που αντιγράφει ένα αρχείο από τον τοπικό διακομιστή σε έναν απομακρυσμένο κεντρικό υπολογιστή των Windows. Θα χρησιμοποιήσω αυτήν την ενότητα για να αντιγράψω ένα μόνο PDF.

Χρησιμοποιήστε τον παρακάτω κώδικα YAML, δώστε τις διαδρομές προέλευσης και προορισμού.

[email protected] ~
$ vi copy.yml
---

- hosts: win

  tasks:

  - name: Copy File

    win_copy:

      src: C:output.pdf

      dest: C:ansible_examples
     
      remote_src: yes

Εκτελέστε το ansible-playbook για 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

Το αρχείο αντιγράφηκε με επιτυχία στη θέση προορισμού σε ένα απομακρυσμένο σύστημα Windows.

Εγκατάσταση/Απεγκατάσταση MSI

Για να εγκαταστήσετε μια εφαρμογή χρησιμοποιώντας το αρχείο MSI, πρέπει να χρησιμοποιήσετε το win_get_url για να αναφέρετε τη διαδρομή του αρχείου MSI προς λήψη και, στη συνέχεια, να χρησιμοποιήσετε τη λειτουργική μονάδα win_package για να το εγκαταστήσετε. Η παρούσα κατάσταση σημαίνει ότι το MSI θα εγκατασταθεί στο μηχάνημα και η εφαρμογή βρίσκεται στην παρούσα κατάσταση.

Εδώ, εγκαθιστώ το Apache.

Κωδικός YAML που θα χρησιμοποιηθεί:

[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

Εκτελέστε το ansible-playbook για εγκατάσταση χρησιμοποιώντας το 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

Τώρα, μεταβείτε στο σύστημα των Windows και ελέγξτε εάν η εφαρμογή apache εγκαταστάθηκε με επιτυχία.

C:Usersgrtechpc.org>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

Μπορείτε επίσης να εγκαταστήσετε εφαρμογές χρησιμοποιώντας MSI με ορίσματα. Παρακάτω είναι το ίδιο παράδειγμα με το παραπάνω, αλλά αντί για κατάσταση, χρησιμοποιούμε ένα όρισμα εγκατάστασης για την εγκατάσταση του apache.

  Η ενημέρωση Google Camera v2.2 φέρνει χρονόμετρο, λειτουργίες πανοράματος και αναλογία διαστάσεων

Κωδικός YAML που θα χρησιμοποιηθεί:

---

- 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

Για να απεγκαταστήσετε μια εφαρμογή χρησιμοποιώντας το αρχείο MSI, πρέπει να χρησιμοποιήσετε τη λειτουργική μονάδα win_package. Η κατάσταση απουσία σημαίνει ότι η εφαρμογή θα απεγκατασταθεί χρησιμοποιώντας το αρχείο MSI.

Εδώ, απεγκαθιστώ το 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

Εκτελέστε το ansible-playbook για απεγκατάσταση χρησιμοποιώντας το 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

Τώρα, αν ελέγξω την έκδοση του apache, θα λάβω την παρακάτω έξοδο καθώς απεγκαταστάθηκε η εφαρμογή.

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.

Απεγκατάσταση λογισμικού (.EXE)

Μπορείτε επίσης να απεγκαταστήσετε λογισμικό με αρχείο .exe χρησιμοποιώντας το αναγνωριστικό προϊόντος αυτού του λογισμικού.

[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

Εκτελέστε το ansible-playbook για να απεγκαταστήσετε το 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

Διακοπή/Έναρξη/Επανεκκίνηση των Υπηρεσιών των Windows

Η μονάδα win_service ansible χρησιμοποιείται για την εκκίνηση, διακοπή ή επανεκκίνηση μιας υπηρεσίας. Εδώ, θα σας δείξω πώς να σταματήσετε την υπηρεσία tomcat.

Πρέπει να αναφέρετε το όνομα της υπηρεσίας στο αρχείο YAML και να ορίσετε την κατάσταση να σταματήσει.

[email protected] ~
$ vi service.yml
---
- hosts: win 

  tasks: 

   - name: Stop service Tomcat

     win_service:

       name: Tomcat8

       state: stopped

Εκτελέστε το ansible-playbook για να σταματήσετε την υπηρεσία 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

Εάν ελέγξετε την υπηρεσία Tomcat στο σύστημα των Windows, είναι πλέον σε κατάσταση διακοπής.

Μπορείτε να ορίσετε την κατάσταση για έναρξη ή επανεκκίνηση ή παύση για να αλλάξετε την κατάσταση της υπηρεσίας.

  Πώς να επαναφέρετε τα προγράμματα οδήγησης στα Windows 10

Συλλογή γεγονότων

Χρησιμοποιώντας τη μονάδα win_disk_facts ansible, μπορείτε να ανακτήσετε όλες τις πληροφορίες δίσκου του κεντρικού υπολογιστή προορισμού.

[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'

Εκτελέστε το ansible-playbook για να λάβετε τις πληροφορίες του δίσκου.

[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

Χρησιμοποιώντας τη μονάδα win_command ansible, μπορείτε να εκτελέσετε εντολές στον απομακρυσμένο κεντρικό υπολογιστή και να λάβετε πληροφορίες CPU, λεπτομέρειες συσκευής και πολλά άλλα.

wdzwd[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 }}"

Εκτελέστε το ansible-playbook για να λάβετε απομακρυσμένες πληροφορίες συστήματος.

[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

Εντολές εκτέλεσης

Όποιες εντολές και αν εκτελείτε σε ένα παράθυρο, μπορούν να εκτελεστούν μέσω της ενότητας ansible win_command. Απλώς πρέπει να καθορίσετε την εντολή στο αρχείο YAML. Εδώ, δημιουργώ απλώς έναν κατάλογο.

[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

Εκτελέστε το ansible-playbook για να εκτελέσετε τη λειτουργία 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

Μεταβλητές Περιβάλλοντος

Ένα σύστημα Windows έχει πολλές μεταβλητές περιβάλλοντος, για παράδειγμα, JAVA_HOME. Χρησιμοποιώντας τη λειτουργική μονάδα win_environment ansible, μπορείτε να προσθέσετε ή να τροποποιήσετε μεταβλητές περιβάλλοντος σε ένα σύστημα Windows. Σε αυτό το παράδειγμα, προσθέτω μια νέα μεταβλητή στη λίστα μεταβλητών περιβάλλοντος των 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

Εκτελέστε το ansible-playbook για να προσθέσετε τη μεταβλητή περιβάλλοντος σε ένα απομακρυσμένο μηχάνημα 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

Μεταβείτε στο παράθυρο μεταβλητών περιβάλλοντος. θα δείτε ότι η νέα μεταβλητή που μόλις προσθέσατε είναι παρούσα εδώ.

  Διορθώστε το Logitech G533 Mic που δεν λειτουργεί στα Windows 10

Προσθήκη/Επεξεργασία μητρώου

Η μονάδα win_regedit ansible χρησιμοποιείται για την προσθήκη ή την επεξεργασία λεπτομερειών μητρώου σε ένα απομακρυσμένο μηχάνημα Windows. Πρέπει να δώσετε τη διαδρομή του μητρώου και του περιεχομένου που θα προστεθεί/ενημερωθεί. Εδώ δημιουργώ μια νέα καταχώρηση μητρώου grtechpc.org μέσα στη διαδρομή HKLM:SOFTWARE και, στη συνέχεια, προσθέτω όνομα και δεδομένα σε αυτό το μητρώο.

[email protected] ~
$ vi registry.yml
---

- hosts: win 

  tasks:

   - name: Creating a registry

     win_regedit:

      path: HKLM:SOFTWAREgrtechpc.org

   - name: Modifying a registry, adding name and data

     win_regedit:

      path: HKLM:SOFTWAREgrtechpc.org

      name: Geek

      data: Flare

Εκτελέστε το ansible-playbook για να προσθέσετε το μητρώο.

[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

Εάν μεταβείτε στον Επεξεργαστή Μητρώου στο απομακρυσμένο σύστημα, μπορείτε να δείτε ότι αυτό το μητρώο έχει προστεθεί με επιτυχία με τις παραμέτρους Όνομα και Δεδομένα.

Διαγραφή αρχείου καταγραφής

Η μονάδα win_eventlog ansible χρησιμοποιείται για την προσθήκη, διαγραφή ή αφαίρεση αρχείων καταγραφής συμβάντων των Windows από το σύστημα των Windows.

Μεταβείτε στο Windows Powershell και καταχωρίστε τα Καταγραφή συμβάντων που υπάρχουν στον απομακρυσμένο υπολογιστή των Windows.

PS C:Usersgrtechpc.org> 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

Τώρα, θα δείξω πώς να αφαιρέσετε αρχεία καταγραφής από όλες τις πηγές για τον Internet Explorer.

[email protected] ~
$ vi log.yml
---
- hosts: win 
  tasks:
   - name: Remove Internet Explorer Logs
     win_eventlog:
      name: Internet Explorer
      state: absent

Εκτελέστε το ansible-playbook για να αφαιρέσετε τον Internet Explorer από το απομακρυσμένο μηχάνημα των 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

Τώρα, εάν καταχωρήσετε ξανά τα αρχεία καταγραφής συμβάντων, θα δείτε ότι τα αρχεία καταγραφής του Internet Explorer έχουν αφαιρεθεί.

PS C:Usersgrtechpc.org> 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

Λοιπόν, όλα αυτά αφορούσαν τα βιβλία παιχνιδιού Ansible, τα οποία μπορούν να χρησιμοποιηθούν για απομακρυσμένη διαχείριση των Windows. Προχωρήστε και δοκιμάστε αυτά τα βιβλία. Μπορείτε επίσης να δοκιμάσετε άλλα Ansible λειτουργικές μονάδες Windows διαθέσιμος.