برنامه نویسی

نحوه ایجاد دایرکتوری در Ansible

ایجاد دایرکتوری ها در Ansible برای تنظیم یک محیط سرور ساختاری مانند میزبانی یک برنامه وب مفید است.

به عنوان مثال ، یک برنامه ممکن است برای ورود به سیستم ، پرونده های پیکربندی و داده ها به پوشه ها نیاز داشته باشد. Ansible تضمین می کند که این دایرکتوری ها به طور مداوم در سرور ایجاد می شوند و تنها در صورت وجود آنها (idempotency) ، از کپی ها یا چک های دستی جلوگیری می کنند.

Ansible همچنین به شما امکان می دهد مجوزها و مالکیت را هنگام ایجاد فهرست تنظیم کنید ، اطمینان حاصل کنید که کاربران یا خدمات مناسب از دسترسی و تقویت امنیت برخوردار هستند.

این مقاله با استفاده از روشهای مختلف از جمله پرونده و – به صورت متناوب – ماژول های فرمان ، به ایجاد دایرکتوری ها در Ansible می پردازد. ما همچنین در مورد برخی از تکنیک های مدیریت این دایرکتوری ها ، مانند تنظیم مجوزها و حذف دایرکتوری ها بحث خواهیم کرد.

پیش نیازهای

در اینجا برخی از موارد مورد نیاز شما آورده شده است تا بتوانید نمونه های این مقاله را دنبال کنید:

  • نصب قابل حمل در دستگاه محلی یا گره کنترل خود
  • درک اساسی از ساختار کتاب بازی Ansible
  • دسترسی به یک سرور هدف که در آن Ansible می تواند برای اجرای این دستورات متصل شود – این می تواند یک VM محلی یا یک سرور از راه دور باشد

توضیحات نسخه ی نمایشی: سازماندهی سیاهههای مربوط به برنامه

برای مثال های زیر ، فرض کنید شما سرور را برای میزبانی یک برنامه وب تنظیم می کنید که برای نظارت و اشکال زدایی سیاهههای مربوط به آن ایجاد می کند.

برای سازماندهی این سیاههها ، می خواهید یک ساختار دایرکتوری را در سرور ایجاد کنید که در آن می توان گزارش های هر روز را به طور جداگانه ذخیره کرد.

این تنظیم به شما و سایر اعضای تیم کمک می کند تا به سرعت گزارش ها را از یک روز خاص یا الگوهای پیگیری در طول زمان پیدا کنید.

ایجاد دایرکتوری با Ansible

در این بخش ، چندین روش برای ایجاد دایرکتوری در Ansible را مرور خواهیم کرد. هر روش دارای نقاط قوت و شرایط مناسب برای استفاده است.

1. با استفاده از ماژول پرونده برای ایجاد فهرست

ماژول پرونده ابزار اصلی Ansible برای ایجاد ، اصلاح یا حذف پرونده ها و دایرکتوری ها است. این به گونه ای طراحی شده است که Idempotent باشد ، به این معنی که فقط در صورت لزوم اقدام می کند.

استفاده از ماژول پرونده برای ایجاد دایرکتوری کارآمد و ساده است. این اطمینان حاصل می کند که دایرکتوری وجود دارد و مجوزها را به صورت یک بار اعمال می کند. به عنوان مثال ، اگر می خواهید یک دایرکتوری برای ذخیره کردن سیاهههای مربوط به روز ایجاد کنید ، کتاب پخش Ansible شما به این شکل خواهد بود:

---
- hosts: all
  become: true
  tasks:
    - name: Create directory for daily logs
      ansible.builtin.file:
        path: /var/logs/app/daily_logs
        state: directory
        mode: '0755'
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در اینجا تفکیک این کتاب پخش وجود دارد:

  • path مکانی را که می خواهید دایرکتوری ایجاد شود ، مشخص می کند.
  • state: directory برای اطمینان از این مسیر دایرکتوری است. اگر وجود نداشته باشد ، Ansible آن را ایجاد می کند. اگر این کار را انجام دهد ، Ansible بدون خطا پیش خواهد رفت.
  • mode: '0755' مجوزهای فهرست را تنظیم می کند. “0755“کد دایرکتوری را توسط دیگران قابل خواندن و قابل اجرا می کند اما فقط توسط مالک قابل نوشتن است. برای کسب اطلاعات بیشتر در مورد”0755“کد و مجوزهای پرونده ، این مقاله را بررسی کنید.

پس از اجرای این کتاب پخش ، باید خروجی زیر را مشاهده کنید:

با استفاده از ماژول پرونده برای ایجاد فهرست

2. با استفاده از ماژول فرمان برای ایجاد دایرکتوری

اگرچه ماژول پرونده برای ایجاد دایرکتوری ها در Ansible ایده آل است ، در صورت نیاز به کنترل یا انعطاف پذیری بیشتر می توانید از ماژول فرمان نیز استفاده کنید. این ماژول به شما امکان می دهد دستورات پوسته را مستقیماً اجرا کنید ، مانند استفاده mkdirبشر

اگر دایرکتوری دیگری برای ذخیره کردن سیاهههای روزانه با استفاده از ماژول فرمان ایجاد کنید ، کتاب پخش شما به این شکل خواهد بود:

---
- hosts: all
  become: true
  tasks:
    - name: Create directory for daily logs with command module
      ansible.builtin.command:
        cmd: "mkdir -p /var/logs/app/daily_logs"
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در زیر یک تفکیک این کتاب پخش وجود دارد:

  • cmd: "mkdir -p /var/logs/app/daily_logs" اجرا می کند mkdir -p command، که اگر وجود نداشته باشد ، فهرست را ایجاد می کند.
  • در -p گزینه تضمین می کند که اگر قسمت هایی از ساختار دایرکتوری از قبل وجود نداشته باشد ، Ansible خطایی ایجاد نمی کند.

ماژول فرمان به خودی خود غیرمستقیم نیست ، اما mkdir -p در صورت وجود دایرکتوری ، با جلوگیری از خطا ، آن را ایمن می کند.

توجه: اگر به کنترل بیشتری بر محیط پوسته نیاز دارید یا می خواهید دستورات را ترکیب کنید ، این ماژول راحت تر است. با این حال ، این به طور معمول idempotent نیست ، بنابراین بهترین استفاده از آن است که یک پرونده نیازهای شما را برآورده نکند.

پس از اجرای این کتاب پخش ، باید خروجی زیر را مشاهده کنید:

با استفاده از ماژول فرمان برای ایجاد فهرست

3. ایجاد دایرکتوری مشروط

بعضی اوقات ممکن است بخواهید فقط در شرایط خاص یک دایرکتوری ایجاد کنید. به عنوان مثال ، شما ممکن است بخواهید دایرکتوری ورود به سیستم را فقط در صورت دایرکتوری دیگر ایجاد کنید ، /var/logs/app، در حال حاضر وجود دارد.

این نحوه ساخت کتاب بازی شما است:

---
- hosts: all
  become: true
  tasks:
    - name: Check if the app directory exists
      ansible.builtin.stat:
        path: /var/logs/app
      register: app_dir

    - name: Conditionally create directory for daily logs
      ansible.builtin.file:
        path: /var/logs/app/daily_logs
        state: directory
      when: app_dir.stat.exists
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از دفترچه فوق:

  • ansible.builtin.stat در /var/logs/app: این اولین کار بررسی می کند که آیا فهرست/var/logs/app وجود دارد و نتیجه را در متغیر APP_DIR ذخیره می کند.
  • when: app_dir.stat.exists: شرط زمانی که در کار دوم بررسی می کند اگر /var/logs/app وجود دارد اگر این کار را انجام دهد ، Ansible daily_logs زیرمجموعه اگر این کار را نکند ، کار رد می شود.

