אף על פי ש- Ansible מכונה לניהול צומתי Linux באמצעות SSH, הידעת ש-Angible עובדת גם על Windows? באמצעות Windows Remote Management (WinRM), ניתן לנהל ביעילות את כל צומתי ה-Windows שלך עם Ansible!
עם Ansible על Windows, ניתן לבצע משימות כגון התקנת תיקונים, ניהול שרתי Windows, ביצוע סקריפטים של PowerShell ועוד.
במדריך זה, תלמד איך להגדיר את הצומת הראשון שלך ב-Windows כדי לנהל אותו עם Ansible וכיצד להריץ פקודות ופלייבוקים עליו.
דרישות קדם
אם ברצונך לעקוב אחרי המדריך, נא לוודא שיש לך את הדברים הבאים לפני התחלת הפעולה:
- מארח בקרת Ansible – במדריך זה נעשה שימוש ב- Ansible v2.9.18 על מחשב Ubuntu 18.04.5 LTS עם כתובת IP של 10.111.4.53. שים לב ש-Windows אינו נתמך כצומת בקרה, רק כצומת ניהול.
- התקנת Python על מארח בקרת ה-Ansible – במדריך זה נעשה שימוש ב-Python v2, אך גרסה 3 צריכה לעבוד באופן דומה.
- התקנת חבילת pip על מארח הבקרת של Ansible.
- A Windows 2012 R2 or greater computer for Ansible to manage – This tutorial will use two Windows Server 2012 R2 Standard machines as remote nodes with IP addresses of 52.242.251.213 and 10.111.4.106.
- A Windows workstation – This tutorial will perform some basic pre-configuration to the node that Windows will manage with Ansible and will require you to sitting at a Windows workstation.
- השרת של Windows שברצונך לנהל צריך להיות עם הפעלת PowerShell Remoting
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
הגדרת ספק ה- WinRM על Windows
לפני ש־Ansible יכולה לתקשר עם צומת Windows רחוקה, עליה להיות מסוגלת להתחבר אליה. היא עושה זאת דרך פרוטוקול ה־WinRM של מיקרוסופט. WinRM הוא אותו פרוטוקול שמשתמש PowerShell Remoting כדי להפעיל פקודות רחוקות מתוך PowerShell.
עד לכתיבת הטקסט הזה, Ansible אכן תומך ב־SSH כפרוטוקול לניהול, אך זו תכונה ניסיונית כרגע.
כדי ש־Ansible תשתמש ב־WinRM לתקשורת עם צומת ה־Windows, עליך להגדיר את WinRM. לכך, Ansible מספקת תסריט PowerShell שמגדיר אפשרויות שונות של WinRM.
אף על פי ש־התסריט PowerShell שמספקת Red Hat להגדרת WinRM עבר בדיקות והוא בטוח, כדאי לקרוא אותו ולהבין, ברמה גבוהה, מה הוא עושה.
המשימה הראשונה שלך תהיה להוריד את סקריפט ההגדרה ולהריץ את Ansible על צומת ה־Windows. כדי לעשות זאת, בהנחה שכבר הפעלת PowerShell Remoting במחשב היעד שלך ואתה נמצא בעמדת עבודה של Windows:
הורד את הקובץ הסקריפט ConfigureRemotingForAnsible.ps1 למחשב המקומי שלך ב-Windows. בקר ב-~\Downloads ושמור את הקובץ שם.
הרץ את סקריפט התצורה על צומת ה-Windows שבה ינהל ה- Ansible באמצעות הפקודה Invoke-Command
. הפקודה הבאה תפעיל את הפקודה על שני המכונות הדמו של המדריך ותבקש ממך את הסיסמה עבור חשבון המנהל המקומי adminuser על צמתי ה-Windows.
כברירת מחדל, סקריפט התצורה יגדיר את WinRM לאימות HTTP בסיסי. אם תרצה שה- Ansible ישתמש בחיבור מאובטח יותר, למד איך להגדיר את WinRM על פרוטוקול HTTPS עבור Ansible.
הגדרת הבקר של ה- Ansible על Windows
עכשיו שצמת ה-Windows מוכן ל- Ansible, בואו נגדיר את בקר ה- Ansible כדי להראות ל- Ansible כיצד לתקשר איתו.
1. התחבר לשרת הבקר שלך של ה- Ansible באמצעות SSH באמצעות לקוח SSH האהוב עליך.
2. התקן את מודול הפייתון pywinrm. מודול הפייתון pywinrm נדרש עבור ה- Ansible על Windows כדי לתקשר עם מארחים באמצעות פרוטוקול WinRM.
הגדר את צומתי ה- Windows המרוחקים בקובץ אינוונטורי של Ansible. אינוונטורי של Ansible הוא אוסף של מארחים מרוחקים המוגדרים בקובץ המזהה אותם לפי שמם המארח או כתובת ה-IP שלהם. לאחר שהוגדרו, ניתן לגרום לאינוונטוריים של Ansible לשימוש בפקודות ובהוראות משחק, כפי שתראו בקרוב.
קובץ האינוונטורי המוגדר כברירת מחדל של Ansible נמצא בתיקיית /etc/ansible/hosts.
קובץ האינוונטורי הדוגמא שמתואר מטה יוצר קבוצת windows
המארח המכילה את כל הצמתים של Windows. המדריך משתמש בקבוצת מארחים כאן כדי להקל על הכוונון לכל צמתי Windows (אם יש יותר מאחד) כאשר יש צורך.
4. לאחר מכן, הגדר מספר משתנים נדרשים ש- Ansible תשתמש בהתחברות למארחי Windows בקובץ האינוונטורי כקבוצת windows:vars
.
5. כעת, השתמש ב־win_ping מודול של Ansible כדי לבצע בדיקת חיבור פשוטה למארחים בתוך קבוצת המארחים windows
שהוגדרה בשלב מס' 3.
לאחר ביצוע הפקודה, תראה שמתחת יש החזר בצבע ירוק עם הודעת SUCCESS המציינת ניסיון הפינג המוצלח.

