په ځواب کې متغیرونو ته د سیسټم چلند

د ځواب وړ دیوپس کوډ سټایل

اې! زما نوم دی ډینس کالیوژني زه د پرمختیایی پروسې اتومات څانګه کې د انجینر په توګه کار کوم. هره ورځ، د نوي غوښتنلیک جوړونه په سلګونو کمپاین سرورونو ته لیږدول کیږي. او پدې مقاله کې ، زه د دې اهدافو لپاره د ځواب وړ کارولو تجربه شریکوم.

دا لارښود په ګمارلو کې د متغیرونو تنظیم کولو لاره وړاندې کوي. دا لارښود د هغو کسانو لپاره ډیزاین شوی چې دمخه یې په خپلو لوبو کتابونو کې رولونه کاروي او لوستل کوي غوره تمریناتمګر د ورته ستونزو سره مخ کیږي:

  • په کوډ کې د متغیر موندلو سره، دا ناشونې ده چې سمدلاسه پوه شي چې دا د څه لپاره مسؤل دی؛
  • ډیری رولونه شتون لري، او متغیرات باید د یو ارزښت سره تړاو ولري، مګر دا کار نه کوي؛
  • نورو ته په تشریح کولو کې ستونزې شتون لري چې ستاسو د لوبو کتابونو کې د متغیراتو منطق څنګه کار کوي

موږ په خپل شرکت کې د پروژو په اړه د دې ستونزو سره مخ شو، چې په پایله کې موږ په خپلو لوبو کتابونو کې د تغیراتو فارمیټ کولو قواعدو ته ورسیدو، کوم چې دا ستونزې تر یوې اندازې حل کړې.

په ځواب کې متغیرونو ته د سیسټم چلند

په رولونو کې تغیرات

A رول د جلا کولو سیسټم څیز دی. د سیسټم د هر څیز په څیر، دا باید د سیسټم د پاتې برخې سره د تعامل لپاره انٹرفیس ولري. د رول متغیرونه داسې یو انٹرفیس دی.

د مثال په توګه، رول واخلئ api، کوم چې په سرور کې د جاوا غوښتنلیک نصبوي. کوم متغیرات لري؟

په ځواب کې متغیرونو ته د سیسټم چلند

د رول متغیرونه د ډول له مخې په 2 ډولونو ویشل کیدی شي:

1. Свойства
    a) независимые от среды
    б) зависимые от среды
2. Связи
    a) слушатели 
    б) запросы внутри системы
    в) запросы в среду

متغیر ملکیتونه متغیرات دي چې د رول چلند تعریفوي.

د پوښتنې متغیرات متغیرونه دي چې ارزښت یې د رول لپاره بهرنۍ سرچینې ټاکلو لپاره کارول کیږي.

متغیر اوریدونکي متغیرونه دي چې ارزښت یې د پوښتنې متغیرونو جوړولو لپاره کارول کیږي.

له بلې خوا، 1a، 2a، 2b هغه متغیرونه دي چې په چاپیریال پورې اړه نلري (اوسپنه، بهرنۍ سرچینې، او نور) او د ډیفالټ رول کې د ډیفالټ ارزښتونو سره ډک کیدی شي. په هرصورت، د 1.b او 2.c په څیر متغیرونه د "مثال" پرته د نورو ارزښتونو سره نشي ډک کیدی، ځکه چې دوی به د چاپیریال پورې اړوند له موقف څخه موقف ته بدلون ورکړي.

کوډ سټایل

  • د متغیر نوم باید د رول نوم سره پیل شي. دا به دا اسانه کړي چې په راتلونکي کې معلومه کړي چې متغیر له کوم رول څخه دی او د څه لپاره مسؤل دی.
  • کله چې په رولونو کې متغیرونه وکاروئ، تاسو باید ډاډه اوسئ چې د encapsulation اصول تعقیب کړئ او متغیرونه وکاروئ چې یا په رول کې تعریف شوي یا په هغه رولونو کې چې اوسنۍ پورې اړه لري.
  • د متغیرونو لپاره د لغتونو کارولو څخه ډډه وکړئ. ځواب ورکوونکي تاسو ته اجازه نه ورکوي چې په یوه قاموس کې انفرادي ارزښتونه په اسانۍ سره پورته کړي.

    د بد متغیر یوه بیلګه:

    myrole_user:
        login: admin
        password: admin

    دلته، ننوت منځنی متغیر دی، او پټنوم د متغیر متغیر دی. خو
    ځکه چې دوی په لغت کې یوځای شوي، تاسو باید دا په بشپړ ډول مشخص کړئ
    تل. کوم چې ډیر ناشونی دی. دا طریقه غوره ده:

    myrole_user_login: admin
    myrole_user_password: admin