پس از اجرای این کتاب پخش ، باید خروجی زیر را مشاهده کنید:

آفرینش دایرکتوری مشروط

4. ایجاد یک ساختار دایرکتوری با چندین سطح (ایجاد بازگشتی)

بعضی اوقات شما نیاز به ایجاد یک ساختار دایرکتوری با چندین سطح تو در تو دارید. ماژول پرونده می تواند این کار را با یک پیکربندی ساده انجام دهد.

با استفاده از مثال مربوط به گزارش های روزانه ، بیایید بگوییم ساختاری مانند شما می خواهید /var/logs/app/daily_logs/yyyy/mm/dd جایی که سیاهههای مربوط به سال ، ماه و روز گروه بندی می شوند.

این نحوه ساخت کتاب بازی شما است:

---
- hosts: all
  become: true
  tasks:
    - name: Create nested directory structure for daily logs
      ansible.builtin.file:
        path: /var/logs/app/daily_logs/2024/11/07
        state: directory
        mode: '0755'
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

Ansible با مشخص کردن یک مسیر عمیقاً تو در تو در مسیر ، به طور خودکار هر دایرکتوری های والدین مفقود شده را ایجاد می کند و ایجاد بازگشتی را ساده می کند.

پس از اجرای این کتاب پخش ، باید خروجی زیر را مشاهده کنید:

ایجاد یک ساختار دایرکتوری با چندین سطح (ایجاد بازگشتی)

5. ایجاد چندین پرونده دایرکتوری (ایجاد تکراری)

بیایید بگوییم که شما باید در یک کار واحد چندین دایرکتوری ایجاد کنید. شما می توانید این کار را با تکرار لیستی از دایرکتوری ها انجام دهید.

این تکنیک برای راه اندازی چندین دایرکتوری در یک کار واحد کارآمد است. این امر به ویژه مفید است اگر برنامه شما به چندین پوشه که به طور جداگانه برای انواع مختلف داده ها یا پرونده های پیکربندی سازماندهی شده اند ، نیاز داشته باشد.

به عنوان مثال ، بیایید بگوییم که می خواهید پوشه هایی برای سیاهههای مربوط ، پیکربندی و داده های برنامه ایجاد کنید. شما کتاب بازی خود را اینگونه می نویسید:

---
- hosts: all
  become: true
  tasks:
    - name: Create multiple directories for app
      ansible.builtin.file:
        path: "{{ item }}"
        state: directory
        mode: '0755'
      loop:
        - /var/logs/app
        - /var/config/app
        - /var/data/app
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در این کتاب بازی ، loop به شما امکان می دهد تا در هر مسیر در لیست تکرار کنید و هر یک را به نوبه خود ایجاد کنید.

پس از اجرای این کتاب پخش ، باید خروجی زیر را مشاهده کنید:

ایجاد چندین پرونده دایرکتوری (ایجاد تکراری)

💡 شما همچنین ممکن است دوست داشته باشید:

مدیریت دایرکتوری های قابل اعتماد

اکنون که می دانید چگونه دایرکتوری ها را ایجاد کنید ، باید بدانید که چگونه آنها را مدیریت کنید. بخش های زیر شما را از طریق موارد متداول که ممکن است هنگام کار با دایرکتوری ها با استفاده از Ansible با آنها روبرو شوید ، به شما منتقل می کند:

مشخص کردن مجوزها

هنگامی که دایرکتوری ها را در Ansible ایجاد می کنید ، تنظیم مجوزها برای کنترل چه کسی می تواند پرونده ها را در آن دایرکتوری ها بخوانید ، بنویسید یا اجرا کنید. مجوزها با استفاده از پارامتر حالت ، که مجوزهای سبک یونیکس را تنظیم می کند ، مدیریت می شوند.

با استفاده از سناریو با فهرست برنامه های کاربردی برنامه ، بیایید بگوییم که می خواهید مجوزها را تنظیم کنید تا فقط مالک دسترسی کامل داشته باشد در حالی که دیگران فقط می توانند بخوانند و اجرا کنند.