הפלט מאשר כי מארח הבקרת של Ansible יכול לתקשר בהצלחה עם המארח המרוחק של Windows דרך WinRM.
הרצת פקודות Ad-hoc על מארחי Windows
בנקודה זו, אתה מוכן לגמרי כדי ש־Ansible יתחיל לשלוט על הצמתים שלך ב־Windows. בואו נבדוק זאת על ידי הרצת פקודת ad-hoc על הצמתים של Windows כדי לשנות אותם. פקודות ad-hoc הן נהדרות כאשר יש צורך להריץ פקודה פשוטה על צמתים מבלי ליצור קוד תסריטי playbook.
בואו נדגים פקודות ad-hoc על ידי התקנת תכונת Windows על הצמתים של Windows המוגדרים בקובץ האחסון. לעשות זאת, נניח שאתה עדיין מחובר באמצעות SSH אל צומת הבקרה שלך של Ansible:
1. במקום המודול win_ping הפעם, קראו למודול win_feature (-m
), והעבירו לו שני ארגומנטים (-a
) של name
ו־state
המציינים את שם התכונה של Windows והמצב שבו אתם רוצים שיהיה.
כאשר אתה מפעיל את הפקודה למעלה, אם כל התהליך יעבוד בהצלחה, אנסיבל צריך להתחבר לכל הצומת בקבוצת המארחים windows
ולהריץ את הפקודה win_feature על כל אחת מהן, בודק ואם זה לא נמצא, מתקין את תכונת ה־Telnet-Client
של Windows.

