احتراف Ansible على Windows: دليلك المتخصص

حتى 尽管Ansible يشعر بالشهرة لإدارة عقود الLinux باستخدام SSH, هل تعلمون أنه يعمل أيضًا جيدًا على الويندوز؟ من خلال إدارة الويندوز عن بعد (WinRM), يمكن لAnsible على الويندوز إدارة جميع عقود الويندوز الخاصة بك أيضًا!

مع Ansible على الويندوز، يمكنك إنجاز مهام مثل تحميل التصديرات، إدارة المختبرات الويندوزية، تنفيذ 脚本 PowerShell، والمزيد.

في هذا الدرس التعليمي، سوف تتعلم كيفية تأسيس عقد الويندوز الأول الذي سيتم إدارته بواسطة Ansible وكيفية تنفيذ الأوامر والملفات التعاملية ضده.

المقدمات اللازمة

إذا أردت أن تتبع هذا الدرس التعليمي، يرجى أن تتأكد من وجود الأمور التالية قبل البدء:

  • منطقة محكمة Ansible – ستستخدم درس Ansible v2.9.18 في جهاز Ubuntu 18.04.5 LTS ذي IP 10.111.4.53. تعلمون أن الويندوز لا يمكن توفيره كعقد محكم، فقط عقد للإدارة.
  • 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.
  • توفير توفير التبادل المختلف ل PowerShell على مختبر الويندوز الذي سيتم إدارته.تأسيس مستمع ال WinRM في الويندوز.
  • 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 المستهدف وأنت في جهاز عمل 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 لعرض كيفية التواصل معها.

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

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

pip install pywinrm

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

يقع ملف المخزن الافتراضي لأدوات Ansible في دليل /etc/ansible/hosts.

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

[windows]
 54.242.251.213
 10.111.4.106

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

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

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

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

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

Successful win_ping connection

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

تشغيل الأوامر الفورية على مضيفي Windows

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

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

1. بدلاً من وحدة win_ping هذه المرة، قم باستدعاء وحدة win_feature (-m)، مرر لها معاملين (-a) يشيران إلى اسم ميزة 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 لتشغيل أمر PowerShell Get-WindowsFeature على كل كمبيوتر 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، فإن مهمتك التالية هي إنشاء وتشغيل ملفات التعليمات باستخدام أنسيبل. يجمع ملف تعليمات Ansible بين الأوامر في مكان واحد ويسمح لك بكتابة منطق معقد لتنفيذ سيناريوهات تشغيل تلقائي معقدة.

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

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

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

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

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

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

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

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

---
 - 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 هي وحدة نظام Windows. 

4. استدعاء مسرحية ansible-windows.yml، والتي تنفذ المهمة على المضيف النظامي البعيد بتشغيل الأمر التالي.

ansible-playbook ansible-windows.yml

إذا انجز كل شيء بنجاح، يجب أن ترى نتائج مثل التالية.

Ansible successfully executed the netstat command using win_command module

تشغيل أوامر Remote PowerShell باستخدام وحدة win_shell

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

بشكل افتراضي تعمل وحدة win_shell على PowerShell على أجهزة ويندوز المضيفة

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

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

الكود التالي يخلق ملف نصي فارغ يسمى test2.txt في الدليل C:\temp.

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

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

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

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

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

---
 - name: Ansible win_shell module example 
   remote_user: localadmin # المستخدم المحلي للويندوز للاتصال به
   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. إذا لزم الأمر، على ويندوز المحلي الخاص بك، تحقق من تنفيذ المسرحية البرمجية الموجودة ورمز 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 يشيران إلى أن الملفات الآن موجودة.

الخاتمة

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

ما القواعد ووحدات ويندوز التي ستبدأ باستخدامها لإدارة ويندوز باستخدام Ansible؟

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