برنامج تعليمي غير قابل للمبتدئين: قواعد اللعبة والأوامر والأمثلة
ما هو أنسبل؟
Ansible هي أداة أتمتة وتنسيق مفتوحة المصدر لتوفير البرامج وإدارة التكوين ونشر البرامج. يمكن لـ Ansible تشغيل وتكوين الأنظمة المشابهة لنظام Unix بسهولة أيضًا Windows أنظمة لتوفير البنية التحتية كرمز. يحتوي على لغة برمجة تعريفية خاصة به لتكوين النظام وإدارته.
تحظى Ansible بشعبية بسبب بساطتها في التثبيت، وسهولة الاستخدام فيما يتعلق بالاتصال بالعملاء، وافتقارها إلى وكيل لعملاء Ansible وتعدد المهارات. يعمل عن طريق الاتصال عبر SSH للعملاء، لذلك لا يحتاج إلى وكيل خاص من جانب العميل، ومن خلال دفع الوحدات إلى العملاء، يتم بعد ذلك تنفيذ الوحدات محليًا من جانب العميل ويتم دفع الإخراج مرة أخرى إلى خادم Ansible.
نظرًا لأنه يستخدم SSH، فيمكنه الاتصال بسهولة بالعملاء باستخدام مفاتيح SSH، مما يبسط العملية برمتها. يتم تخزين تفاصيل العميل، مثل أسماء المضيفين أو عناوين IP ومنافذ SSH، في ملفات تسمى ملفات المخزون. بمجرد إنشاء ملف مخزون وتعبئته، يمكن لـ Ansible استخدامه.
لماذا نستخدم Ansible؟
فيما يلي بعض المزايا/الفوائد المهمة لاستخدام Ansible
- إحدى أهم مزايا Ansible هي أنه مجاني للاستخدام من قبل الجميع.
- لا يحتاج الأمر إلى أي مهارات خاصة لمسؤول النظام لتثبيت Ansible واستخدامه، والوثائق الرسمية شاملة للغاية.
- إن نمطيته فيما يتعلق بالمكونات الإضافية والوحدات النمطية وقوائم الجرد وأدلة اللعب تجعل من Ansible الرفيق المثالي لتنسيق البيئات الكبيرة.
- Ansible خفيف الوزن للغاية ومتسق، ولا توجد قيود فيما يتعلق بنظام التشغيل أو الأجهزة الأساسية.
- كما أنه آمن جدًا نظرًا لقدراته بدون وكيل وبسبب استخدام ميزات أمان OpenSSH.
- ميزة أخرى تشجع على اعتماد Ansible هي منحنى التعلم السلس الذي يحدده التوثيق الشامل وهيكل وتكوين سهل التعلم.
تاريخ أنسيبل
فيما يلي علامات بارزة مهمة من تاريخ غير مقبول:
- في فبراير 2012 بدأ مشروع Ansible. تم تطويره لأول مرة بواسطة مايكل ديهان، مبتكر Cobbler وFunc، وحدة تحكم الشبكة الموحدة Fedora.
- في البداية كانت تسمى AnsibleWorks Inc، وتم الاستحواذ على الشركة التي تمول أداة ansible في عام 2015 بواسطة RedHat، وفي وقت لاحق، جنبًا إلى جنب مع RedHat، انتقلت تحت مظلة IBM.
- في الوقت الحاضر، يتم تضمين Ansible في توزيعات مثل Fedora Linux وRHEL وCentos و Oracle لينكس.
المصطلحات الهامة المستخدمة في Ansible
-
خادم غير معقول
الجهاز الذي تم تثبيت Ansible عليه والذي سيتم من خلاله تشغيل كافة المهام وقواعد اللعبة
-
وحدة
في الأساس، الوحدة هي أمر أو مجموعة من أوامر Ansible المشابهة والمخصصة للتنفيذ من جانب العميل
-
مهمة
المهمة هي قسم يتكون من إجراء واحد يجب إكماله
-
النوع
طريقة لتنظيم المهام والملفات ذات الصلة ليتم استدعاؤها لاحقًا في كتاب تشغيل
-
حقيقة
المعلومات التي تم جلبها من نظام العميل من المتغيرات العالمية باستخدام عملية جمع الحقائق
-
المعرض
ملف يحتوي على بيانات حول خوادم عميل ansible. تم تعريفه في الأمثلة اللاحقة كملف hosts
-
بلايستشن
تنفيذ كتاب اللعب
-
معالج
المهمة التي يتم استدعاؤها فقط في حالة وجود المخطر
-
المخطر
قسم منسوب إلى مهمة يستدعي المعالج إذا تم تغيير الإخراج
-
بطاقة
اسم تم تعيينه لمهمة يمكن استخدامها لاحقًا لإصدار تلك المهمة المحددة أو مجموعة المهام فقط.
التثبيت Ansible في لينكس
بمجرد قيامك بمقارنة خياراتك ووزنها وقررت استخدام Ansible، فإن الخطوة التالية هي تثبيته على نظامك. سنستعرض خطوات التثبيت بشكل مختلف لينكس التوزيعات، الأكثر شعبية، في البرنامج التعليمي الصغير التالي.
قم بتثبيت Ansible على أنظمة Centos/RedHat
الخطوة 1) تثبيت EPEL الريبو
[root@ansible-server ~]# sudo yum install epel-release
الخطوة 2) قم بتثبيت الحزمة غير المعقولة
[root@ansible-server ~]# sudo yum install -y ansible
تثبيت غير ممكن على Ubuntu/أنظمة ديبيان
الخطوة 1) إجراء تحديث للحزم
$ sudo apt update
الخطوة 2) قم بتثبيت الحزمة المشتركة لخصائص البرنامج
$ sudo apt install software-properties-common
الخطوة 3) تثبيت أرشيف الحزمة الشخصية لـ ansible
$ sudo apt-add-repository ppa:ansible/ansible
الخطوة 4) تثبيت غير معقول
$ sudo apt update $ sudo apt install ansible
أوامر مخصصة غير قابلة للتطبيق
إحدى أبسط الطرق التي يمكن من خلالها استخدام Ansible هي استخدام الأوامر المخصصة. يمكن استخدامها عندما تريد إصدار بعض الأوامر على خادم أو مجموعة من الخوادم. لا يتم تخزين الأوامر المخصصة للاستخدامات المستقبلية ولكنها تمثل طريقة سريعة للتفاعل مع الخوادم المطلوبة.
في هذا البرنامج التعليمي Ansible، سيتم تكوين ملف مضيفين لخادمين، يحتوي على host1 وhost2.
يمكنك التأكد من إمكانية الوصول إلى الأجهزة المضيفة من الخادم غير المرئي عن طريق إصدار أمر ping على كافة الأجهزة المضيفة.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
host1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
التفسير:
- حالة الأمر، في هذه الحالة، النجاح
- المضيف الذي تم تشغيل الأمر عليه
- يتم إصدار الأمر عبر المعلمة -m، في هذه الحالة، ping
- باستخدام المعلمة -i، يمكنك الإشارة إلى ملف المضيفين.
يمكنك إصدار نفس الأمر على مضيف محدد فقط إذا لزم الأمر.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
host2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
التفسير:
- يمكن استخدام معلمة الحد لإصدار الأوامر فقط على مضيفين محددين في ملف المضيف
- اسم المضيف كما هو محدد في ملف المخزون
إذا كنت بحاجة إلى نسخ ملف إلى وجهات متعددة بسرعة، فيمكنك استخدام وحدة النسخ في ansible والتي تستخدم SCP. لذلك يبدو الأمر ومخرجاته كما يلي:
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
host1 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/testfile",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source",
"state": "file",
"uid": 0
}
host2 | SUCCESS => {
"changed": true,
"checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"dest": "/tmp/testfile",
"gid": 0,
"group": "root",
"md5sum": "d41d8cd98f00b204e9800998ecf8427e",
"mode": "0644",
"owner": "root",
"size": 0,
"src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source",
"state": "file",
"uid": 0
}
التفسير:
- تم تحديد وحدة النسخ
- وسيطات الوحدة، في هذه الحالة، هي المسار المطلق للمصدر والمسار المطلق للوجهة.
- إن إخراج أمر Ansible يعكس نجاح أمر النسخ وتفاصيل أخرى مثل مجموع التحقق sha1 أو md5 للتحقق من سلامة الملف والبيانات الوصفية مثل المالك أو الحجم أو الأذونات. من السهل تثبيت حزمة على مجموعة من الخوادم. يحتوي Ansible على عدة وحدات تتفاعل مع المثبتات المستخدمة، مثل yum وapt وdnf وما إلى ذلك.
في المثال التالي، ستكتشف كيفية تثبيت حزمة عبر الوحدة yum على مضيفي Centos.
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
host1 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
host2 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
التفسير:
- يتم استخدام وحدة Yum في هذا المثال
- فهو يحدد وسيطات الوحدة، وفي هذه الحالة، ستختار اسم الحزمة وحالتها. إذا كانت الحالة غائبة، على سبيل المثال، سيتم البحث في الحزمة وإذا وجدت، تتم إزالتها
- عند تلوينه باللون الأصفر، سترى مخرجات الأمر ansible مع تغيير الحالة، مما يعني في هذه الحالة أنه تم العثور على الحزمة وتثبيتها.
- حالة أمر yum install الصادر عبر ansible. في هذه الحالة تم تثبيت الحزمة ncdu.x86_64 0:1.14-1.el7.
بالطبع، يمكن استخدام جميع خيارات مثبت yum عبر ansible، بما في ذلك التحديث أو التثبيت أو الإصدار الأحدث أو الإزالة.
في المثال أدناه، تم إصدار نفس الأمر لإزالة حزمة ncdu المثبتة مسبقًا.
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
host1 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n================================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
host2 | SUCCESS => {
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n================================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n"
]
}
التفسير:
- يُظهر إخراج الأمر yum أنه تمت إزالة الحزمة.
من بين الميزات المفيدة والأساسية الأخرى التي يستخدمها ansible للتفاعل مع خادم العميل جمع بعض الحقائق حول النظام. لذا، فإنه يقوم بجلب معلومات الأجهزة والبرامج وإصدارات النظام ويخزن كل قيمة في متغير يمكن استخدامه لاحقًا.
إذا كنت بحاجة إلى معلومات مفصلة حول الأنظمة التي سيتم تعديلها عبر ansible، فيمكن استخدام الأمر التالي. تقوم وحدة الإعداد بجمع الحقائق من متغيرات النظام.
كتب اللعب Ansible
كتب اللعب Ansible تعد Ansible Playbooks طريقة لإرسال الأوامر إلى الأنظمة البعيدة من خلال البرامج النصية. تُستخدم كتب Ansible Playbooks لتكوين بيئات النظام المعقدة لزيادة المرونة من خلال تنفيذ البرنامج النصي لنظام واحد أو أكثر. تميل كتب Ansible Playbooks إلى أن تكون لغة تكوين أكثر من كونها لغة برمجة.
تستخدم أوامر قواعد اللعبة Ansible تنسيق YAML، لذلك ليست هناك حاجة إلى الكثير من بناء الجملة، ولكن يجب احترام المسافة البادئة. كما يوحي الاسم، كتاب اللعب عبارة عن مجموعة من المسرحيات. من خلال دليل التشغيل، يمكنك تعيين أدوار محددة لبعض المضيفين وأدوار أخرى لمضيفين آخرين. ومن خلال القيام بذلك، يمكنك تنسيق خوادم متعددة في سيناريوهات متنوعة جدًا، كل ذلك في دليل لعب واحد.
للحصول على كافة التفاصيل بدقة قبل الاستمرار في استخدام أمثلة دليل التشغيل Ansible، يجب علينا أولاً تعريف مهمة. هذه هي الواجهة لوحدات ansible للأدوار ودليل التشغيل.
الآن، دعونا نتعلم قواعد اللعب Ansible من خلال مثال مع قواعد اللعبة الواحدة مع مسرحية واحدة، والتي تحتوي على مهام متعددة على النحو التالي:
---
- hosts: group1
tasks:
- name: Install lldpad package
yum:
name: lldpad
state: latest
- name: check lldpad service status
service:
name: lldpad
state: started
في مثال Ansible playbook أعلاه، يتم استهداف المجموعة 1 من المضيفين في ملف المضيف لتثبيت حزمة lldpad باستخدام الوحدة yum وبعد ذلك يتم بدء خدمة lldpad التي تم إنشاؤها بعد التثبيت باستخدام وحدة الخدمة المستخدمة في الغالب للتفاعل مع مجموعة systemd.
التفسير:
- مجموعة المضيفين التي سيتم تشغيل قواعد اللعبة عليها
- يتم استخدام وحدة Yum في هذه المهمة لتثبيت lldpad
- يتم استخدام وحدة الخدمة للتحقق مما إذا كانت الخدمة قيد التشغيل بعد التثبيت
يعمل كل دليل تشغيل ansible مع ملف جرد. يحتوي ملف الجرد على قائمة بالخوادم مقسمة إلى مجموعات للتحكم بشكل أفضل في التفاصيل مثل عنوان IP ومنفذ SSH لكل مضيف.
يبدو أدناه ملف المخزون الذي يمكنك استخدامه لمثال قواعد اللعبة Ansible. هناك مجموعتان، تسمى المجموعة 1 والمجموعة 2، تحتوي كل منهما على المضيف 1 والمضيف 2 على التوالي.
[group1] host1 ansible_host=192.168.100.2 ansible_ssh_port=22 [group2] host2 ansible_host=192.168.100.3 ansible_ssh_port=22
التفسير:
- أسم المجموعة
- اسم المضيف، مع عنوان IP ومنفذ ssh، في هذه الحالة، الاسم الافتراضي، 22.
مثال آخر مفيد لقواعد لعب Ansible يحتوي هذه المرة على لعبتين لمضيفين وهو المثال التالي. بالنسبة للمجموعة الأولى من المضيفين، المجموعة 1، سيتم تمكين selinux. إذا تم تمكينه، فستظهر رسالة على شاشة المضيف.
بالنسبة للمجموعة الثانية من المضيفين، سيتم تثبيت حزمة httpd فقط إذا كان ansible_os_family هو RedHat وansible_system_vendor هو HP.
Ansible_os_family وansible_system_vendor عبارة عن متغيرات تم جمعها باستخدام خيار Collect_facts ويمكن استخدامها كما في هذا المثال الشرطي.
---
- hosts: group1
tasks:
- name: Enable SELinux
selinux:
state: enabled
when: ansible_os_family == 'Debian'
register: enable_selinux
- debug:
Imsg: "Selinux Enabled. Please restart the server to apply changes."
when: enable_selinux.changed == true
- hosts: group2
tasks:
- name: Install apache
yum:
name: httpd
state: present
when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'
التفسير:
- مثال على جملة متى، في هذه الحالة، عندما يكون نوع نظام التشغيل هو دبيان. يتم جمع المتغير ansible_os_family عبر وظيفة Collect_facts.
- يتم تسجيل مخرجات المهمة للاستخدام المستقبلي باسمenable_selinux
- مثال آخر على شرط when. في هذه الحالة، سيتم عرض رسالة للمستخدم المضيف إذا تم تمكين SELinux بالفعل من قبل.
- مثال آخر على جملة When التي تتكون من قاعدتين
إلى جانب المهام، هناك أيضًا بعض المهام المحددة التي تسمى المعالجات. يجب أن يكون للمعالجات اسم فريد في جميع أنحاء قواعد اللعبة. تعمل هذه بنفس طريقة المهمة العادية ولكن يمكن إخطار المعالج عبر المخطر.
إذا لم يتم إخطار المعالج أثناء تشغيل قواعد اللعبة، فلن يتم تشغيله. ومع ذلك، إذا قامت أكثر من مهمة بإعلام المعالج، فسيتم تشغيل ذلك مرة واحدة فقط بعد انتهاء جميع المهام.
في المثال الموضح أدناه، يمكنك أن ترى كيف أن مهمة معينة تحتوي على قسم إعلام يستدعي مهمة أخرى. إذا تم تغيير مخرجات المهمة الأولى، فسيتم استدعاء مهمة المعالج. أفضل مثال هو تغيير ملف التكوين ثم إعادة تشغيل تلك الخدمة المحددة بعد ذلك.
---
- hosts: group2
tasks:
- name: sshd config file modify port
lineinfile:
path: /etc/ssh/sshd_config
regexp: 'Port 28675'
line: '#Port 22'
notify:
- restart sshd
handlers
- name: restart sshd
service: sshd
name: sshd
state: restarted
في هذه الحالة، إذا تم تغيير المهمة الأولى، "منفذ تعديل ملف التكوين sshd"، أي أنه إذا لم يكن المنفذ 28675 في المقام الأول، فسيتم تعديله وستقوم المهمة بإعلام المعالج بنفس الاسم للتشغيل وسيقوم بإعادة تشغيل خدمة sshd.
التفسير:
- مثال على الإخطار
- مثال للمعالج
أدوار غير قابلة للتنفيذ
عند التعامل مع قواعد اللعبة الشاملة، يكون من الأسهل تقسيم المهام إلى أدوار. ويساعد هذا أيضًا في إعادة استخدام الأدوار في المستقبل. الأدوار عبارة عن مجموعة من المهام، والتي يمكن نقلها من دليل قواعد اللعبة إلى آخر، ويمكن تشغيلها بشكل مستقل ولكن فقط من خلال ملف قواعد اللعبة.
يتم تخزين الأدوار في أدلة منفصلة ولها بنية دليل معينة.
[root@ansible-server test2]# tree
.
`-- role1
|-- defaults
| `-- main.yml
|-- handlers
| `-- main.yml
|-- meta
| `-- main.yml
|-- README.md
|-- tasks
| `-- main.yml
|-- tests
| |-- inventory
| `-- test.yml
`-- vars
`-- main.yml
7 directories, 8 files
يحتوي ملف yaml الموجود في دليل الإعدادات الافتراضية على قائمة بالمتغيرات الافتراضية التي سيتم استخدامها مع دليل التشغيل. يتم استخدام دليل المعالجات لتخزين المعالجات. من المفترض أن يحتوي الدليل التعريفي على معلومات حول المؤلف وتبعيات الدور. يوجد في دليل المهام ملف yaml الرئيسي للدور.
يحتوي دليل الاختبارات على نموذج لملف قواعد اللعبة yaml ونموذج لملف المخزون ويستخدم في الغالب لأغراض الاختبار قبل إنشاء الدور الفعلي.
يحتوي دليل vars على ملف yaml الذي سيتم فيه تحديد جميع المتغيرات المستخدمة بواسطة الدور. يجب أن تحتوي قوالب الدليل وملفات الدليل على الملفات والقوالب التي ستستخدمها المهام في الدور.
لإنشاء شجرة الدليل لدور ما، يجب عليك استخدام الأمر التالي مع المعلمة الأخيرة، اسم الدور:
[root@ansible-server test2]# ansible-galaxy init role1
يعمل Ansible أيضًا بشكل جيد مع القوالب. كلغة للقوالب، فإنها تستخدم Jinja2.
في المثال التالي، ستكتشف كيف يبدو قالب jinja2 الأساسي وستستخدمه في أحد الأدوار.
في وقت التشغيل، اعتمادًا على مركز البيانات الذي يقع فيه الخادم الخاص بك، يمكنك الاختيار من بين أكثر من خادم أسماء واحد، كل منها يتوافق مع مركز البيانات، باستخدام المتغير "resolver_ip_addresses".
{% for resolver in resolver_ip_addresses %}
nameserver {{ resolver }}
{% endfor %}
options timeout:1
options attempts:5
options rotate
في هذا المثال، في دليل قواعد اللعبة، تم تحديد بعض المتغيرات، بما في ذلك متغير يسمى Resolver_ip_addresses بقيم مختلفة اعتمادًا على مركز البيانات.
- name: Set resolver for server
template:
src: dns.j2
dest: /etc/resolv.conf
group: root
owner: root
mode: "0644"
tag: resolver
التفسير:
- اسم القالب الذي سيتم استخدامه. يقع القالب في القوالب الموجودة في مسار الدور
- مسار الوجهة لاسم الملف الذي سيتم استبداله بالقالب، من جانب العميل.
- أذونات الملف الوجهة
يمكن أن تحتوي مهام الأدوار أيضًا على حقل علامة له اسم منسوب. يمكن لأكثر من مهمة مشاركة نفس العلامة. عند تشغيل قواعد اللعبة غير المقبولة، يمكنك تحديد العلامة أيضًا، بحيث يتم تنفيذ هذه المهام.
دراسة حالة غير قابلة للتنفيذ
في هذا القسم، سنقوم بتحليل دراسة حالة لدليل أساسي غير قابل للتنفيذ له ثلاثة أدوار. والغرض من ذلك هو إعطاء مثال عملي لما تحدثنا عنه من قبل. سيتم تكييف بعض الأمثلة المستخدمة من قبل في هذا الدليل التعليمي لقواعد اللعب Ansible واستخدامها في قواعد اللعبة هذه.
يوجد أدناه هيكل الدليل لكتاب اللعب. سيكون ملف Yaml الذي سيتم استخدامه هو p4.yml.
[root@ansible-server test_ansible]# ls -lrth total 16K -rw-r--r--. 1 root root 0 Jul 3 10:13 testfile -rw-r--r--. 1 root root 203 Jul 3 13:30 p1.yml -rw-r--r--. 1 root root 125 Jul 3 15:00 hosts -rw-r--r--. 1 root root 488 Jul 3 16:40 p2.yml -rw-r--r--. 1 root root 188 Jul 4 17:33 p4.yml drwxr-xr-x. 5 root root 47 Jul 4 17:35 roles [root@ansible-server test_ansible]# cd roles [root@ansible-server roles]# ls -lrth total 12K drwxr-xr-x. 9 root root 4.0K Jul 4 12:52 httpd drwxr-xr-x. 9 root root 4.0K Jul 4 13:55 selinux drwxr-xr-x. 9 root root 4.0K Jul 4 16:54 resolver
يحتوي دليل التشغيل على ثلاثة أدوار، أحدها يسمى "المحلل" الذي يقوم بتعيين خادم أسماء محدد على الخوادم عن طريق نسخ ملف من الخادم إلى الوجهة /etc/resolv.conf. واحد آخر يسمى httpd، ويقوم بتثبيت حزمة httpd مع وحدة yum، والثالث يمكّن SELinux ويخطر المستخدم المسجل بإعادة تشغيل النظام. تم إنشاء كل دور باستخدام أمر ansible-galaxy.
دور المحلل، مهمة main.yml:
دور Httpd، مهمة main.yml:
دور Selinux، مهمة main.yml:
فيما يلي دليل التشغيل p4.yml المحدد. سيتم تشغيله على جميع المضيفات إذا لم يتم تحديد خلاف ذلك في سطر الأوامر، وسيتم تشغيله كمستخدم جذر على المنفذ 22 (SSH)، وسيجمع الحقائق قبل تشغيل الأدوار، وسيشغل الأدوار الثلاثة المذكورة سابقًا. يمكن تشغيل كل دور بشكل مستقل عن طريق تحديد العلامة في سطر أوامر ansible-playbook باستخدام المعلمة –t.
---
- hosts: all
user: root
port: 22
gather_facts: True
roles:
- { role: selinux, tags: selinux }
- { role: httpd, tags: httpd }
- { role: resolver, tags: resolver }
تشغيل دليل التشغيل p4.yml على مضيفين وتفسير المخرجات. يمكن تشغيل نفس الأمر باستخدام المعلمة –check للتشغيل الجاف. في حالة رغبتك في استخدام مصادقة كلمة المرور، استخدم المعلمة -k.
التفسير:
- أمر Ansible-playbook الذي يقوم بتشغيل p4.yml
- يتخطى Playbook دور SELinux لأنه ممكّن بالفعل.
- اكتشف Ansible أن حزمة httpd مثبتة بالفعل، لذا فهي ترجع بشكل جيد.
- تم تعيين المحلل، وتم تغيير حالة محلل الدور.
ورقة الغش للأوامر Ansible
قم بتثبيت EPEL repo على أنظمة Centos/RHEL
[root@ansible-server ~]# sudo yum install epel-release
تثبيت حزمة غير معقولة على أنظمة Centos/RHEL
[root@ansible-server ~]# sudo yum install -y ansible
قم بإجراء تحديث للحزم الموجودة على Debian/Ubuntu نظم
$ sudo apt update
قم بتثبيت حزمة خصائص البرنامج المشتركة على Debian/Ubuntu نظم
$ sudo apt install software-properties-common
تثبيت أرشيف الحزمة الشخصية ansible على Debian/Ubuntu نظم
$ sudo apt-add-repository ppa:ansible/ansible
تثبيت ansible على دبيان/Ubuntu نظم
$ sudo apt update $ sudo apt install ansible
قم بإصدار أمر ping على كافة الخوادم المحددة في ملف المخزون المسمى hosts
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
قم بإصدار أمر ping على المضيف 2 فقط
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
انسخ الملف "testfile" على كافة الأجهزة المضيفة في ملف المخزون
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
تثبيت حزمة ncdu على كافة المضيفين
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
إزالة حزمة ncdu على كافة الأجهزة المضيفة
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
قم ببناء بنية الدليل للدور المسمى role1.
[root@ansible-server test2]# ansible-galaxy init role1
قواعد التشغيل الجافة p4.yml
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check
قم بتشغيل p4.yml playbook مع مصادقة كلمة المرور لجميع المضيفين
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k
ملخص
في عالم تتصف فيه التكنولوجيا بالتغير المستمر بوتيرة سريعة وتنمو بسرعة لا تصدق في نفس الوقت، يجب على مسؤولي النظام ومهندسي DevOps التفكير في طرق مختلفة حول كيفية أتمتة المهام الروتينية وتنظيم مجموعات كبيرة من الخوادم.
في حين أن هناك الكثير بديل ل Ansible (Chef، Puppet) التي تفعل الشيء نفسه مع بعض الاختلافات، تمكنت Ansible من التفوق عليها جميعًا بفضل بساطتها وتحسين الأمان، والأهم من ذلك منحنى التعلم السلس. نظرًا لهذه الصفات والاعتماد السريع لـ Ansible، أنشأنا برنامجًا تعليميًا مليئًا بالأمثلة حتى تتمكن من الحصول على تجربة أولى أكثر سلاسة في العمل مع Ansible.
في هذا البرنامج التعليمي الأساسي لـ Ansible، وصفنا Ansible وتحدثنا قليلاً عن تاريخه. ذكرنا نقاط القوة في Ansible والمزايا التي يمكن أن يجلبها Ansible لأتمتة وتنظيم البنى التحتية ذات الأحجام المختلفة. حددنا المصطلحات الأساسية المستخدمة في Ansible وحددنا بنية كتيبات تشغيل Ansible. كانت الأمثلة الشاملة مصحوبة بجميع المعلومات مع تفسيرات مفصلة.