شما کتاب بازی خود را اینگونه می نویسید:

---
- hosts: all
  become: true
  tasks:
    - name: Create a directory with specific permissions
      ansible.builtin.file:
        path: /var/logs/app/secure_logs
        state: directory
        mode: '0700'
        owner: root
        group: root
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از دفترچه فوق:

  • mode: '0700' مجوزها را به گونه ای تنظیم می کند که فقط صاحب دایرکتوری بتواند پرونده ها را در آن بخواند ، بنویسد و اجرا کند. دیگران دسترسی نخواهند داشت.
  • owner وت group تعریف کنید که چه کسی دارای دایرکتوری است و کدام گروه اجازه دسترسی به آن را دارند. در اینجا ، ما هر دو را برای ریشه کن کردن امنیت بالاتر تنظیم می کنیم.

اجرای کتاب Playbook در بالا خروجی زیر را به شما می دهد:

مشخص کردن مجوزها

دست زدن به دایرکتوری های موجود

همانطور که گفته شد ، ماژول پرونده به طور طبیعی idempotent است ، به این معنی که سعی نمی کند دایرکتوری را که از قبل وجود دارد ، بازآفرینی کند. با این حال ، شما ممکن است بخواهید خواصی مانند مجوزها یا مالکیت را در یک فهرست موجود به روز کنید بدون اینکه مطالب آن را مختل کنید.

به عنوان مثال ، بیایید بگوییم /var/logs/app/daily_logs دایرکتوری در حال حاضر وجود دارد ، اما شما می خواهید مجوزهای آن را به روز کنید تا محدودتر باشد.

شما کتاب بازی خود را مانند این ایجاد خواهید کرد:

---
- hosts: all
  become: true
  tasks:
    - name: Update permissions on an existing directory
      ansible.builtin.file:
        path: /var/logs/app/daily_logs
        state: directory
        mode: '0750'
        owner: appuser
        group: appgroup
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

با استفاده از این کتاب پخش ، حتی اگر دایرکتوری در حال حاضر وجود داشته باشد ، Setting State: Directory به Ansible اجازه می دهد مجوزها ، مالک و گروه را به روز کند. Ansible دوباره از ایجاد فهرست استفاده می کند اما هرگونه تغییر در کار را اعمال می کند.

پس از اجرای دفترچه بازی در بالا ، خروجی زیر را دریافت خواهید کرد:

دست زدن به دایرکتوری های موجود

حذف دایرکتوری

گاهی اوقات ، شما باید با حذف دایرکتوری هایی که دیگر نیازی به آن ندارند ، تمیز یا سازماندهی مجدد کنید. ماژول فایل به شما امکان می دهد با تنظیم یک دایرکتوری حذف کنید state: absentبشر

اگر تصمیم دارید یک دایرکتوری قدیمی را حذف کنید ، /var/logs/app/old_logs، برای آزاد کردن فضا یا مرتب کردن سرور خود ، کتاب بازی خود را اینگونه می نویسید:

---
- hosts: all
  become: true
  tasks:
    - name: Remove old log directory
      ansible.builtin.file:
        path: /var/logs/app/old_logs
        state: absent
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

در state: absent Field به Ansible می گوید تا دایرکتوری مشخص شده را به همراه هر محتوایی که ممکن است در آن باشد حذف کند.

این همان چیزی است که خروجی شما به نظر می رسد:

حذف دایرکتوری

دست زدن به پیوندهای نمادین

در موارد خاص ، ممکن است شما نیاز به ایجاد پیوندهای نمادین (میانبر) به دایرکتوری ها یا پرونده های موجود در جای دیگر سیستم ایجاد کنید.

این امر به خصوص مفید است اگر می خواهید دسترسی سریع به منابع مشترک از چندین مکان و بدون کپی کردن پرونده ها داشته باشید. ماژول فایل می تواند این پیوندهای نمادین را با استفاده از حالت: پیوند ایجاد کند.

