انجمنهای فارسی اوبونتو
کمک و پشتیبانی => شبکه و سرویس دهندهها => نویسنده: esmaeelE در 10 اردیبهشت 1403، 12:39 بظ
-
میخواهم برای مدیریت یک ماشین با سیستمعامل دبیان پایدار و اتصال ssh از انسیبل (Ansible) استفاده میکنیم.
دسترسی ssh به این ماشین از گره مرکزی با کاربری به نام user و کلمهٔ عبور برقرار است.
خود این کاربر میتواند با sudo عملیات مدیریتی نظیر نصب نرمافزار را انجام دهد.
اجرا فرمان زیر با ansible برای به روزرسانی سیاههٔ بستهها با خطای دسترسی رو به رو میشود.
$ ansible -i inventory/hosts a_linux_template -m command -a "apt update"
هدف راهاندازی اولیه انسیبل است به طوری که بتواند با کاربر user عملیات مدیریتی را انجام دهد.
و اجرای فرمان بالا تنها برای بررسی امکان اجرای دستوراتی با دسترسی superuser است.
خطا
1.1.1.1 | FAILED | rc=100 >>
Reading package lists...
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)non-zero return code
گزینهٔ K- هم برای پرسیدن کلمهٔ عبور مشکل را برطرف نمیکند. کلمهٔ عبور BECOME password را وارد میکنم ولی خطا تغییری نمیکند.
محتوای inventory
[a_linux_template]
1.1.1.1 ansible_user=user ansible_ssh_private_key_file=~/.ssh/id_rsa
پرسش
چه تنظیمی دیگری باید اعمال شود که ansible بتواند با کاربر user کارهای مدیریتی را انجام دهد؟
-
باید برای taskها توی انسیبل become: true رو تعریف کنی.
-
باید برای taskها توی انسیبل become: true رو تعریف کنی.
سپاسگزارم با این تنظیم درست شد.
cat playbook/nginx.yml
---
- hosts: a_linux_template
become: true
tasks:
- name: install nginx
apt: name=nginx state=latest
- name: start nginx
service:
name: nginx
state: started
# become: true
-
عالی. فقط دو تا نکته:
۱. به جای پیمانهٔ apt از package استفاده کن که عمومیتر باشه
۲. خدمت رو مستقیم توی همون تسک صدا نکن. یه handler تعریف کن که آخرش بره بررسی کنه خدمت رو.
-
عالی. فقط دو تا نکته:
۱. به جای پیمانهٔ apt از package استفاده کن که عمومیتر باشه
۲. خدمت رو مستقیم توی همون تسک صدا نکن. یه handler تعریف کن که آخرش بره بررسی کنه خدمت رو.
این شکلی شد.
$ cat nginx.yml
---
- hosts: a_linux_template
become: true
tasks:
- name: install nginx
package: name=nginx state=latest
notify:
- start nginx service
handlers:
- name: start nginx
service:
name: nginx
state: restarted
اجرا
$ ansible-playbook -i inventory/ playbook/nginx.yml -K
اجرای مستقیم دستورات هم با انتخاب b- برای BECOME کار میکند.
$ ansible -i inventory/hosts a_linux_template -m command -a "apt update" -K -b
BECOME password:
1.1.1.1 | CHANGED | rc=0 >>
Hit:1 http://security.debian.org/debian-security bookworm-security InRelease
Hit:2 http://deb.debian.org/debian bookworm InRelease
Hit:3 http://deb.debian.org/debian bookworm-updates InRelease
Reading package lists...
Building dependency tree...
Reading state information...
5 packages can be upgraded. Run 'apt list --upgradable' to see them.
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.