د پلی کولو کتابونو کې تغیرات

کله چې د پلي کولو پلی بوک تالیف کول (له دې وروسته د پلی بوک په توګه راجع کیږي) ، موږ دې قاعدې ته غاړه کیږدو چې دا باید په جلا ذخیره کې ځای په ځای شي. لکه د رولونو په څیر: هر یو په خپل ګیټ ذخیره کې. دا تاسو ته اجازه درکوي چې پوه شئ چې رولونه او د لوبې کتاب د پلي کولو سیسټم مختلف خپلواک توکي دي، او په یو څیز کې بدلون باید د بل عملیات اغیزه ونکړي. دا د متغیرونو اصلي ارزښتونو بدلولو سره ترلاسه کیږي.

کله چې د لوبې کتاب تالیف کړئ، د لنډیز لپاره، دا ممکنه ده چې د رول متغیرونو اصلي ارزښتونه په دوو ځایونو کې له منځه یوسي: د لوبې کتاب متغیرونو کې او د انوینٹری تغیراتو کې.

mydeploy                        # Каталог деплоя
├── deploy.yml                  # Плейбук деплоя
├── group_vars                  # Каталог переменных плейбука
│   ├── all.yml                 # Файл для переменных связи всей системы
│   └── myapi.yml               # Файл переменных свойств группы myapi
└── inventories                 #
    └── prod                    # Каталог окружения prod
        ├── prod.ini            # Инвентори файл
        └── group_vars          # Каталог для переменных инвентори
            └── myapi           #
                ├── vars.yml    # Средозависимые переменные группы myapi
                └── vault.yml   # Секреты (всегда средозависимы) *

* - متغیرات او والټونه

توپیر دا دی چې د پلی بوک متغیرونه تل کارول کیږي کله چې د دې سره په ورته کچه موقعیت لرونکي پلی بوکونو ته زنګ ووهئ. دا پدې مانا ده چې دا متغیرونه د متغیرونو اصلي ارزښتونو بدلولو لپاره خورا ښه دي چې په چاپیریال پورې اړه نلري. برعکس، د موجودیت متغیرونه به یوازې د یو ځانګړي چاپیریال لپاره وکارول شي، کوم چې د چاپیریال ځانګړي متغیرونو لپاره غوره دی.

دا مهمه ده چې په یاد ولرئ چې متغیر لومړیتوب به تاسو ته اجازه ورنکړي چې متغیرونه لومړی د پلی بوک متغیرونو کې بیا تعریف کړئ او بیا په جلا توګه په ورته لیست کې.

دا پدې مانا ده چې دمخه پدې مرحله کې تاسو اړتیا لرئ پریکړه وکړئ چې ایا متغیر چاپیریال پورې تړلی دی که نه او په سم ځای کې یې ځای په ځای کړئ.

د مثال په توګه، په یوه پروژه کې، د SSL فعالولو مسؤلیت متغیر د اوږدې مودې لپاره په چاپیریال پورې تړلی و، ځکه چې موږ نشو کولی SSL په یو موقف کې زموږ د کنټرول څخه بهر د دلیلونو لپاره فعال کړو. وروسته له دې چې موږ دا مسله حل کړه، دا منځنۍ خپلواکه شوه او د پلی بوک متغیرونو ته لاړ.

د ګروپونو لپاره د ملکیت تغیرات

راځئ چې د مختلف جاوا غوښتنلیک سره د سرورونو 1 ګروپونو اضافه کولو سره په 2 شکل کې زموږ ماډل پراخه کړو ، مګر د مختلف تنظیماتو سره.

په ځواب کې متغیرونو ته د سیسټم چلند

تصور وکړئ چې د لوبې کتاب به پدې قضیه کې څنګه ښکاري:

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

موږ په پلی بوک کې درې ډلې لرو ، نو سپارښتنه کیږي چې په یوځل کې د ګروپ_vars انوینټري متغیرونو او د پلی بوک متغیرونو کې د ډیری ګروپ فایلونو رامینځته کړئ. پدې قضیه کې د یوې ډلې فایل په پلی بوک کې ستاسو د غوښتنلیک د یوې برخې توضیحات دي. کله چې تاسو د پلی بوک متغیرونو کې د ګروپ فایل خلاص کړئ ، تاسو سمدلاسه ټول توپیرونه ګورئ چې ډلې ته ټاکل شوي رولونو د ډیفالټ چلند څخه. د انوینٹری تغیراتو کې: د بوت څخه تر بوت پورې د ډلې چلند کې توپیر.

کوډ سټایل

  • هڅه وکړئ د host_vars متغیرونه په هیڅ ډول ونه کاروئ، ځکه چې دوی سیسټم نه تشریح کوي، مګر یوازې یو ځانګړی قضیه، کوم چې په اوږد مهال کې به د پوښتنو المل شي: "ولې دا کوربه د نورو څخه توپیر لري؟"، ځواب یې کوم دی. تل موندل اسانه ندي.

د لینک متغیر

په هرصورت، دا د ملکیت متغیرونو په اړه دی، مګر د لینک متغیرونو په اړه څه؟
د دوی توپیر دا دی چې دوی باید په مختلفو ګروپونو کې ورته ارزښت ولري.

په پیل کې شتون درلود مفکوره د فورمې یو شیطاني جوړښت وکاروئ:
hostvars[groups['bbauth'][0]]['auth_bind_port']خو سمدلاسه پریښودل شو
ځکه چې نیمګړتیاوې لري. لومړی، لویوالی. دوهم، په ګروپ کې د یو ځانګړي کوربه انحصار. دریم، دا اړینه ده چې د ګمارنې پیل کولو دمخه د ټولو کوربه څخه حقایق راټول کړئ، که موږ نه غواړو یو نا تعریف شوي متغیر غلطی ترلاسه کړو.

د پایلې په توګه، پریکړه وشوه چې د لینک متغیرونو څخه کار واخلئ.

د لینک متغیر هغه متغیرونه دي چې د لوبې کتاب پورې اړه لري او د سیسټم څیزونو سره د نښلولو لپاره اړین دي.

د لینک متغیرونه په عمومي سیسټم متغیرونو کې ډک شوي group_vars/all/vars او د هرې ډلې څخه د ټولو اوریدونکي متغیرونو په لرې کولو سره رامینځته کیږي ، او د هغه ډلې نوم اضافه کوي چې له هغه څخه اوریدونکی د متغیر په پیل کې لرې شوی و.

په دې توګه، د نومونو یووالي او غیر تقاطع تضمین کیږي.

راځئ هڅه وکړو چې د پورته مثال څخه متغیرونه وتړو:

په ځواب کې متغیرونو ته د سیسټم چلند

تصور وکړئ چې موږ متغیرونه لرو چې په یو بل پورې اړه لري:

# roles/api/defaults:
# Переменная запроса
api_auth1_address: "http://example.com:80"
api_auth2_address: "http://example2.com:80"

# roles/auth/defaults:
# Переменная слушатель
auth_bind_port: "20000"

راځئ چې دا په عام متغیرونو کې واچوو group_vars/all/vars ټول اوریدونکي، او د نوم سره د ډلې نوم اضافه کړئ:

# group_vars/all/vars
bbauth_auth_bind_port: "20000"
ghauth_auth_bind_port: "30000"

# group_vars/bbauth/vars
auth_bind_port: "{{ bbauth_auth_bind_port }}"

# group_vars/ghauth/vars
auth_bind_port: "{{ ghauth_auth_bind_port }}"

# group_vars/myapi/vars
api_auth1_address: "http://{{ bbauth_auth_service_name }}:{{ bbauth_auth_bind_port }}"
api_auth2_address: "http://{{ ghauth_auth_service_name }}:{{ ghauth_auth_bind_port }}"

اوس، د نښلونکي ارزښت بدلولو سره، موږ به ډاډه شو چې غوښتنه به ورته بندر ته لاړ شي.

کوډ سټایل

  • څرنګه چې رولونه او ډلې په سیسټم کې مختلف توکي دي، تاسو اړتیا لرئ چې د دوی لپاره مختلف نومونه ولرئ، بیا د لینک متغیر به په سمه توګه وښيي چې دوی د سرورونو یوې ځانګړې ډلې پورې اړه لري، نه په سیسټم کې رول ته.

د چاپیریال فایلونه

رولونه کولی شي فایلونه وکاروي چې له چاپیریال څخه چاپیریال ته توپیر لري.

د ایس ایس ایل سندونه د ورته فایلونو بیلګه ده. دوی د متن په توګه ذخیره کړئ
په متغیر کې خورا اسانه ندي. مګر دا اسانه ده چې دوی ته لاره په متغیر کې ذخیره کړئ.

د مثال په توګه، موږ متغیر کاروو api_ssl_key_file: "/path/to/file".

څرنګه چې دا څرګنده ده چې کلیدي سند به له چاپیریال څخه چاپیریال ته بدلون ومومي، دا د چاپیریال پورې تړلی متغیر دی، پدې معنی چې دا باید په فایل کې موقعیت ولري.
group_vars/myapi/vars د متغیرونو لیست، او د 'مثال په توګه' ارزښت لري.

په دې قضیه کې ترټولو اسانه لار دا ده چې کلیدي فایل د لارې په اوږدو کې د پلی بوک ذخیره کې واچوئ
files/prod/certs/myapi.keyنو د متغیر ارزښت به دا وي:
api_ssl_key_file: "prod/certs/myapi.key". اسانتیا په دې حقیقت کې ده چې هغه خلک چې په یو ځانګړي موقف کې د سیسټم ځای پرځای کولو مسؤل دي هم د دوی فایلونو ذخیره کولو لپاره په ذخیره کې خپل ځانګړی ځای لري. په ورته وخت کې ، دا امکان لري چې په سرور کې سند ته مطلق لاره مشخص کړئ ، په هغه صورت کې چې سندونه د بل سیسټم لخوا چمتو شوي وي.

په یو چاپیریال کې ډیری ولاړ دي

ډیری وختونه په ورته چاپیریال کې د لږترلږه توپیرونو سره ډیری نږدې ورته سټینډونو ځای په ځای کولو ته اړتیا وي. په دې حالت کې، موږ د چاپیریال پورې تړلي متغیرونه په هغو ویشو چې په دې چاپیریال کې بدلون نه راولي او هغه چې کوي. او موږ وروستی په مستقیم ډول پخپله د لیست فایلونو کې اخلو. د دې لاسوهنې وروسته ، دا ممکنه کیږي چې په مستقیم ډول د چاپیریال لارښود کې بل موجودیت رامینځته کړئ.

دا به د ګروپ_vars لیست بیا وکاروي او د دې وړتیا هم ولري چې ځینې متغیرونه په مستقیم ډول د ځان لپاره بیا تعریف کړي.

د ګمارنې پروژې لپاره وروستی لارښود جوړښت:

mydeploy                        # Каталог деплоя
├── deploy.yml                  # Плейбук деплоя
├── files                       # Каталог для файлов деплоя
│   ├── prod                    # Католог для средозависимых файлов стенда prod
│   │   └── certs               # 
│   │       └── myapi.key       #
│   └── test1                   # Каталог для средозависимых файлов стенда test1
├── group_vars                  # Каталог переменных плейбука
│   ├── all.yml                 # Файл для переменных связи всей системы
│   ├── myapi.yml               # Файл переменных свойств группы myapi
│   ├── bbauth.yml              # 
│   └── ghauth.yml              #
└── inventories                 #
    ├── prod                    # Каталог окружения prod
    │   ├── group_vars          # Каталог для переменных инвентори
    │   │   ├── myapi           #
    │   │   │   ├── vars.yml    # Средозависимые переменные группы myapi
    │   │   │   └── vault.yml   # Секреты (всегда средозависимы)
    │   │   ├── bbauth          # 
    │   │   │   ├── vars.yml    #
    │   │   │   └── vault.yml   #
    │   │   └── ghauth          #
    │   │       ├── vars.yml    #
    │   │       └── vault.yml   #
    │   └── prod.ini            # Инвентори стенда prod
    └── test                    # Каталог окружения test
        ├── group_vars          #
        │   ├── myapi           #
        │   │   ├── vars.yml    #
        │   │   └── vault.yml   #
        │   ├── bbauth          #
        │   │   ├── vars.yml    #
        │   │   └── vault.yml   #
        │   └── ghauth          #
        │       ├── vars.yml    #
        │       └── vault.yml   #
        ├── test1.ini           # Инвентори стенда test1 в среде test
        └── test2.ini           # Инвентори стенда test2 в среде test

خلاصه کول

د مقالې سره سم د متغیرونو تنظیم کولو وروسته: د متغیرونو سره هر فایل د یو ځانګړي کار لپاره مسؤل دی. او له هغه وخته چې فایل ځینې دندې لري، نو دا ممکنه شوه چې یو کس د هرې فایل د سموالي لپاره مسؤل وټاکي. د مثال په توګه ، د سیسټم پلي کولو پراختیا کونکی د پلی بوک متغیرونو د سم ډکولو مسؤل دی ، پداسې حال کې چې مدیر ، چې موقف یې په لیست کې بیان شوی ، په مستقیم ډول د متغیرونو لیست ډکولو مسؤل دی.

رولز د خپل انٹرفیس سره یو ځان کې شامل پرمختیایی واحد شو، چې د رول پراختیا کونکي ته اجازه ورکوي چې ځانګړتیاوې رامینځته کړي نه د سیسټم سره سم رول ګنډلو. دا مسله په ځانګړې توګه په کمپاین کې د ټولو سیسټمونو لپاره د ګډ رولونو لپاره ریښتیا وه.

د سیسټم مدیران نور اړتیا نلري د پلي کولو کوډ پوه شي. ټول هغه څه چې د دوی د بریالي پلي کولو لپاره اړین دي د چاپیریال متغیرونو فایلونو ډکول دي.

ادبیات

  1. لاسوند

لیکوال

Kalyuzhny Denis Alexandrovich

سرچینه: www.habr.com

Add a comment