به عنوان مثال ، بیایید بگوییم که می خواهید یک پیوند نمادین ایجاد کنید /var/logs/app/ این به دایرکتوری دیگری اشاره دارد ، /shared/logs/app/، بنابراین کاربران می توانند به راحتی به آن دسترسی پیدا کنند.

شما می توانید این کار را با استفاده از دفترچه بازی زیر انجام دهید:

---
- hosts: all
  become: true
  tasks:
    - name: Ensure the source directory exists
      ansible.builtin.file:
        path: /shared/logs/app
        state: directory

    - name: Create a symbolic link to shared logs
      ansible.builtin.file:
        src: /shared/logs/app
        dest: /var/logs/app/shared_logs
        state: link
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از دفترچه فوق ، دو کار دارید. اولین تضمین می کند که فهرست منبع با ایجاد آن با استفاده از ماژول فایل وجود دارد. برای کار دوم:

  • src فهرست اصلی است که پیوند به آن اشاره خواهد کرد.
  • dest جایی است که پیوند نمادین ایجاد می شود.
  • state: link برای ایجاد یک پیوند نمادین در مقصد مشخص شده به Ansible می گوید.

پس از اجرای دفترچه بازی در بالا ، باید خروجی زیر را دریافت کنید:

دست زدن به دایرکتوری های موجود

بهترین شیوه ها برای ایجاد فهرست در Ansible

ایجاد دایرکتوری در Ansible ساده است ، اما پیروی از این بهترین شیوه ها می تواند تنظیمات را در سراسر سرورهای شما تمیز تر ، سازمان یافته تر و امن تر کند.

در زیر چند نکته باید هنگام ایجاد دایرکتوری در Ansible به خاطر داشته باشید:

  • از idempotency به نفع خود استفاده کنید: idempotency ansible تضمین می کند که وظایف فقط در صورت لزوم انجام می شود. با تعریف یک کار ایجاد دایرکتوری با دولت: دایرکتوری ، Ansible بررسی می کند که آیا فهرست در حال حاضر وجود دارد و فقط در صورت عدم ایجاد آن ایجاد می کند.

این امر باعث می شود که کتابهای بازی شما مقاومت کنند و به آنها امکان می دهد بدون کپی کردن یا رونویسی دایرکتوری های موجود ، مجدداً اجرا شوند ، که می تواند هنگام مدیریت چندین سرور مفید باشد.

  • مجوزها را با دقت تنظیم کنید: هنگام ایجاد دایرکتوری ، مجوزهایی را تعیین کنید که دقیقاً مشخص می کند چه کسی می تواند به آنها دسترسی داشته باشد یا آنها را اصلاح کند. استفاده از مجوزها (مانند خواندن ، نوشتن و اجرای) به همراه قوانین مالکیت ، اطمینان حاصل می کند که دایرکتوری های حساس — مانند مواردی که حاوی سیاهههای مربوط یا پرونده های پیکربندی هستند — فقط در دسترس کاربران مجاز قرار می گیرند. این یک اقدام امنیتی مهم برای محافظت از داده های شما است.
  • از مسیرهای سخت کدگذاری خودداری کنید: بله ، ما در این مقاله مسیرهایی را سخت کرده ایم ، اما این برای اهداف نسخه ی نمایشی است. به جای تعبیه مسیرهای خاص به طور مستقیم در کتابهای بازی خود از متغیرها استفاده کنید. این باعث می شود کتابهای بازی شما با محیط های مختلف مانند تولید یا صحنه سازگار باشند. شما می توانید به راحتی متغیرها را به جای بازنویسی مسیرها ، صرفه جویی در وقت و حفظ کد خود آسان تر کنید.
  • سازماندهی ساختارهای دایرکتوری: برای تنظیمات دارای دایرکتوری های متعدد ، آنها را به صورت منطقی و مداوم ساختار دهید. این می تواند به معنای راه اندازی دایرکتوری های اصلی با پوشه های تو در تو باشد (مانند سال ، ماه یا ساختارهای مبتنی بر پروژه). سازماندهی دایرکتوری ها باعث می شود تیم شما حرکت ، درک و نگهداری را آسان تر کند و سیستم های فایل را تمیز نگه می دارد.
  • تست با محیط های مختلف: قبل از استقرار کتابهای پخش در تولید ، آنها را در یک محیط امن آزمایش کنید تا هرگونه مشکل را زودتر بگیرید. این امر به ویژه هنگام کار با ساختارهای دایرکتوری ، مجوزها یا متغیرهایی که ممکن است در محیط ها متفاوت باشد ، مهم است. آزمایش به اطمینان حاصل می شود که کتابهای بازی شما به راحتی و به طور قابل پیش بینی اجرا می شوند و خطر نتایج غیر منتظره را به حداقل می رساند.

