تقنيات المتقدمة في Ansible على نظام التشغيل Windows: دليلك المتخصص

حتى وإن كان Ansible معروفًا بإدارة العقد Linux باستخدام SSH ، هل تعلم أن Ansible يعمل بشكل جيد أيضًا على نظام التشغيل Windows؟ باستخدام Windows Remote Management (WinRM) ، يمكن لـ Ansible على نظام التشغيل Windows إدارة جميع العقد الخاصة بك بفعالية!

مع 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 في هذا البرنامج التعليمي ، ولكن يجب أن يعمل v3 بنفس الكفاءة.
  • الحزمة 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 البعيدة، يجب أن يكون قادرًا على إجراء اتصال بها. يتم ذلك من خلال بروتوكول Microsoft WinRM. WinRM هو نفس البروتوكول الذي يستخدمه PowerShell Remoting لتشغيل الأوامر البعيدة من داخل PowerShell.

حتى كتابة هذا النص، لا يدعم Ansible SSH كبروتوكول إدارة، ولكنه ميزة تجريبية في هذا الوقت.

لكي يستخدم Ansible WinRM للتواصل مع عقد Windows، يجب عليك تكوين WinRM. ولفعل ذلك، يقدم Ansible نصًا برمجيًا باستخدام PowerShell يعين مختلف خيارات WinRM.

على الرغم من أن نص PowerShell الذي يوفره Red Hat لتكوين WinRM قد تم اختباره وهو آمن، يجب عليك قراءته وفهمه، على المستوى العالي، لماذا يتم ذلك.

سيكون عليك في المرة الأولى تحميل نص التكوين وتشغيل Ansible على عقد Windows. للقيام بذلك، وافترضنا أنك قد قمت بتمكين PowerShell Remoting بالفعل على جهاز الكمبيوتر الخاص بك وأنك في جهاز عمل Windows:

قم بتنزيل النص البرمجي PowerShell ConfigureRemotingForAnsible.ps1 إلى جهاز الكمبيوتر الخاص بك بنظام Windows المحلي. ستفترض هذه الدورة التعليمية أنه تم حفظه في ~\Downloads.

قم بتشغيل النص البرمجي للتكوين على جهاز Windows الذي سيديره Ansible باستخدام Invoke-Command الأمر. الأمر أدناه سيقوم بتشغيل الأمر على جهازي الديمو في الدورة التعليمية وسيطلب منك كلمة المرور لحساب adminuser المحلي على العقد Windows.

Invoke-Command -ComputerName 52.242.251.213, 10.111.4.106 -FilePath '~\Downloads\ConfigureRemotingForAnsible.ps1' -Credential (Get-Credential -UserName adminuser)

بشكل افتراضي، سيقوم النص البرمجي للتكوين بتكوين WinRM للمصادقة الأساسية عبر HTTP. إذا كنت ترغب في أن يستخدم Ansible اتصالًا أكثر أمانًا، تعلم كيفية تكوين WinRM عبر HTTPS لـ Ansible.

تكوين تحكم Ansible على Windows

الآن بعد أن أصبح العقد Windows جاهزًا لـ Ansible، دعنا نقوم الآن بتكوين تحكم Ansible لإظهار لـ Ansible كيفية التواصل معه.

1. قم بالاتصال بمضيف تحكم Ansible الخاص بك عبر SSH باستخدام عميل SSH المفضل لديك.

2. قم بتثبيت وحدة Python pywinrm. الوحدة البرمجية pywinrm الخاصة بـ Python مطلوبة لـ Ansible على Windows للتواصل مع المضيف عبر بروتوكول WinRM.

pip install pywinrm

تعريف عقدة Windows البعيدة في ملف تعريف Ansible. ملف تعريف Ansible هو مجموعة من الخوادم البعيدة المعرفة في ملف إما بواسطة اسم الخادم الخاص بها أو عنوان IP. بمجرد تعريفها، يمكنك بعد ذلك استهداف ملفات تعريف Ansible بأوامر ودفاتر اللعب، كما سترى قريبًا.

ملف تعريف Ansible الافتراضي يقع في دليل /etc/ansible/hosts.

تم إنشاء ملف تعريف العينة أدناه مجموعة windows المضيف التي تحتوي على كل عقدة Windows. يتم استخدام مجموعة المضيفين هنا في البرنامج التعليمي لتسهيل استهداف جميع عقد Windows (إذا كان لديك أكثر من واحدة) دفعة واحدة لاحقًا.

[windows]
 54.242.251.213
 10.111.4.106

بعد ذلك، قم بتعريف بعض المتغيرات المطلوبة التي ستستخدمها Ansible عند الاتصال بالخوادم Windows في ملف التعريف كمجموعة windows:vars.

[windows:vars]
 ansible_user=localadmin ## اسم المستخدم في Windows الذي سيتواصل معه Ansible
 ansible_password=s3crect ## كلمة المرور في Windows التي ستتصل بها Ansible
 ansible_connection=winrm ## نوع الاتصال الذي سيقوم Ansible به مع عقدة Windows البعيدة
 ansible_winrm_server_cert_validation=ignore ## تجاهل تحقق الشهادة لأننا سنستخدم شهادة ذاتية التوقيع تأتي مع Ansible

