Ansible ابزاري مدرن براي مديريت پيكربندي است كه كار تنظيم و نگهداري سرور محازي هاي از راه دور را تسهيل مي كند. با يك طراحي مينيماليستي كه قصد دارد كاربران را به روز كرده و به آنها سرعت ببخشد ، به شما اين امكان را مي دهد تا يك يا صدها سيستم را از يك مكان مركزي با playbook يا دستورات ad hoc كنترل كنيد.
بر خلاف playbook- كه شامل مجموعه كارهايي است كه مي توان از آنها استفاده مجدد كرد – دستورات ad hoc كارهايي هستند كه شما مرتباً آنها را انجام نمي دهيد ، مانند راه اندازي مجدد يك سرويس يا بازيابي اطلاعات در مورد سيستمهاي از راه دور كه قابل اعتماد نيستند.
در اين راهنما، ياد مي گيريد كه چگونه از دستورات ad hoc براي انجام كارهاي متداول مانند نصب بسته ها ، كپي كردن فايل ها ، و راه اندازي مجدد سرويس ها بر روي يك يا چند سرور محازي از راه دور ، از يك گره كنترل Ansible استفاده كنيد.
پيش نيازها
براي پيروي از اين راهنما ، به موارد زير نياز داريد:
• يك گره كنترل Ansible. اين راهنما فرض مي كند كه گره كنترل شما يك دستگاه اوبونتو 20.04 است كه Ansible روي آن نصب و پيكربندي شده است تا با استفاده از كليدهاي SSH به ميزبان هاي Ansible شما متصل شود. اطمينان حاصل كنيد كه گره كنترل داراي يك كاربر معمولي با مجوزهاي sudo است و فايروال را نيز فعال كرده است ، همانطور كه در راهنماي ستاپ اوليه سرور محازي توضيح داده شده است. براي راه اندازي Ansible ، لطفا راهنماي ما در مورد نحوه نصب و پيكربندي Ansible در اوبونتو 20.04 را دنبال كنيد.
• دو يا چند ميزبان Ansible. ميزبان Ansible هر دستگاهي است كه گره كنترل Ansible شما براي خودكار سازي پيكربندي شده باشد. اين راهنما فرض مي كند كه ميزبان هاي Ansible شما سرور محازي هاي Ubuntu 20.04 از راه دور هستند. اطمينان حاصل كنيد كه هر ميزبان Ansible داراي موارد زير است:
o كليد عمومي SSH گره كنترل Ansible به كليدهاي مجاز كاربر كاربر اضافه شده باشد. اين كاربر مي تواند root يا يك كاربر معمولي با امتيازات sudo باشد. براي تنظيم اين گزينه ، مي توانيد مرحله 2 راهنماي نحوه تنظيم كليدهاي SSH را در اوبونتو 20.04 دنبال كنيد.
• يك فايل inventory بر روي گره كنترل Ansible تنظيم شده باشد. اطمينان حاصل كنيد كه يك فايل inventory در آن وجود دارد كه شامل همه ميزبان هاي Ansible باشد. براي انجام اين كار ، لطفاً به راهنماي چگونگي تنظيم موجودي هاي Ansible مراجعه كنيد. سپس مطمئن شويد كه با اجراي تست اتصال مشخص شده در بخش تست اتصال به ميزبان هاي Ansible ، مي توانيد به گره هاي خود متصل شويد.
آزمايش اتصال به هاست هاي Ansible
دستور زير اتصال بين گره كنترل Ansible و تمام ميزبان هاي Ansible شما را آزمايش مي كند. اين دستور از كاربر سيستم فعلي و كليد SSH مربوطه آن به عنوان ورود از راه دور استفاده مي كند و گزينه -m را نيز شامل مي شود ، كه به Ansible مي گويد ماژول ping را اجرا كنيد. همچنين داراي پرچم -i است كه به Ansible ميگويد ميزبان هاي موجود در فايل inventory مشخص شده را ping كند.
$ ansible all -i inventory -m ping
اگر اولين بار است كه از طريق SSH به اين سرور محازي ها وصل مي شويد ، از شما خواسته مي شود كه صحت ميزبان هايي را كه از طريق Ansible به آنها وصل مي شويد ، تأييد كنيد. وقتي از شما خواسته شد ، yes را تايپ كنيد و سپس براي تأييد ENTER را بزنيد.
بايد خروجي مشابه اين دريافت كنيد:
Output
server1 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
server2 | SUCCESS => {
“changed”: false,
“ping”: “pong”
}
هنگامي كه يك پاسخ “pong” را از هاست دريافت كرديد ، بدان معني است كه ارتباط زنده است و شما آماده اجراي دستورات Ansible در آن سرور محازي هستيد.
تنظيم گزينه هاي اتصال
به طور پيش فرض ، Ansible سعي دارد با استفاده از صفحه كليد SSH مربوطه ، به عنوان كاربر از راه دور با همان نام كاربري سيستم فعلي شما ، به گره ها متصل شود.
براي اتصال به عنوان يك كاربر از راه دور متفاوت ، فرمان را با پرچم -u و نام كاربر در نظر گرفته شده اضافه كنيد:
$ ansible all -i inventory -m ping -u sammy
اگر از يك كليد SSH سفارشي براي اتصال به سرور محازي هاي از راه دور استفاده مي كنيد ، مي توانيد آن را در زمان اجرا با گزينه –private-key ارائه دهيد:
$ ansible all -i inventory -m ping –private-key=~/.ssh/custom_id
توجه: براي كسب اطلاعات بيشتر در مورد نحوه اتصال به گره ها ، لطفاً به راهنماي نحوه استفاده از Ansible ما مراجعه كنيد ، كه گزينه هاي اتصال بيشتري را نشان مي دهد.
هنگامي كه مي توانيد با استفاده از گزينه هاي مناسب اتصال برقرار كنيد ، مي توانيد فايل inventory خود را تنظيم كنيد تا به صورت خودكار كاربر از راه دور و كليد خصوصي خود را تنظيم كنيد ، تا تفاوتي با مقادير پيش فرض تعيين شده توسط Ansible نباشد. سپس ، لازم نيست آن پارامترها را در خط فرمان ارائه دهيد.
مثال فايل inventory زير متغير ansible_user را فقط براي سرور محازي server1 تنظيم مي كند:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_user=sammy
server2 ansible_host=203.0.113.112
Ansible اكنون هنگام اتصال به سرور محازي server1 از summy به عنوان كاربر پيش فرض از راه دور استفاده مي كند.
براي تنظيم كليد SSH سفارشي ، متغير ansible_ssh_private_key_file را به شرح زير وارد كنيد:
~/ansible/inventory
server1 ansible_host=203.0.113.111 ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id
server2 ansible_host=203.0.113.112
در هر دو مورد ، ما مقادير سفارشي را فقط براي server1 تنظيم كرده ايم. اگر مي خواهيد از همان تنظيمات براي چندين سرور محازي استفاده كنيد ، مي توانيد براي آن گروه child استفاده كنيد:
~/ansible/inventory
[group_a]
203.0.113.111
203.0.113.112
[group_b]
203.0.113.113
[group_a:vars]
ansible_user=sammy
ansible_ssh_private_key_file=/home/sammy/.ssh/custom_id
اين پيكربندي مثال فقط يك كاربر سفارشي و كليد SSH را براي اتصال به سرور محازي هاي ذكر شده در group_a اختصاص مي دهد.
تعيين اهدافي براي اجراي فرمان
هنگام اجراي دستورات ad hoc با Ansible ، مي توانيد ميزبان هاي فردي و همچنين هر تركيبي از گروه ها ، هاست ها و زير گروه ها را هدف قرار دهيد. به عنوان مثال ، به ترتيب زير مي توانيد اتصال را براي هر ميزبان در يك گروه به نام سرور محازي ها بررسي كنيد:
$ ansible servers -i inventory -m ping
همچنين مي توانيد ميزبان ها و گروه هاي مختلفي را با جدا كردن آنها با ستون هايي مشخص كنيد:
$ ansible server1:server2:dbservers -i inventory -m ping
براي درج يك استثناء در يك الگو ، از علامت تعجب ، پيشوند با كاراكتر ، به شرح زير استفاده كنيد. اين دستور بر روي همه سرور محازي هاي گروه 1 اجرا مي شود ، به جز server2:
$ ansible group1:!server2 -i inventory -m ping
در صورت تمايل به اجراي يك دستور فقط بر روي سرور محازي هايي كه جزئي از گروه 1 و گروه 2 هستند ،
به عنوان مثال ، بايد از & استفاده كنيد. فراموش نكنيد كه پيشوند آن را يك كاراكتر قرار دهيد:
$ ansible group1:&group2 -i inventory -m ping
براي كسب اطلاعات بيشتر در مورد چگونگي استفاده از الگوها هنگام تعيين اهداف براي اجراي فرمان ، لطفاً به مرحله 5 راهنماي ما در مورد نحوه تنظيم موجودي هاي Ansible مراجعه كنيد.
اجراي ماژول هاي Ansible
ماژول هاي Ansible قطعاتي از كد هستند كه مي توانند از playbooks و همچنين از خط فرمان دريافت شوند تا مراحل اجرا روي گره هاي از راه دور را تسهيل كنند. مثالها شامل ماژول apt ، براي مديريت بسته هاي سيستم در اوبونتو و ماژول user است كه براي مديريت كاربران سيستم استفاده مي شود. دستور ping مورد استفاده در سراسر اين راهنما نيز يك ماژول است كه به طور معمول براي تست اتصال از گره كنترل به هاست استفاده مي شود.
Ansible با مجموعه گسترده اي از ماژول هاي داخلي همراه است كه برخي از آنها به منظور فراهم آوردن قابليت هاي كامل ، نياز به نصب نرم افزار اضافي دارند. همچنين مي توانيد ماژول هاي دلخواه خود را با استفاده از زبان مورد نظر خود ايجاد كنيد.
براي اجراي يك ماژول با آرگومان ها ، پرچم -a را به همراه گزينه هاي مناسب در نقل قول اضافه كنيد ، مانند اين:
$ ansible target -i inventory -m module -a “module options”
به عنوان نمونه ، از ماژول apt براي نصب بسته tree روي server1 استفاده مي كند:
$ ansible server1 -i inventory -m apt -a “name=tree”
اجراي دستورات Bash
هنگامي كه يك ماژول از طريق گزينه -m ارائه نمي شود ، از ماژول فرمان به طور پيش فرض براي اجراي دستور مشخص شده روي سرور محازي (هاي) راه دور استفاده مي شود.
اين امر به شما امكان مي دهد تا بتوانيد تقريبا هر فرماني را اجرا كنيد كه بطور معمول از طريق يك ترمينال SSH اجرا ميشود، مادامي كه كاربر در حال اتصال مجوزهاي كافي داشته باشد و هيچ گونه اعلان تعاملي وجود نداشته باشد.
اين مثال فرمان uptime را در كليه سرور محازي ها از موجودي مشخص شده اجرا مي كند:
$ ansible all -i inventory -a “uptime”
Output
server1 | CHANGED | rc=0 >>
14:12:18 up 55 days, 2:15, 1 user, load average: 0.03, 0.01, 0.00
server2 | CHANGED | rc=0 >>
14:12:19 up 10 days, 6:38, 1 user, load average: 0.01, 0.02, 0.00
استفاده از افزايش امتيازات براي اجراي دستورات با sudo
اگر دستور يا ماژول مورد نظر براي اجرا روي هاستهاي از راه دور نياز به امتيازات گسترده سيستم يا كاربر سيستم ديگري دارد ، لازم است كه از ماژول افزايش امتياز Ansible استفاده كنيد ، كه ماژولي انتزاعي براي sudo و همچنين ساير نرم افزارهاي افزايش امتياز است كه توسط Ansible در سيستم عامل هاي مختلف پشتيباني مي شود.
به عنوان مثال ، اگر مي خواهيد يك فرمان tail را براي خروجي آخرين پيام هاي ورود به سيستم از خطاي Nginx روي سرور محازي به نام server1 از inventory ، اجرا كنيد ، بايد گزينه –become را به شرح زير وارد كنيد:
ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become
اين مي تواند معادل اجراي فرمان sudo tail /var/log/nginx/error.log بر روي ميزبان از راه دور ، با استفاده از كاربر سيستم فعلي محلي يا كاربر از راه دور تنظيم شده در فايل inventory شما باشد.
سيستم هاي افزايش امتياز مانند sudo اغلب با درخواست رمز ورود كاربر، از شما ميخواهند كه تأييد اعتبار كنيد. اين باعث مي شود كه Ansible در اجراي يك دستور يا اجراي playbook شكست بخورد. سپس مي توانيد از گزينه –ask-become-pass يا -K استفاده كنيد تا Ansible اعلان رمز عبور sudo را درخواست كند:
$ ansible server1 -i inventory -a “tail /var/log/nginx/error.log” –become -K
نصب و حذف بسته ها
مثال زير از ماژول apt براي نصب بسته nginx در تمام گره ها از فايل inventory استفاده مي كند:
$ ansible all -i inventory -m apt -a “name=nginx” –become -K
براي حذف بسته ، آرگومان state را درج كنيد و آن را روي absent تنظيم كنيد:.
$ ansible all -i inventory -m apt -a “name=nginx state=absent” –become -K
كپي كردن فايل ها
با ماژول file ، مي توانيد فايلها را بين گره كنترل و گره هاي مديريت شده ، از هر جهت كپي كنيد. دستور زير يك فايل متني محلي را براي همه ميزبانهاي از راه دور در فايل inventory مشخص شده كپي مي كند:
$ ansible all -i inventory -m copy -a “src=./file.txt dest=~/myfile.txt”
براي كپي كردن فايل از سرور محازي از راه دور در گره كنترل خود ، گزينه Remote_src را نيز اضافه كنيد:
$ ansible all -i inventory -m copy -a “src=~/myfile.txt remote_src=yes dest=./file.txt”
تغيير مجوزهاي فايل
براي تغيير مجوزها در فايل ها و دايركتوري ها روي گره هاي از راه دور خود ، مي توانيد از ماژول file استفاده كنيد.
دستور زير مجوزها را روي فايلي به نام file.txt كه در / var / www در ميزبان از راه دور قرار دارد تنظيم مي كند. اين قسمت كادر اجرايي فايل را روي 600 تنظيم مي كند ، كه مجوزهاي خواندن و نوشتن را فقط براي مالك فعلي فايل فعال مي كند. علاوه بر اين ، مالكيت آن فايل را براي كاربر و گروهي به نام sammy تعيين مي كند:
$ ansible all -i inventory -m file -a “dest=/var/www/file.txt mode=600 owner=sammy group=sammy” –become -K
از آنجا كه اين فايل در يك ديركتوري قرار دارد كه معمولاً متعلق به root است ، براي تغيير ويژگي هاي آن ممكن است به مجوزهاي sudo نياز داشته باشيم. به همين دليل گزينه هاي –become و -K را شامل مي شود. اينها براي اجراي دستور داراي امتيازات گسترده از سيستم تشديد امتياز Ansible استفاده مي كنند ، و اين امر باعث مي شود كه رمز عبور sudo را براي كاربر از راه دور تهيه كنيد.
ريستارت سرويس ها
شما مي توانيد از ماژول service براي مديريت سرويس هاي در حال اجرا روي گره هاي از راه دور كه توسط Ansible استفاده مي شود ، استفاده كنيد. اين امر به امتيازات گسترده سيستم نياز دارد ، بنابراين اطمينان حاصل كنيد كه كاربر از راه دور شما داراي مجوزهاي sudo است و شما از گزينه –become براي استفاده از سيستم افزايش امتياز Ansible استفاده مي كنيد. استفاده از -K باعث مي شود كه رمز عبور sudo را براي كاربر متصل كننده فراهم كنيد.
براي ريستارت سرويس nginx در تمام ميزبانهاي گروهي به نام webservers ، دستور زير را اجرا كنيد:
$ ansible webservers -i inventory -m service -a “name=nginx state=restarted” –become -K
ريستارت سرور محازي ها
اگرچه Ansible يك ماژول اختصاصي براي راه اندازي مجدد سرور محازي ها ندارد ، مي توانيد يك دستور bash صادر كنيد كه فرمان /sbin/reboot را روي ميزبان از راه دور فراخواني مي كند.
راه اندازي مجدد سرور محازي به امتيازات گسترده سيستم نياز دارد ، بنابراين اطمينان حاصل كنيد كه كاربر از راه دور شما داراي مجوزهاي sudo است و شما از گزينه –become براي استفاده از سيستم افزايش امتياز Ansible استفاده مي كنيد. استفاده از -K باعث مي شود رمز عبور sudo را براي كاربر متصل كننده فراهم كنيد.
هشدار: دستور زير سرور محازي (هاي) هدف Ansible را ريستارت مي كند. اين امر ممكن است باعث ايجاد اختلال موقتي در هر برنامه اي كه به آن سرور محازي ها متكي است، گردد.
براي ريستارت همه سرور محازي ها در يك گروه webservers دستور زير را اجرا كنيد :
$ ansible webservers -i inventory -a “/sbin/reboot” –become -K
جمع آوري اطلاعات در مورد گره هاي از راه دور
ماژول setup اطلاعات دقيق در مورد سيستمهاي از راه دور مديريت شده توسط Ansible ، كه به system facts نيز شناخته ميشود را نشان مي دهد.
براي به دست آوردن system facts براي server1 ، دستور زير را اجرا كنيد:
$ ansible server1 -i inventory -m setup
اين دستور مقدار زيادي از داده هاي JSON را چاپ مي كند كه حاوي جزئياتي درباره محيط سرور محازي از راه دور است. براي اينكه فقط مرتبط ترين اطلاعات چاپ شود، عبارت “gather_subset=min” را به شرح زير وارد كنيد:
$ ansible server1 -i inventory -m setup -a “gather_subset=min”
براي چاپ فقط موارد خاص JSON ، مي توانيد از آرگومان filter استفاده كنيد. كه يك الگوي wildcard را ميپذيرد كه براي مطابقت رشته ها ، مشابه fnmatch ، استفاده ميشود. به عنوان مثال ، براي به دست آوردن اطلاعات در مورد هر دو رابط شبكه ipv4 و ipv6 ، مي توانيد از * ipv * به عنوان فيلتر استفاده كنيد:
ansible server1 -i inventory -m setup -a “filter=*ipv*”
Output
server1 | SUCCESS => {
“ansible_facts”: {
“ansible_all_ipv4_addresses”: [
“203.0.113.111”,
“10.0.0.1”
],
“ansible_all_ipv6_addresses”: [
“fe80::a4f5:16ff:fe75:e758”
],
“ansible_default_ipv4”: {
“address”: “203.0.113.111”,
“alias”: “eth0”,
“broadcast”: “203.0.113.111”,
“gateway”: “203.0.113.1”,
“interface”: “eth0”,
“macaddress”: “a6:f5:16:75:e7:58”,
“mtu”: 1500,
“netmask”: “255.255.240.0”,
“network”: “203.0.113.0”,
“type”: “ether”
},
“ansible_default_ipv6”: {}
},
“changed”: false
}
اگر مي خواهيد ميزان استفاده از ديسك را بررسي كنيد ، مي توانيد يك دستور Bash را با استفاده از ابزار df اجرا كنيد ، به شرح زير:
$ ansible all -i inventory -a “df -h”
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
نتيجه
در اين راهنما ، ما نحوه استفاده از دستورات adible ad hoc را براي مديريت سرور محازي هاي از راه دور ، از جمله نحوه اجراي كارهاي متداول شامل ريستارت يك سرويس يا كپي كردن يك فايل از گره كنترل به سرور محازي هاي از راه دور كه توسط آن قابل كنترل است ، نشان داديم. همچنين نحوه جمع آوري اطلاعات از گره هاي از راه دور با استفاده از پارامترهاي محدود كننده و فيلتر را مشاهده كرديم.
به عنوان يك منبع اضافي ، مي توانيد مستندات رسمي Ansible را در مورد دستورات ad hoc بررسي كنيد.
خريد vps – خريد سرور مجازي – خريد سرور – سرور هلند – فروش vps – سرور مجازي آمريكا – خريدvps – سرور مجازي هلند – فروش سرور مجازي – سرور آمريكا – vps – سرور مجازي انگليس – سرور مجازي آلمان – سرور مجازي كانادا – خريد vps آمريكا – خريد وي پي اس – سرور – خريد سرور مجازي هلند – vps خريد – سرور مجازي فرانسه – سرور مجازي هلند – خريد vps آمريكا – خريد سرور مجازي ارزان هلند – vps – خريد vps هلند – خريد سرور مجازي آمريكا – خريد vps فرانسه – تست vps – سرور مجازي تست – سرور مجازي ويندوز – ارزانترين vps – خريد وي پي اس – vps ارزان –
- سه شنبه ۱۱ شهریور ۹۹ ۱۳:۴۲ ۳۰ بازديد
- ۰ نظر