انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => شبکه و سرویس‌ دهنده‌ها => نویسنده: esmaeelE در 10 اردیبهشت 1403، 12:39 ب‌ظ

عنوان: نصب برنامه روی ماشین راه دور با Ansible
ارسال شده توسط: 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 کارهای مدیریتی را انجام دهد؟


عنوان: پاسخ : نصب برنامه روی ماشین راه دور با Ansible
ارسال شده توسط: دانیال بهزادی در 10 اردیبهشت 1403، 01:53 ب‌ظ
باید برای taskها توی انسیبل become: true رو تعریف کنی.
عنوان: پاسخ : نصب برنامه روی ماشین راه دور با Ansible
ارسال شده توسط: esmaeelE در 10 اردیبهشت 1403، 02:48 ب‌ظ
باید برای 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
عنوان: پاسخ : نصب برنامه روی ماشین راه دور با Ansible
ارسال شده توسط: دانیال بهزادی در 11 اردیبهشت 1403، 05:35 ب‌ظ
عالی. فقط دو تا نکته:
۱. به جای پیمانهٔ apt از package استفاده کن که عمومی‌تر باشه
۲. خدمت رو مستقیم توی همون تسک صدا نکن. یه handler تعریف کن که آخرش بره بررسی کنه خدمت رو.
عنوان: پاسخ : نصب برنامه روی ماشین راه دور با Ansible
ارسال شده توسط: esmaeelE در 12 اردیبهشت 1403، 04:38 ب‌ظ
عالی. فقط دو تا نکته:
۱. به جای پیمانهٔ 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.