5. الآن، استخدم وحدة Ansible win_ping لتنفيذ اختبار اتصال بسيط إلى المضيفين داخل مجموعة المضيفين windows المحددة في الخطوة #3.

# windows هو مجموعة المضيفين
# -m يخبر Ansible باستخدام وحدة ال win_ping
 ansible windows -m win_ping

بمجرد التنفيذ، يمكنك أن ترى أدناه أن Ansible يعيد النص الأخضر مع رسالة نجاح تشير إلى محاولة البنج الناجحة.

Successful win_ping connection

يؤكد الإخراج أن مضيف تحكم Ansible يمكنه التواصل مع المضيف البعيد لنظام التشغيل Windows بنجاح عبر WinRM.

تشغيل الأوامر المؤقتة على المضيفين الخاصة بنظام التشغيل Windows

في هذه المرحلة، أنت جاهز تمامًا للبدء في التحكم في عقد Windows باستخدام Ansible. دعونا نختبر هذا الآن من خلال تشغيل أمر مؤقت على عقد Windows لتغييرها. الأوامر المؤقتة رائعة عندما تحتاج إلى تشغيل أمر بسيط على العقد دون إنشاء سيناريو أولاً.

لنقم بتوضيح الأوامر المؤقتة من خلال تثبيت ميزة Windows على العقد Windows المحددة في ملف المخزن. للقيام بذلك، افترض أنك لا تزال متصلًا عبر SSH بعقد تحكم Ansible الخاص بك:

1. بدلاً من وحدة win_ping هذه المرة، قم باستدعاء وحدة win_feature (-m)، ممررًا لها معها وسمين (-a) من name و state تشير إلى اسم ميزة Windows والحالة التي ترغب في تحقيقها.

# ويندوز هنا مجموعة من المضيفين
# win_feature هو اسم الوحدة
# state=present يعني تثبيت الحزمة أو الخدمة
 ansible windows -m win_feature -a "name=Telnet-Client state=present"

عند تشغيل الأمر أعلاه، إذا كان كل شيء على ما يرام، يجب على Ansible الاتصال بجميع العقد في مجموعة المضيف windows وتشغيل الأمر win_feature على كل منها، متحققًا من وجوده، وإذا لم يكن موجودًا، قم بتثبيت ميزة Telnet-Client في Windows.

Ansible Windows Feature

2. يظهر Ansible نجاحًا، ولكن للتأكد، اتصل بعقد Windows يدويًا باستخدام PowerShell وتحقق مما إذا كانت ميزة Telnet Client مثبتة الآن. على محطة العمل الخاصة بك في Windows المحلية، قم بتشغيل Invoke-Command لتشغيل الأمر Get-WindowsFeature PowerShell على كل حاسوب Windows.

Invoke-Command -ComputerName 52.242.251.213, 10.111.4.106 -ScriptBlock { Get-WindowsFeature -Name 'Telnet-Service' } -Credential (Get-Credential -UserName adminuser)

في هذه النقطة، يمكنك تشغيل أي وحدة Windows ترغب فيها كأوامر فورية!

إنشاء وتشغيل العروض التقديمية على ويندوز مع Ansible

بمجرد أن تتقن فن تشغيل الأوامر على النحو المؤقت على العقد المُدارة بواسطة Windows، مهمتك التالية هي إنشاء وتشغيل الـ بلاي بوكس.. بلاي بوكس أنسيبل يجمع الأوامر في مكان واحد ويسمح لك بكتابة منطق معقد لتنفيذ سيناريوهات تشغيل ذاتية معقدة.

تشغيل الأوامر عن بُعد على Windows باستخدام وحدة win_command

بفرض أنك لا تزال متصلًا بجهاز تحكم Ansible:

1. قم بإنشاء مجلد تحت دليل المستخدم الخاص بك بالاسم ansible-windows-demo وانتقل إليه. سيحتوي هذا المجلد على بلاي بوكس الخاص بك.

mkdir ~/ansible-windows-demo 
cd ~/ansible-windows-demo 

2. افتح محرر النص المفضل لديك وأنشئ واحفظ ملفًا بالاسم ansible-windows.yml في الدليل ~/ansible-windows-demo.

تُكتب بلاي بوكس أنسيبل بلغة الـ YAML

3. الآن، انسخ البلاي بوكس التالي إلى ملف ansible-windows.yml لإنشاء مهمة واحدة. سيُنفذ هذا البلاي بوكس أمر netstat على Windows باستخدام وحدة win_command من Ansible على جميع العُقد ضمن مجموعة العُقد windows.

يُنفذ وحدة الأمر win_command الأوامر على الخادم البعيد الذي يعمل بنظام ويندوز. لا تسمح بتنفيذ الأوامر التي تتضمن متغيرات مثل الرموز الخاصة وكسر السطر ورمز الأكبر من، وما إلى ذلك.

