همانطور که با دستورات معمولی که در ترمینال اجرا میکنید، آشنا هستید، برخی از کارها نیاز به دسترسی خاص دارند تا انسیبل بتواند آنها را با موفقیت روی گرههای راه دور اجرا کند.
مهم است که مکانیزم افزایش دسترسی در انسیبل را درک کنید تا بتوانید تسکهای خود را با اجازههای مناسب اجرا کنید. به صورت پیشفرض، تسکها با کاربر متصل شده اجرا میشوند – این کاربر ممکن است root یا هر کاربر معمولی با دسترسی SSH به گرههای راه دور در فایل اینونتوری باشد.
برای اجرای دستوری با دسترسیهای بیشتر، مانند دستوری که نیاز به sudo دارد، باید در play خود، دایرکتیو become را روی yes تنظیم کنید. این کار میتواند به صورت یک تنظیم جهانی برای همه تسکهای آن play باشد یا به عنوان یک دستور جدا برای هر تسک اعمال شود. بسته به نحوه تنظیم sudo کاربر روی گرههای راه دور، ممکن است لازم باشد پسورد sudo کاربر را نیز وارد کنید. مثال زیر، کش apt را بروز میکند که نیاز به دسترسی root دارد.
یک فایل جدید به نام playbook-07.yml در پوشه ansible-practice خود ایجاد کنید:
nano ~/ansible-practice/playbook-07.yml
سپس خطوط زیر را به فایل جدید اضافه کنید:
---
- hosts: all
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
بعد از اتمام کار، فایل را ذخیره و ببندید.
برای اجرای این playbook، باید گزینه -K را در دستور ansible-playbook قرار دهید. این باعث میشود انسیبل از شما پسورد sudo کاربر مشخص شده را بخواهد.
ansible-playbook -i inventory playbook-07.yml -u sammy -K
شما همچنین میتوانید کاربری که میخواهید در هنگام اجرای یک تسک یا play به آن سوییچ کنید را تغییر دهید. برای این کار، دایرکتیو become_user را روی نام کاربر مقصد تنظیم کنید. این حالت وقتی مفید است که چند تسک در playbook نیاز به sudo دارند و چند تسک دیگر باید با کاربر عادی اجرا شوند.
مثال زیر نشان میدهد که تمام تسکهای این play به صورت پیشفرض با sudo اجرا میشوند. این تنظیم در سطح play و بلافاصله بعد از تعریف hosts قرار گرفته است. اولین تسک یک فایل روی /tmp با دسترسی root ایجاد میکند، از آنجا که مقدار پیشفرض become_user هم root است. اما تسک آخر، become_user خودش را مشخص کرده است.
یک فایل جدید به نام playbook-08.yml در پوشه ansible-practice خود ایجاد کنید:
nano ~/ansible-practice/playbook-08.yml
محتوای زیر را در فایل جدید اضافه کنید:
---
- hosts: all
become: yes
vars:
user: "{{ ansible_env.USER }}"
tasks:
- name: Create root file
file:
path: /tmp/my_file_root
state: touch
- name: Create user file
become_user: "{{ user }}"
file:
path: /tmp/my_file_{{ user }}
state: touch
پس از پایان، فایل را ذخیره و ببندید.
مقدار ansible_env.USER شامل نام کاربر متصل شده است که هنگام اجرای دستور ansible-playbook با گزینه -u تعیین میشود. در این راهنما، اتصال با کاربر sammy انجام میشود:
ansible-playbook -i inventory playbook-08.yml -u sammy -K
Output
BECOME password:
PLAY [all] **********************************************************************************************
TASK [Gathering Facts] **********************************************************************************
ok: [203.0.113.10]
TASK [Create root file] *********************************************************************************
changed: [203.0.113.10]
TASK [Create user file] *********************************************************************************
changed: [203.0.113.10]
PLAY RECAP **********************************************************************************************
203.0.113.10 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
بعد از اجرای playbook، میتوانید به گرههای راه دور وارد شوید و مشاهده کنید که دو فایل جدید در مسیر /tmp ایجاد شدهاند، هر کدام با اطلاعات مالکیت متفاوت:
ssh sammy@203.0.113.10
ls -la /tmp/my_file*
Output
-rw-r--r-- 1 root root 0 Apr 14 13:19 /tmp/my_file_root
-rw-r--r-- 1 sammy sudo 0 Apr 14 12:07 /tmp/my_file_sammy
برای اطلاعات بیشتر درباره افزایش دسترسی در انسیبل، لطفاً به مستندات رسمی مراجعه کنید.
از این که با پارمین کلود همراه بودید سپاسگزاریم.
نظرات کاربران