2. אנסיבל מציגה הצלחה, אך כדי לוודא, התחברו ידנית לצמתי Windows עם PowerShell ווודאו שתכונת הלקוח Telnet מותקנת כעת. בתחנת העבודה המקומית שלך ב-Windows, הרץ את Invoke-Command
כדי להריץ את הפקודה של PowerShell Get-WindowsFeature
על כל מחשב Windows.
בנקודה זו, אתה יכול להריץ כל מודול Windows שתרצה כפקודות עקרוניות!
יצירה והפעלה של פלייבוקים של אנסיבל על Windows
פעם שתלמד את אמנת ההרצה של פקודות ad-hoc על נודים מנוהלים ב-Windows, המשימה הבאה שלך היא ליצור ולהריץ פלייבוקים. פלייבוק ב- Ansible משלב פקודות למקום אחד ומאפשר לך לכתוב לוגיקה מורכבת לביצוע תרחישי אוטומציה מורכבים.
הרצת פקודות מרחוק באמצעות יחידת win_command
בהנחה שאתה עדיין מחובר למארח שלך של בקרת Ansible:
1. צור תיקייה תחת ספריית הבית שלך בשם ansible-windows-demo ושנה אליה. תיקייה זו תחזיק את הפלייבוק שלך.
2. פתח את עורך הטקסט האהוב עליך וצור ושמור קובץ בשם ansible-windows.yml בתיקייה ~/ansible-windows-demo.
פלייבוקים ב-Ansible נכתבים ב-YAML
3. עתה, העתק את הפלייבוק הבא לקובץ ansible-windows.yml כדי ליצור משימה יחידה. פלייבוק זה יפעל את הפקודה של Windows netstat באמצעות יחידת ה- Ansible של Windows, win_command על כל המארחים בתוך קבוצת המארחים windows
.
המודול win_command מבצע פקודות על מארח מרוחק של Windows. הוא אינו מאפשר פקודות הכוללות משתנים כגון תווים מיוחדים, שורת השבת, סימן הגדול מאשר, וכו'.
4. להפעיל את playbook ansible-windows.yml, שמבצע את המשימה על המארח המרוחק על ידי הרצת הפקודה הבאה.
אם הכל הלך כראוי, תראה פלט דומה למה שמופיע למטה.

הרצת פקודות PowerShell מרחוק עם מודול win_shell
יצרת playbook כדי להפעיל פקודת cmd.exe מרוחקת (netstat
) על צמתי Windows מנוהלים בדוגמה הקודמת. נכין כעת לרמה קצת גבוהה ונריץ פקודות PowerShell באמצעות המודול win_shell.
כברירת מחדל, המודול win_shell רץ בסביבת PowerShell על מארח Windows
על המחשב האישי שלך של Windows:
1. ראשית, פתח את עורך הטקסט האהוב עליך בתחנת העבודה המקומית של Windows וצור סקריפט של PowerShell לדוגמה והעתק את הקוד הבא אליו, שמור אותו כ־one.ps1. המדריך ישמור את הסקריפט ב־~\one.ps1.
הקוד למטה יוצר קובץ טקסט ריק בשם test2.txt בתיקייה C:\temp.
2. העתק את סקריפט ה־one.ps1 לצמתי ה-Windows שלך באמצעות השיטה שאתה מעדיף. המדריך יניח שהעתקת את סקריפט ה־one.ps1 לתיקיית C:\Temp בכל צומת Windows.
3. לאחר שהסקריפט של PowerShell לדוגמה נמצא על צומת ה-Windows, התחבר למארח שלך של אנסיבל ופתח שוב את עורך הטקסט האהוב עליך. הפעם, צור ושמור פלייבוק נוסף בשם ansible-windows-shell.yml באותו התיקייה ~/ansible-windows-demo.
4. העתק והדבק את הפלייבוק הבא לקובץ ansible-windows-shell.yml. פלייבוק זה יריץ שני משימות להדגמת המודול win_shell. הוא מפעיל את סקריפט ה-PowerShell שהועתק בשלב מספר 2 ומכניס את קוד ה-PowerShell ישירות לתוך הפלייבוק כדי להדגים שהסקריפט אינו נדרש כלל.
כדי להעביר מספר שורות של קוד PowerShell למודול ה־win_shell, השתמש בתו האנכי
|
.
5. כעת, קרא את הפלייבוק השני ansible-windows-shell.yml, אשר מבצע פעולה על המארח הרחוק אך באמצעות PowerShell.

6. אם נדרש, בעמדת העבודה המקומית שלך ב-Windows, אמת את הפלייבוק שבוצע את התסריט הקיים ואת קוד ה-PowerShell בפלייבוק.
אם הפלייבוק של Ansible רץ בהצלחה, PowerShell צריך להחזיר שני True
הצהרות המציינות כי הקבצים קיימים כעת.
מסקנה
במדריך זה, למדת כיצד להגדיר את הצומת הניהול הראשונה שלך ב-Windows באמצעות Ansible. אף על פי ש- Ansible ידועה במקור ככלי Linux, ניתן להשתמש בה בקלות גם למערכת הפעולה Windows!
אילו פלייבוקים ו-מודולי Windows תתחילו להשתמש בהם כדי לנהל את Windows עם Ansible?