---
 - name: Ansible win_command module example  
   hosts: windows # مجموعة الخوادم لتشغيل الوحدة عليها
   tasks: 
   -  name: run an executable command on a remote Windows system
      win_command: netstat -e # win_command هي وحدة لنظام ويندوز.

4. قم بتنفيذ كتيب العمل ansible-windows.yml، الذي يُنفذ المهمة على الخادم البعيد من خلال تنفيذ الأمر التالي.

ansible-playbook ansible-windows.yml

إذا كان كل شيء على ما يرام، يجب أن ترى ناتجًا مشابهًا للمثال أدناه.

Ansible successfully executed the netstat command using win_command module

تشغيل الأوامر عن بُعد باستخدام وحدة win_shell

قمتَ بإنشاء كتيب عمل لتشغيل أمر cmd.exe عن بُعد (netstat) على العُقَد المُدارة بنظام Windows في المثال السابق. لنرفع الرهان قليلاً ونقوم الآن بتشغيل الأوامر بواسطة وحدة win_shell.

بشكل افتراضي، تعمل وحدة win_shell بواسطة PowerShell على خادم ويندوز

على جهاز العمل الخاص بك الذي يعمل بنظام ويندوز المحلي:

1. أولاً، افتح محرر النصوص المفضل لديك على جهاز العمل الخاص بك الذي يعمل بنظام Windows المحلي وأنشئ نصًا تجريبيًا لسكربت PowerShell وانسخ الشيفرة التالية إليه، ثم احفظه بالاسم one.ps1. سيقوم هذا البرنامج التعليمي بحفظ السكربت باسم ~\one.ps1.

الشيفرة أدناه تنشئ ملف نصي فارغ يسمى test2.txt في دليل C:\temp.

Set-Content -Path C:\temp\test2.txt -Value ''

2. انسخ سكربت PowerShell one.ps1 إلى عقد الويندوز الخاص بك باستخدام الطريقة المفضلة لديك. سيفترض هذا البرنامج التعليمي أنك قمت بنسخ السكربت one.ps1 إلى المجلد C:\Temp على كل عقد ويندوز.

3. بمجرد أن يكون سكربت PowerShell التجريبي على العقد(الأجهزة) الخاص بويندوز، قم بالاتصال بجهاز تحكم Ansible وافتح محرر النصوص المفضل لديك مرة أخرى. هذه المرة، قم بإنشاء سكربت آخر واحفظه كـ ansible-windows-shell.yml في نفس الدليل ~/ansible-windows-demo.

4. انسخ والصق السكربت التالي في ملف ansible-windows-shell.yml. هذا السكربت سيقوم بتشغيل مهمتين لتوضيح وحدة win_shell. إنه يستدعي سكربت PowerShell الذي تم نسخه للتو من الخطوة رقم 2 ويضع الشيفرة مباشرة في السكربت التوضيحي ليظهر أنه لا حاجة للسكربت على الإطلاق.

لتمرير عدة أسطر من الشيفرة PowerShell إلى وحدة win_shell، استخدم الحرف | الخاص بالأنبوب.

---
 - name: Ansible win_shell module example 
   remote_user: localadmin # مستخدم Windows محلي للاتصال بالجهاز
   hosts: windows # مجموعة مضيفين عن بعد
   tasks:
    - name: Single line PowerShell # تشغيل أمر واحد باستخدام وحدة win_shell
      win_shell: C:\temp\one.ps1
    - name: Run multi-lined shell commands 
      win_shell: |
        $text = ' Iam Author of ATA'
       Set-Content -Path C:\temp\test3.txt -Value $text 

5. الآن، استدعِ الدفتر الأمر الثاني ansible-windows-shell.yml، الذي يُنفَذ على الجهاز البعيد ولكن بواسطة PowerShell.

ansible-playbook ansible-windows-shell.yml
ansible-playbook ansible-windows-shell.yml

6. إذا لزم الأمر، على جهاز العمل الخاص بك الذي يعمل بنظام التشغيل Windows المحلي، تحقق من أن الدفتر الأمر قام بتنفيذ النص السابق وكود PowerShell في الدفتر الأمر.

Invoke-Command -ComputerName 52.242.251.213, 10.111.4.106 -ScriptBlock { Test-Path -Path 'C:\Temp\test3.txt','C:\Temp\test2.txt' } -Credential (Get-Credential -UserName adminuser)

إذا نجح دفتر الأمر Ansible، يجب أن يعيد PowerShell عبارتين True مشيرًا إلى وجود الملفات الآن.

الاستنتاج

في هذا البرنامج التعليمي، لقد تعلمت كيفية إعداد أول جهاز تم إدارته بنظام Windows في Ansible. على الرغم من أن Ansible كان يُعرف تقليديًا كأداة Linux، يمكن استخدامه بسهولة أيضًا لأجهزة Windows!

ما هي الدفاتر الأمر والوحدات لنظام Windows التي ستبدأ باستخدامها لإدارة Windows باستخدام Ansible؟

Source:
https://adamtheautomator.com/ansible-on-windows/