Ansible හි විචල්‍යයන් සඳහා පද්ධති ප්‍රවේශය

ansible devops codestyle

හේයි! මගේ නම වන්නේ ඩෙනිස් Kalyuzhny මම සංවර්ධන ක්‍රියාවලි ස්වයංක්‍රීයකරණ දෙපාර්තමේන්තුවේ ඉංජිනේරුවෙකු ලෙස සේවය කරමි. සෑම දිනකම, ප්‍රචාරක සේවාදායක සිය ගණනක් මත නව යෙදුම් ගොඩනැගීම් සිදු කෙරේ. මෙම ලිපියෙන් මම මෙම අරමුණු සඳහා Ansible භාවිතා කිරීමේ මගේ අත්දැකීම් බෙදා ගන්නෙමි.

මෙම මාර්ගෝපදේශය යෙදවීමේදී විචල්‍යයන් සංවිධානය කිරීමට ක්‍රමයක් ඉදිරිපත් කරයි. මෙම මාර්ගෝපදේශය දැනටමත් ඔවුන්ගේ ක්‍රීඩා පොත්වල භූමිකාවන් භාවිතා කරන සහ කියවා ඇති අය සඳහා අදහස් කෙරේ හොඳම භාවිතයන්, නමුත් සමාන ගැටළු වලට මුහුණ දෙයි:

  • කේතයේ විචල්‍යයක් සොයාගත් පසු, එය වගකිව යුත්තේ කුමක් දැයි වහාම තේරුම් ගත නොහැක;
  • භූමිකාවන් කිහිපයක් ඇති අතර, විචල්යයන් එක් අගයක් සමඟ සම්බන්ධ විය යුතුය, නමුත් එය ක්රියා නොකරයි;
  • ඔබේ ක්‍රීඩා පොත්වල ඇති විචල්‍යවල තර්කනය ක්‍රියා කරන ආකාරය අන් අයට පැහැදිලි කිරීමට අපහසු වීම

අපගේ සමාගමේ ව්‍යාපෘති වලදී අපට මෙම ගැටළු වලට මුහුණ දීමට සිදු විය, එහි ප්‍රතිඵලයක් ලෙස අපගේ ක්‍රීඩා පොත්වල විචල්‍යයන් සැලසුම් කිරීම සඳහා වන නීති රීති වලට අපි පැමිණියෙමු, එමඟින් මෙම ගැටළු යම් දුරකට විසඳා ඇත.

Ansible හි විචල්‍යයන් සඳහා පද්ධති ප්‍රවේශය

භූමිකාවන්හි විචල්යයන්

භූමිකාවක් යනු යෙදවීමේ පද්ධතියේ වෙනම වස්තුවකි. ඕනෑම පද්ධති වස්තුවක් මෙන්, එය පද්ධතියේ සෙසු කොටස් සමඟ අන්තර්ක්‍රියා කිරීම සඳහා අතුරු මුහුණතක් තිබිය යුතුය. එවැනි අතුරු මුහුණතක් භූමිකාව විචල්යයන් වේ.

අපි උදාහරණයක් ලෙස භූමිකාව ගනිමු api, එය සේවාදායකයේ ජාවා යෙදුමක් ස්ථාපනය කරයි. එහි තිබිය හැකි විචල්‍ය මොනවාද?

Ansible හි විචල්‍යයන් සඳහා පද්ධති ප්‍රවේශය

විචල්ය භූමිකාවන් වර්ගය අනුව වර්ග 2 කට බෙදිය හැකිය:

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

විචල්ය ගුණාංග භූමිකාවක හැසිරීම තීරණය කරන විචල්‍ය වේ.

විමසුම් විචල්යයන් - මේවා විචල්‍යයන් වන අතර ඒවායේ අගය භූමිකාවට බාහිර සම්පත් නම් කිරීමට භාවිතා කරයි.

විචල්ය සවන්දෙන්නන් - මේවා ඉල්ලීම් විචල්‍ය සෑදීම සඳහා අගය භාවිතා කරන විචල්‍ය වේ.

අනෙක් අතට, 1a, 2a, 2b යනු පරිසරය (දෘඪාංග, බාහිර සම්පත්, ආදිය) මත රඳා නොපවතින විචල්‍යයන් වන අතර පෙරනිමි භූමිකාවේ පෙරනිමි අගයන් සමඟ පිරවිය හැකිය. කෙසේ වෙතත්, 1.b සහ 2.c වර්ගයේ විචල්‍යයන් 'උදාහරණ' හැර වෙනත් අගයන් සමඟ පිරවීම කළ නොහැක, මන්ද ඒවා පරිසරය අනුව ස්ථාවරයෙන් ස්ථාවරයට වෙනස් වන බැවිනි.

කේත විලාසය

  • විචල්‍ය නාමය භූමිකාව නාමයෙන් ආරම්භ විය යුතුය. මෙය අනාගතයේදී විචල්‍යයේ භූමිකාව කුමක්ද සහ එය වගකිව යුත්තේ කුමක් දැයි සොයා ගැනීම පහසු කරයි.
  • භූමිකාවන් තුළ විචල්‍යයන් භාවිතා කරන විට, ඔබ කැප්සියුලේෂන් මූලධර්මය අනුගමනය කිරීමට වග බලා ගත යුතු අතර භූමිකාව තුළම හෝ වත්මන් එක රඳා පවතින භූමිකාවන්හි අර්ථ දක්වා ඇති විචල්‍යයන් භාවිතා කරන්න.
  • විචල්‍ය සඳහා ශබ්දකෝෂ භාවිතා කිරීමෙන් වළකින්න. ශබ්දකෝෂයක ඇති තනි අගයන් පහසුවෙන් ප්‍රතික්ෂේප කිරීමට ඇන්සිබල් ඔබට ඉඩ නොදේ.

    නරක විචල්‍යයක උදාහරණය:

    myrole_user:
        login: admin
        password: admin

    මෙහි login යනු ස්වාධීන විචල්‍යය වන අතර මුරපදය රඳා පවතින විචල්‍යය වේ. එහෙත්
    ඒවා ශබ්දකෝෂයකට ඒකාබද්ධ කර ඇති බැවින්, ඔබට එය සම්පූර්ණයෙන්ම සඳහන් කිරීමට සිදුවේ
    සැමවිටම. ඉතා අපහසු වන. මේ ආකාරයෙන් වඩා හොඳය:

    myrole_user_login: admin
    myrole_user_password: admin

යෙදවීමේ ක්‍රීඩා පොත්වල විචල්‍යයන්

යෙදවුම් ක්‍රීඩා පොතක් සම්පාදනය කිරීමේදී (මෙතැන් සිට ක්‍රීඩා පොත ලෙස හැඳින්වේ), එය වෙනම ගබඩාවක තැබිය යුතුය යන රීතිය අපි පිළිපදින්නෙමු. භූමිකාවන්ට සමානයි: සෑම එකක්ම තමන්ගේම git ගබඩාවේ. භූමිකාවන් සහ ක්‍රීඩා පොත යෙදවීමේ පද්ධතියේ විවිධ ස්වාධීන වස්තූන් බව මෙය ඔබට තේරුම් ගත හැකි අතර, එක් වස්තුවක වෙනස්වීම් අනෙකෙහි ක්‍රියාකාරිත්වයට බල නොපායි. මෙය සාක්ෂාත් කරගනු ලබන්නේ විචල්‍යවල පෙරනිමි අගයන් වෙනස් කිරීමෙනි.

ක්‍රීඩා පොතක් සම්පාදනය කිරීමේදී, සාරාංශගත කිරීම සඳහා, ස්ථාන දෙකකින් භූමිකා විචල්‍යවල පෙරනිමි අගයන් ප්‍රතික්ෂේප කළ හැකිය: ප්ලේබුක් විචල්‍යයන් සහ ඉන්වෙන්ටරි විචල්‍යයන් තුළ.

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

* - විචල්ය සහ සුරක්ෂිතාගාර

වෙනස වන්නේ එය එකම මට්ටමේ පිහිටා ඇති playbooks ඇමතීමේ දී playbook විචල්යයන් සැමවිටම භාවිතා වේ. මෙයින් අදහස් කරන්නේ පාරිසරික ස්වාධීන විචල්‍යවල පෙරනිමි අගයන් වෙනස් කිරීම සඳහා මෙම විචල්‍යයන් විශිෂ්ට බවයි. අනෙක් අතට, ඉන්වෙන්ටරි විචල්‍යයන් විශේෂිත පරිසරයක් සඳහා පමණක් භාවිතා කරනු ඇත, එය පරිසර විශේෂිත විචල්‍යයන් සඳහා වඩාත් සුදුසු වේ.

විචල්‍ය ප්‍රමුඛතාවය ඔබට ප්‍රථමයෙන් ප්ලේබුක් විචල්‍යවල සහ පසුව එක් ඉන්වෙන්ටරියක වෙන වෙනම විචල්‍යයන් අභිබවා යාමට ඉඩ නොදෙන බව සැලකිල්ලට ගැනීම වැදගත්ය.

මෙයින් අදහස් කරන්නේ දැනටමත් මෙම අදියරේදී විචල්‍යය පරිසරය මත රඳා පවතින්නේද නැද්ද යන්න තීරණය කර එය සුදුසු ස්ථානයේ තැබීම අවශ්‍ය බවයි.

උදාහරණයක් ලෙස, එක් ව්‍යාපෘතියක, SSL සක්‍රීය කිරීම සඳහා වගකිව යුතු විචල්‍යය දිගු කාලයක් පරිසරය මත රඳා පැවතුනි, මන්ද එක් ස්ථාවරයක අපගේ පාලනයෙන් ඔබ්බට හේතු නිසා SSL සක්‍රීය කිරීමට අපට නොහැකි විය. අපි මෙම ගැටලුව නිරාකරණය කළ පසු, එය පරිසරය ස්වාධීන වී Playbook විචල්‍ය වෙත මාරු විය.

කණ්ඩායම් සඳහා දේපල විචල්යයන්

වෙනස් ජාවා යෙදුමක් සහිත, නමුත් විවිධ සැකසුම් සහිත සේවාදායක කණ්ඩායම් 1ක් එකතු කිරීමෙන් රූප සටහන 2 හි අපගේ ආකෘතිය පුළුල් කරමු.

Ansible හි විචල්‍යයන් සඳහා පද්ධති ප්‍රවේශය

මෙම අවස්ථාවේ දී ක්‍රීඩා පොත කෙබඳු වනු ඇත්දැයි සිතමු:

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

අපට playbook හි කණ්ඩායම් තුනක් ඇත, එබැවින් group_vars ඉන්වෙන්ටරි විචල්‍යයන් සහ playbook විචල්‍යයන් තුළ සමාන කණ්ඩායම් ගොනු සංඛ්‍යාවක් සෑදීමට වහාම නිර්දේශ කරනු ලැබේ. මෙම නඩුවේ එක් කණ්ඩායම් ගොනුවක් යනු playbook හි ඉහත යෙදුමේ එක් සංරචකයක විස්තරයකි. ඔබ ප්ලේබුක් විචල්‍යයන් තුළ කණ්ඩායම් ගොනුවක් විවෘත කළ විට, සමූහයේ ස්ථාපනය කර ඇති භූමිකාවන්හි පෙරනිමි හැසිරීමෙන් සියලුම වෙනස්කම් ඔබ වහාම දකිනු ඇත. ඉන්වෙන්ටරි විචල්යයන් තුළ: ස්ථාවරයේ සිට ස්ථාවරය දක්වා කණ්ඩායම් හැසිරීම් වල වෙනස්කම්.

කේත විලාසය

  • host_vars විචල්‍යයන් කිසිසේත් භාවිතා නොකිරීමට උත්සාහ කරන්න, මන්ද ඒවා පද්ධතිය විස්තර නොකරන නමුත් විශේෂ අවස්ථාවක් පමණක් වන අතර එය අනාගතයේදී ප්‍රශ්නවලට තුඩු දෙනු ඇත: “මෙම සත්කාරක අනෙක් ඒවාට වඩා වෙනස් වන්නේ ඇයි?”, එයට පිළිතුර නොවේ. සෑම විටම සොයා ගැනීමට පහසුය.

සන්නිවේදන විචල්යයන්

කෙසේ වෙතත්, දේපල විචල්‍යයන් යනු එයයි, නමුත් සන්නිවේදන විචල්‍යයන් ගැන කුමක් කිව හැකිද?
ඔවුන්ගේ වෙනස වන්නේ විවිධ කණ්ඩායම්වල එකම අර්ථය තිබිය යුතුය.

මුලදී එය විය අදහසයි වැනි භයානක ඉදිකිරීමක් භාවිතා කරන්න:
hostvars[groups['bbauth'][0]]['auth_bind_port'], නමුත් ඔවුන් එය වහාම ප්රතික්ෂේප කළා
මන්ද එහි අවාසි ඇත. පළමුව, විශාලත්වය. දෙවනුව, කණ්ඩායමේ නිශ්චිත සත්කාරකයකු මත යැපීම. තෙවනුව, යෙදවීම ආරම්භ කිරීමට පෙර, නිර්වචනය නොකළ විචල්‍යයක දෝෂයක් ලබා ගැනීමට අපට අවශ්‍ය නැතිනම් සියලුම සත්කාරකයන්ගෙන් කරුණු එකතු කිරීම අවශ්‍ය වේ.

එහි ප්රතිඵලයක් වශයෙන්, සන්නිවේදන විචල්යයන් භාවිතා කිරීමට තීරණය විය.

සන්නිවේදන විචල්යයන් - මේවා ක්‍රීඩා පොතට අයත් විචල්‍යයන් වන අතර පද්ධති වස්තු සම්බන්ධ කිරීමට අවශ්‍ය වේ.

සන්නිවේදන විචල්‍ය සාමාන්‍ය පද්ධති විචල්‍යයන් තුළ ජනාකීර්ණ වේ group_vars/all/vars සහ එක් එක් කණ්ඩායමෙන් සියලුම ශ්‍රවණ විචල්‍ය ඉවත් කිරීමෙන් සහ අසන්නන් ඉවත් කළ කණ්ඩායමේ නම විචල්‍යයේ ආරම්භයට එකතු කිරීමෙන් සෑදී ඇත.

මෙය ඒකාකාරිත්වය සහ අතිච්ඡාදනය නොවන නම් සහතික කරයි.

ඉහත උදාහරණයෙන් විචල්‍යයන් බැඳීමට උත්සාහ කරමු:

Ansible හි විචල්‍යයන් සඳහා පද්ධති ප්‍රවේශය

අපි හිතමු අපිට එක එක මත යැපෙන විචල්‍යයන් තියෙනවා කියලා.

# 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 }}"

දැන්, සම්බන්ධකයේ අගය වෙනස් කිරීමෙන්, ඉල්ලීම වරාය පිහිටා ඇති ස්ථානයටම යන බවට අපට සහතික වනු ඇත.

කේත විලාසය

  • භූමිකාවන් සහ කණ්ඩායම් විවිධ පද්ධති වස්තු බැවින්, ඒවාට විවිධ නම් තිබිය යුතුය, එවිට සබැඳි විචල්‍යයන් ඒවා නිශ්චිත සේවාදායක කණ්ඩායමකට අයත් වන අතර පද්ධතියේ භූමිකාවකට නොවන බව නිවැරදිව පෙන්නුම් කරයි.

පරිසරය මත යැපෙන ලිපිගොනු

භූමිකාවන් පරිසරයෙන් පරිසරයට වෙනස් වන ගොනු භාවිතා කළ හැක.

එවැනි ගොනු සඳහා උදාහරණයක් SSL සහතික වේ. ඒවා පෙළ ආකාරයෙන් ගබඩා කරන්න
විචල්‍යයක ඉතා පහසු නොවේ. නමුත් ඒවා වෙත යන මාර්ගය විචල්‍යයක් තුළ ගබඩා කිරීම පහසුය.

උදාහරණයක් ලෙස, අපි විචල්යය භාවිතා කරමු api_ssl_key_file: "/path/to/file".

ප්‍රධාන සහතිකය පරිසරයෙන් පරිසරයට වෙනස් වන බව පැහැදිලිව පෙනෙන බැවින්, මෙය පරිසරය මත යැපෙන විචල්‍යයකි, එනම් එය ගොනුවේ පිහිටා තිබිය යුතුය
group_vars/myapi/vars විචල්‍යයන් ඉන්වෙන්ටරි, සහ 'උදාහරණයක් ලෙස' අගය අඩංගු වේ.

මෙම නඩුවේ වඩාත් පහසු ක්රමයක් වන්නේ මාර්ගය ඔස්සේ Playbook ගබඩාවේ යතුරු ගොනුව තැබීමයි
files/prod/certs/myapi.key, එවිට විචල්‍යයේ අගය වනුයේ:
api_ssl_key_file: "prod/certs/myapi.key". පහසුව පවතින්නේ පද්ධතිය නිශ්චිත ස්ථාවරයක යෙදවීමට වගකිව යුතු පුද්ගලයින්ට ඔවුන්ගේ ලිපිගොනු ගබඩා කිරීම සඳහා ගබඩාවේ ඔවුන්ටම වෙන්වූ ඉඩක් තිබීමයි. ඒ අතරම, වෙනත් පද්ධතියකින් සහතික සපයන්නේ නම්, සේවාදායකයේ සහතිකය වෙත නිරපේක්ෂ මාර්ගය සඳහන් කිරීමට හැකි වේ.

එක් පරිසරයක බහු නැවතුම්

බොහෝ විට එකම පරිසරයක අවම වෙනස්කම් සහිතව සමාන ස්ථාවර කිහිපයක් යෙදවීමට අවශ්‍ය වේ. මෙම අවස්ථාවෙහිදී, අපි පරිසරය මත රඳා පවතින විචල්‍යයන් මෙම පරිසරය තුළ වෙනස් නොවන සහ වෙනස් වන ඒවාට බෙදන්නෙමු. තවද අපි දෙවැන්න කෙලින්ම ඉන්වෙන්ටරි ලිපිගොනු වෙත මාරු කරමු. මෙම උපාමාරු කිරීමෙන් පසුව, පරිසර නාමාවලිය තුළ සෘජුවම තවත් ඉන්වෙන්ටරි නිර්මාණය කිරීමට හැකි වේ.

එය group_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

අදහස් එක් කරන්න