אפילו ש-Ansible ידועה בניהול צמתי Linux באמצעות SSH, האם את/ה יודע/ת שה-Ansible עובדת גם בווינדוס? באמצעות Windows Remote Management (WinRM), ה-Ansible יכולה לנהל ביעילות גם את כל צמתי הווינדוס שלך!
עם ה-Ansible בווינדוס, תוכל/י לבצע משימות כמו התקנת תיקונים, ניהול שרתי Windows, ביצוע סקריפטים ב-PowerShell, ועוד.
במדריך זה, תלמד/י איך להגדיר את הצומת הראשונה שלך בווינדוס כך שתיתן לנהל אותה באמצעות ה-Ansible, וכיצד להריץ פקודות ו-Playbooks עליה.
דרישות מוקדמות
אם ברצונך לעקוב אחרי המדריך, וודא/י שיש לך את התקנים הבאים לפני התחלת התהליך:
- מחשב מארח לשליטה ב-Ansible – במדריך זה ישמש מחשב Ubuntu 18.04.5 LTS עם כתובת IP של 10.111.4.53 וה-Ansible גרסה 2.9.18. שים לב ש-Windows אינה נתמכת כצומת שליטה, אלא כצומת מנוהל.
- התקנת Python במחשב המארח שלך – במדריך זה ישתמשו ב-Python גרסה 2, אך גרסה 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
- A user account in the local Administrators group on the Windows computer. This tutorial will use an account called adminuser.
הגדרת המאזין של WinRM בווינדוס
לפני ש-Ansible יכולה לתקשר עם נוד Windows רחוק, עליה להצליח להתחבר אליו. היא עושה זאת דרך פרוטוקול ה-Microsoft WinRM. WinRM הוא אותו פרוטוקול ששימש PowerShell Remoting להפעלת פקודות רחוקות מתוך PowerShell.
עד כה, כפי שכתוב כאן, Ansible תומכת ב-SSH כפרוטוקול לניהול, אך זו תכונה ניסיונית כרגע.
כדי ש-Ansible תשתמש ב-WinRM לתקשורת עם נוד Windows, עליך להגדיר את WinRM. כדי לעשות זאת, Ansible מספקת סקריפט PowerShell שמגדיר אפשרויות שונות של WinRM.
אף שה-סקריפט PowerShell שמספקת Red Hat להגדרת WinRM עבר בדיקות והוא בטוח, כדאי לקרוא אותו ולהבין, ברמה גבוהה, מה הוא עושה.
המשימה הראשונה שלך תהיה להוריד את סקריפט ההגדרה ולהפעיל את Ansible על הנוד של Windows. כדי לעשות זאת, בהנחה שכבר יש לך PowerShell Remoting מופעל במחשב ה-Windows שלך ואתה נמצא בתחנת עבודה של Windows:
הורד את התסריט PowerShell ConfigureRemotingForAnsible.ps1 למחשב Windows המקומי שלך. המדריך יניח שהוא נשמר ב־~\Downloads.
הרץ את תסריט התצורה על גבי ה־Windows node שבו ינהל Ansible באמצעות הפקודה Invoke-Command
. הפקודה למטה תפעיל את הפקודה על שני מכונות הדמו של המדריך ותבקש ממך את הסיסמה עבור חשבון ה־adminuser המקומי על ה־Windows nodes.
באופן ברירת מחדל, תסריט התצורה יגדיר את WinRM עבור אימות HTTP בסיסי. אם ברצונך ש־Ansible ישתמש בחיבור מאובטח יותר, למד איך להגדיר את WinRM על פי HTTPS עבור Ansible.
הגדרת הבקר של Ansible על Windows
עכשיו שה־Windows node מוכן עבור Ansible, בוא נגדיר את בקר ה־Ansible כדי להראות ל־Ansible כיצד לתקשר איתו.
1. התחבר למארח ה־Ansible controller שלך באמצעות SSH באמצעות לקוח SSH האהוב עליך.
2. התקן את המודול Python pywinrm. המודול Python pywinrm דרוש ל־Ansible על Windows כדי לתקשר עם מארחים באמצעות פרוטוקול WinRM.
3. הגדר את הצמתים המרוחקים של Windows בקובץ מערך המלאי של Ansible. מערך המלאי של Ansible הוא אוסף של מארחים מרוחקים הוגדר בקובץ או לפי שמם או לפי כתובת ה-IP שלהם. לאחר ההגדרה, ניתן לכוון פקודות וplaybooks של Ansible למערכי המלאי, כפי שתראה בקרוב.
קובץ המלאי המוגדר כברירת מחדל של Ansible נמצא בתיקייה /etc/ansible/hosts.
קובץ המלאי לדוגמה למטה יוצר קבוצת windows
קבוצה של מארחים הכוללת כל צומת Windows. המדריך משתמש בקבוצת מארחים כאן כדי להקל על ייעוץ לכל צמתי Windows (אם יש לך יותר מאחד) בו זמנית מאוחר יותר.
4. לאחר מכן, הגדר מספר משתנים דרושים שישמשו את Ansible בעת התחברות למארחי Windows בקובץ המלאי כקבוצת windows:vars
.
שלום! הנה התרגום לעברית:
5. כעת, השתמש במודול win_ping של Ansible כדי לבצע בדיקת חיבור פשוטה למארחים בתוך קבוצת המארחים windows
שהוגדרה בשלב מספר 3.
ברגע שהפקודה מתבצעת, תוכל לראות למטה ש-Ansible מחזירה טקסט ירוק עם הודעת SUCCESS המציינת ניסיון ה-ping המוצלח.

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

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

הרצת פקודות 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. העתק את סקריפט ה-PowerShell one.ps1 לצומתי ה-Windows שלך באמצעות השיטה שאתה מעדיף. במדריך זה אנו מניחים שהעתקת את סקריפט ה-PowerShell one.ps1 לתיקיית C:\Temp בכל צומת Windows.
3. לאחר שסקריפט ה-PowerShell דוגמה נמצא בצומת או בצמתי ה-Windows, התחבר לשרת הבקרת Ansible שלך ופתח שוב את העורך הטקסט המועדף עליך. הפעם, צור ושמור פלייבוק נוסף בשם 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. אם נדרש, בעמדת ה-Workstation שלך של Windows, אמת כי הפלייבוק הפעיל את הסקריפט הקיים וקוד ה-PowerShell בפלייבוק.
אם פלייבוק של Ansible הופעל בהצלחה, PowerShell צריך להחזיר שני פעולות True
המציינות שהקבצים כעת קיימים.
מסקנה
במדריך זה, למדת כיצד להגדיר את ה-Managed Node הראשון שלך ב-Windows ב-Aansible. אף ש- Ansible ידועה מסורתית ככלי של Linux, יש אפשרות להשתמש בה גם עבור Windows!
אילו פלייבוקים ו-מודולי Windows תתחיל להשתמש כדי לנהל את Windows באמצעות Ansible?