چگونه Spacelift می تواند به شما در پروژه های قابل قبول کمک کند

اکوسیستم پر جنب و جوش Spacelift و جریان عالی Gitops می تواند شما را در مدیریت و ارکستر Ansible به شما کمک کند. با معرفی Spacelift در بالای Ansible ، می توانید به راحتی بر اساس درخواست های کشش ، گردش کار سفارشی ایجاد کرده و هرگونه بررسی لازم برای انطباق لازم را برای سازمان خود اعمال کنید.

یکی دیگر از مزایای استفاده از Spacelift این است که شما می توانید ابزارهای مختلف زیرساختی مانند Ansible ، Terraform ، Pulumi ، AWS CloudFormation و حتی Kubernetes را از همان مکان مدیریت کرده و پشته های آنها را با گردش کار در سراسر ابزارها ترکیب کنید.

آخرین پیشرفت های غیرقابل توصیف ما سه مورد از بزرگترین چالش هایی را که مهندسان هنگام استفاده از Ansible با آن روبرو هستند حل می کند:

  • داشتن یک مکان متمرکز که در آن می توانید کتابهای پخش خود را اجرا کنید
  • ترکیب IAC با مدیریت پیکربندی برای ایجاد یک گردش کار واحد
  • دریافت بینش در مورد آنچه که اجرا شد و کجا

تهیه ، پیکربندی ، حاکمیت و حتی ارکستر کردن ظروف خود را می توان با یک گردش کار واحد انجام داد و عناصر را به بخش های کوچکتر جدا کرد تا مسائل راحت تر شناسایی شود.
اگر می خواهید در مورد استفاده از Spacelift با Ansible اطلاعات بیشتری کسب کنید ، مستندات ما را بررسی کنید ، راهنمای Ansible ما را بخوانید یا با یکی از مهندسان ما یک نسخه ی نمایشی رزرو کنید.

نکات کلیدی

در این مقاله ، ما تکنیک های اساسی برای ایجاد و مدیریت دایرکتوری ها را در Ansible پوشش دادیم. ما با اصول ایجاد دایرکتوری ها با استفاده از ماژول های پرونده و فرمان شروع کردیم و بررسی کردیم که چگونه idempotency ansible تضمین می کند که دایرکتوری ها فقط در صورت لزوم ایجاد شوند. این بدان معناست که کتابهای پخش شما می توانند بدون تکثیر یا تغییرات ناخواسته اجرا شوند.

ما همچنین هنگام برخورد با دایرکتوری ها در Ansible بهترین روشها را مورد بحث قرار دادیم. این موارد شامل تنظیم مجوزها به طور مستقیم در کتابهای پخش برای بهبود امنیت و استفاده از متغیرها برای مسیرها به جای اینکه آنها را برای انعطاف پذیری سخت می کند.

ایجاد دایرکتوری در Ansible یک کار اساسی است و تسلط بر این تکنیک ها به شما امکان می دهد تا زیرساخت های خود را به طور مؤثر و با اطمینان مدیریت کنید.

نوشته شده توسط الهی اودازی

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا