Njira yofikira pamitundu yosiyanasiyana mu Ansible

ansible devops codestyle

Hei! Dzina langa ndi Denis Kalyuzhny Ndimagwira ntchito ngati mainjiniya mu dipatimenti yokonza makina opanga makina. Tsiku lililonse, zomanga zatsopano zimatulutsidwa pa ma seva a kampeni. Ndipo m'nkhaniyi ndikugawana zomwe ndakumana nazo pogwiritsa ntchito Ansible pazifukwa izi.

Bukuli limapereka njira yosinthira zosinthika pakutumizidwa. Bukuli ndi la omwe akugwiritsa ntchito kale maudindo m'mabuku awo amasewera ndipo adawerengapo Njira Zabwino Kwambiri, koma amakumana ndi mavuto ofanana:

  • Mutapeza zosinthika mu code, sizingatheke kuti mumvetsetse zomwe zili ndi udindo;
  • Pali maudindo angapo, ndipo zosinthazo ziyenera kugwirizanitsidwa ndi mtengo umodzi, koma sizikugwira ntchito;
  • Kukhala ndi vuto lofotokozera ena momwe zosinthika zomwe zili m'mabuku anu osewerera zimagwirira ntchito

Tinakumana ndi mavutowa pamapulojekiti a kampani yathu, chifukwa chake tidakhala ndi malamulo opangira zosinthika m'mabuku athu amasewera, zomwe zinathetsa mavutowa.

Njira yofikira pamitundu yosiyanasiyana mu Ansible

Zosintha mu maudindo

Ntchito ndi chinthu chosiyana cha dongosolo lotumiza. Monga chinthu chilichonse chadongosolo, iyenera kukhala ndi mawonekedwe olumikizirana ndi dongosolo lonselo. Mawonekedwe oterowo ndi osiyanasiyana.

Tiyeni titenge, mwachitsanzo, udindo api, yomwe imayika pulogalamu ya Java pa seva. Zingakhale zosintha ziti?

Njira yofikira pamitundu yosiyanasiyana mu Ansible

Maudindo osinthika amatha kugawidwa m'mitundu iwiri kutengera mtundu:

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

Zosinthika katundu ndi zosiyana zomwe zimatsimikizira khalidwe la ntchito.

Mafunso Osiyanasiyana - Izi ndi zosintha zomwe mtengo wake umagwiritsidwa ntchito pofotokoza zinthu zomwe zili kunja kwa gawolo.

Omvera osinthika - awa ndi mitundu yomwe mtengo wake umagwiritsidwa ntchito kupanga zosinthika zopempha.

Kumbali inayi, 1a, 2a, 2b ndi zosintha zomwe sizidalira chilengedwe (hardware, zinthu zakunja, ndi zina zotero) ndipo zimatha kudzazidwa ndi zikhalidwe zosasinthika pagawo losasintha. Komabe, ndizosatheka kudzaza mitundu ya 1.b ndi 2.c ndi zinthu zina kuposa 'chitsanzo', chifukwa zisintha kuchokera kumayendedwe kupita kutengera kutengera chilengedwe.

Kodi style

  • Dzina losinthika liyenera kuyamba ndi dzina laudindo. Izi zipangitsa kukhala kosavuta kudziwa m'tsogolo momwe kusinthaku kumachokera komanso komwe kumagwira ntchito.
  • Mukamagwiritsa ntchito zosinthika pamaudindo, muyenera kutsimikiza kuti mukutsatira mfundo ya encapsulation ndikugwiritsa ntchito zosinthika zomwe zimafotokozedwa mu gawo lomwelo kapena maudindo omwe amadalira.
  • Pewani kugwiritsa ntchito madikishonale pazinthu zosiyanasiyana. Ansible samakulolani kuti muchotse mosavuta zomwe zili mumtanthauzira mawu.

    Chitsanzo cha kusintha koyipa:

    myrole_user:
        login: admin
        password: admin

    Apa kulowa ndikusintha kodziyimira pawokha, ndipo mawu achinsinsi ndiyemwe amadalira. Koma
    popeza aphatikizidwa kukhala dikishonale, muyenera kufotokoza momveka bwino
    Nthawizonse. Zomwe zimakhala zovuta kwambiri. Zabwino motere:

    myrole_user_login: admin
    myrole_user_password: admin

Zosintha m'mabuku ochezera otumizira

Polemba buku lamasewera (lomwe limadziwika kuti buku lamasewera), timatsatira lamulo loti liziyika m'malo osiyanasiyana. Zofanana ndi maudindo: iliyonse m'malo ake a git. Izi zimakuthandizani kuti mumvetsetse kuti maudindo ndi buku lamasewera ndizinthu zosiyana zodziyimira pawokha, ndipo kusintha kwa chinthu chimodzi sikuyenera kukhudza momwe chinzake chimagwirira ntchito. Izi zimatheka posintha zosintha zosasinthika.

Mukamapanga sewero, kunena mwachidule, ndizotheka kupitilira zosintha zamitundu yosiyanasiyana m'malo awiri: m'mabuku osewerera komanso pazosintha zamagulu.

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

*- Zosintha ndi Vaults

Kusiyana kwake ndikuti zosintha zamabuku osewerera zimagwiritsidwa ntchito nthawi zonse poyimba ma playbook omwe ali pamlingo womwewo. Izi zikutanthauza kuti zosinthazi ndizabwino kwambiri posintha masinthidwe amitundu yodziyimira pawokha. Mosiyana ndi zimenezi, zosintha zamagulu zidzagwiritsidwa ntchito pa malo enieni, omwe ali abwino pazosintha zokhudzana ndi chilengedwe.

Ndikofunikira kudziwa kuti kuyika patsogolo sikungakupatseni mwayi wowonjezera zosintha poyamba muzosintha zamabuku osewerera kenako padera m'magulu amodzi.

Izi zikutanthauza kuti kale pa sitejiyi ndikofunika kusankha ngati kusinthika kumadalira chilengedwe kapena ayi ndikuyiyika pamalo oyenera.

Mwachitsanzo, mu projekiti ina, kusinthika komwe kumathandizira SSL kunali kodalira chilengedwe kwa nthawi yayitali, popeza sitinathe kuloleza SSL pazifukwa zomwe sitingathe kuzilamulira pa imodzi mwazoyimira. Titakonza vutoli, idakhala yodziyimira payokha ndipo idasamukira kumitundu yosiyanasiyana yamasewera.

Zosintha za Katundu kwa Magulu

Tiyeni tikulitse chitsanzo chathu mu Chithunzi 1 powonjezera magulu a 2 a maseva omwe ali ndi Java yosiyana, koma ndi machitidwe osiyanasiyana.

Njira yofikira pamitundu yosiyanasiyana mu Ansible

Tiyeni tiyerekeze momwe buku lamasewera lidzawoneka ngati ili:

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

Tili ndi magulu atatu m'buku lamasewera, chifukwa chake tikulimbikitsidwa kuti tipange mafayilo amagulu omwewo mumagulu amagulu_vars ndi zosintha zamabuku. Fayilo ya gulu limodzi pankhaniyi ndikulongosola gawo limodzi lazomwe zili pamwambapa mu buku lamasewera. Mukatsegula fayilo yamagulu muzosintha zamabuku osewerera, nthawi yomweyo mumawona zosiyana zonse kuchokera kumayendedwe osakhazikika a maudindo omwe adayikidwa pagululo. M'mitundu yosiyanasiyana: Kusiyanasiyana kwamakhalidwe amagulu kuchokera pamayimidwe kupita ku maimidwe.

Kodi Style

  • Yesetsani kuti musagwiritse ntchito mitundu ya host_vars konse, popeza samalongosola dongosolo, koma vuto lapadera, lomwe m'tsogolomu lidzabweretsa mafunso: "N'chifukwa chiyani wolandirayo ali wosiyana ndi ena?", Yankho lomwe siliri. nthawi zonse zosavuta kupeza.

Zosintha Zolumikizana

Komabe, ndizo zomwe kusinthika kwa katundu kumakhudza, koma nanga bwanji zamitundu yolumikizirana?
Kusiyana kwawo ndikuti akhale ndi tanthauzo lofanana m'magulu osiyanasiyana.

Poyamba zinali lingaliro gwiritsani ntchito chomanga chowopsa ngati:
hostvars[groups['bbauth'][0]]['auth_bind_port'], koma anakana nthawi yomweyo
chifukwa ili ndi zovuta zake. Choyamba, bulkiness. Kachiwiri, kudalira wolandira wina pagulu. Chachitatu, musanayambe kutumiza, m'pofunika kusonkhanitsa zowona kuchokera kwa makamu onse ngati sitikufuna kupeza cholakwika cha kusinthika kosadziwika.

Chifukwa chake, adaganiza zogwiritsa ntchito zosintha zolumikizirana.

Zosintha Zolumikizana - izi ndi zosinthika zomwe zili m'buku lamasewera ndipo ndizofunikira kuti mulumikizane ndi zinthu zamakina.

Zosintha zamakasinthidwe zimayikidwa mumitundu yosiyanasiyana yamadongosolo group_vars/all/vars ndipo amapangidwa pochotsa zosintha zonse za omvera pagulu lililonse, ndikuwonjezera dzina la gulu lomwe omvera adachotsedwako mpaka kumayambiriro kwa zosinthazo.

Izi zimatsimikizira kufanana komanso kusaphatikizika kwa mayina.

Tiyeni tiyese kumangiriza zosinthika kuchokera ku chitsanzo pamwambapa:

Njira yofikira pamitundu yosiyanasiyana mu Ansible

Tiyerekeze kuti tili ndi zosinthika zomwe zimadalirana:

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

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

Tiyeni tiyike muzosiyana group_vars/all/vars omvera onse, ndikuwonjezera dzina la gulu pamutuwu:

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

Tsopano, posintha mtengo wa cholumikizira, tidzakhala otsimikiza kuti pempho lidzapita kumalo omwewo pomwe doko lili.

Kodi Style

  • Popeza maudindo ndi magulu ndi zinthu zosiyana za dongosolo, ayenera kukhala ndi mayina osiyanasiyana, ndiye kuti zosintha zogwirizanitsa zidzasonyeza molondola kuti ndi gulu linalake la ma seva, osati gawo mu dongosolo.

Mafayilo otengera chilengedwe

Maudindo atha kugwiritsa ntchito mafayilo omwe amasiyana malinga ndi chilengedwe.

Chitsanzo cha mafayilo oterowo ndi satifiketi ya SSL. Zisungeni m'malemba
mu variable si yabwino kwambiri. Koma ndizosavuta kusunga njira yopita kwa iwo mkati mwazosintha.

Mwachitsanzo, timagwiritsa ntchito variable api_ssl_key_file: "/path/to/file".

Popeza ndizodziwikiratu kuti satifiketi yofunikira isintha kuchokera ku chilengedwe kupita ku chilengedwe, uku ndikusintha komwe kumadalira chilengedwe, zomwe zikutanthauza kuti ziyenera kukhala mufayilo.
group_vars/myapi/vars mndandanda wa zosinthika, ndipo zili ndi mtengo 'mwachitsanzo'.

Njira yabwino kwambiri pankhaniyi ndikuyika fayilo yayikulu munkhokwe ya playbook panjira
files/prod/certs/myapi.key, ndiye mtengo wa kusinthika udzakhala:
api_ssl_key_file: "prod/certs/myapi.key". Chosavuta chimakhala chakuti anthu omwe ali ndi udindo wotumiza dongosolo pa malo enieni amakhalanso ndi malo awo odzipatulira m'malo osungiramo mafayilo awo. Panthawi imodzimodziyo, zimakhala zotheka kufotokoza njira yeniyeni yopita ku setifiketi pa seva, ngati zizindikirozo zimaperekedwa ndi dongosolo lina.

Maimidwe angapo pamalo amodzi

Nthawi zambiri pamafunika kuyika masitepe angapo ofanana m'malo amodzi osasiyana pang'ono. Pankhaniyi, timagawaniza zosinthika zomwe zimadalira chilengedwe kukhala zomwe sizisintha mkati mwa chilengedwechi komanso zomwe zimasintha. Ndipo timasamutsa zotsirizirazo mwachindunji mumafayilo azinthu okha. Pambuyo pakusintha uku, zimakhala zotheka kupanga chosungira china mwachindunji muzowongolera zachilengedwe.

Idzagwiritsanso ntchito gulu_vars, ndipo idzatha kutanthauziranso zosintha zina mwachindunji.

Ndondomeko yomaliza ya chikwatu cha polojekiti yotumiza:

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

Kufotokozera mwachidule

Pambuyo pokonza zosinthika molingana ndi nkhaniyo: fayilo iliyonse yosinthika imakhala ndi ntchito inayake. Ndipo popeza fayilo ili ndi ntchito zina, zidakhala zotheka kugawira wina yemwe ali ndi udindo wowongolera fayilo iliyonse. Mwachitsanzo, woyambitsa makina otumizira amakhala ndi udindo wodzaza zosintha zamasewera, pomwe woyang'anira yemwe mawonekedwe ake akufotokozedwa m'ndandandayo ali ndi udindo wodzaza zosintha.

Maudindo adakhala gawo lawo lachitukuko ndi mawonekedwe awoawo, kulola wopanga ntchitoyo kukulitsa luso m'malo mosintha gawolo kuti ligwirizane ndi dongosolo. Vutoli lidakhudzanso ntchito zofananira pamadongosolo onse a kampeni.

Oyang'anira makina sakufunikanso kumvetsetsa nambala yotumizira. Zomwe zimafunikira kwa iwo kuti atumizidwe bwino ndikudzaza mafayilo amitundu yodalira chilengedwe.

Mabuku

  1. Zolemba

wolemba

Kalyuzhny Denis Alexandrovich

Source: www.habr.com

Kuwonjezera ndemanga