Ọna eto si awọn oniyipada ni Ansible

ansible devops codestyle

Hey! Orukọ mi ni Denis Kalyuzhny Mo ṣiṣẹ bi ẹlẹrọ ni ẹka adaṣe ilana idagbasoke. Ni gbogbo ọjọ, awọn kikọ ohun elo tuntun ti yiyi si awọn ọgọọgọrun awọn olupin ipolongo. Ati ninu nkan yii, Mo pin iriri mi ti lilo Ansible fun awọn idi wọnyi.

Itọsọna yii nfunni ni ọna lati ṣeto awọn oniyipada ni imuṣiṣẹ kan. Itọsọna yii jẹ apẹrẹ fun awọn ti o ti lo awọn ipa tẹlẹ ninu awọn iwe-iṣere wọn ati ka Awọn iṣe ti o dara julọṣugbọn nṣiṣẹ sinu iru awọn iṣoro:

  • Lẹhin ti o ti rii iyipada ninu koodu, ko ṣee ṣe lati ni oye lẹsẹkẹsẹ ohun ti o jẹ iduro fun;
  • Awọn ipa pupọ wa, ati awọn oniyipada nilo lati ni nkan ṣe pẹlu iye kan, ṣugbọn ko ṣiṣẹ;
  • Nini iṣoro lati ṣalaye fun awọn miiran bii ọgbọn ti awọn oniyipada ninu awọn iwe-iṣere rẹ ṣe n ṣiṣẹ

A ṣe alabapade awọn iṣoro wọnyi lori awọn iṣẹ akanṣe ni ile-iṣẹ wa, nitori abajade eyiti a wa si awọn ofin fun kika awọn oniyipada ninu awọn iwe-iṣere wa, eyiti o yanju awọn iṣoro wọnyi si diẹ ninu awọn.

Ọna eto si awọn oniyipada ni Ansible

Awọn iyipada ninu awọn ipa

Ipa kan jẹ Ohun elo Eto imuṣiṣẹ lọtọ. Bi eyikeyi ohun ti awọn eto, o gbọdọ ni ohun ni wiwo fun a ibaraenisepo pẹlu awọn iyokù ti awọn eto. Awọn oniyipada ipa jẹ iru wiwo kan.

Gba, fun apẹẹrẹ, ipa naa api, eyiti o fi ohun elo Java sori olupin naa. Awọn oniyipada wo ni o ni?

Ọna eto si awọn oniyipada ni Ansible

Awọn oniyipada ipa le pin si awọn oriṣi meji nipasẹ iru:

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

Awọn ohun-ini iyipada jẹ awọn oniyipada ti o ṣalaye ihuwasi ti ipa kan.

Awọn iyipada ibeere jẹ awọn oniyipada ti iye wọn lo lati ṣe apẹrẹ awọn orisun ita si ipa naa.

Awọn olutẹtisi iyipada jẹ awọn oniyipada ti iye wọn lo lati ṣe awọn oniyipada ibeere.

Ni apa keji, 1a, 2a, 2b jẹ awọn oniyipada ti ko dale lori agbegbe (irin, awọn orisun ita, ati bẹbẹ lọ) ati pe o le kun pẹlu awọn iye aiyipada ni ipa awọn aiyipada. Sibẹsibẹ, awọn oniyipada bii 1.b ati 2.c ko le kun pẹlu awọn iye miiran ju 'apẹẹrẹ', nitori wọn yoo yipada lati imurasilẹ lati duro da lori agbegbe.

koodu ara

  • Orukọ oniyipada gbọdọ bẹrẹ pẹlu orukọ ipa naa. Eyi yoo jẹ ki o rọrun lati ṣawari ni ọjọ iwaju kini ipa ti oniyipada wa ati kini o jẹ iduro fun.
  • Nigbati o ba nlo awọn oniyipada ni awọn ipa, o gbọdọ rii daju pe o tẹle ilana ti encapsulation ati lo awọn oniyipada ti a ṣalaye boya ni ipa funrararẹ tabi ni awọn ipa ti eyiti lọwọlọwọ da lori.
  • Yago fun lilo awọn iwe-itumọ fun awọn oniyipada. Ansible ko gba ọ laaye lati ni irọrun kọlu awọn iye ẹni kọọkan ninu iwe-itumọ.

    Apeere ti oniyipada buburu:

    myrole_user:
        login: admin
        password: admin

    Nibi, wiwọle jẹ oniyipada agbedemeji, ati ọrọ igbaniwọle jẹ oniyipada ti o gbẹkẹle. Sugbon
    Níwọ̀n bí wọ́n ti ṣe pọ̀ mọ́ ìwé atúmọ̀ èdè, ìwọ yóò ní láti tọ́ka sí ní ẹ̀kúnrẹ́rẹ́
    Nigbagbogbo. Eyi ti o jẹ airọrun pupọ. Dara julọ ni ọna yii:

    myrole_user_login: admin
    myrole_user_password: admin

Awọn iyipada ninu awọn iwe-iṣere imuṣiṣẹ

Nigbati o ba n ṣajọ iwe-iṣere imuṣiṣẹ (lẹhin ti a tọka si bi iwe-iṣere), a faramọ ofin pe o yẹ ki o gbe sinu ibi ipamọ lọtọ. Gẹgẹ bi awọn ipa: ọkọọkan ni ibi ipamọ git tirẹ. Eyi n gba ọ laaye lati mọ pe awọn ipa ati iwe-iṣere yatọ si awọn ohun elo ominira ti eto imuṣiṣẹ, ati awọn iyipada ninu ohun kan ko yẹ ki o ni ipa lori iṣẹ miiran. Eyi jẹ aṣeyọri nipasẹ yiyipada awọn iye aiyipada ti awọn oniyipada.

Nigbati o ba n ṣajọ iwe-iṣere kan, lati ṣe akopọ, o ṣee ṣe lati bori awọn iye aiyipada ti awọn oniyipada ipa ni awọn aaye meji: ni awọn oniyipada iwe-iṣere ati ni awọn oniyipada atokọ.

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

* - Oniyipada ati Vaults

Iyatọ naa ni pe awọn oniyipada iwe-iṣere nigbagbogbo lo nigba pipe awọn iwe-iṣere ti o wa ni ipele kanna pẹlu rẹ. Eyi tumọ si pe awọn oniyipada wọnyi jẹ nla fun yiyipada awọn iye aiyipada ti awọn oniyipada ti ko dale lori agbegbe. Lọna miiran, awọn oniyipada akojo oja yoo ṣee lo fun agbegbe kan pato, eyiti o jẹ apẹrẹ fun awọn oniyipada-pato ayika.

O ṣe pataki lati ṣe akiyesi pe iṣaju oniyipada kii yoo gba ọ laaye lati tuntumọ awọn oniyipada ni akọkọ ninu awọn oniyipada iwe-iṣere ati lẹhinna lọtọ ni akojo oja kanna.

Eyi tumọ si pe tẹlẹ ni ipele yii o nilo lati pinnu boya oniyipada jẹ igbẹkẹle ayika tabi rara ati gbe si ibi ti o tọ.

Fun apẹẹrẹ, ninu iṣẹ akanṣe kan, oniyipada ti o mu SSL ṣiṣẹ jẹ igbẹkẹle ayika fun igba pipẹ, nitori a ko le mu SSL ṣiṣẹ fun awọn idi ti o kọja iṣakoso wa ni ọkan ninu awọn iduro. Lẹhin ti a ṣatunṣe ọran yii, o di ominira alabọde ati gbe lọ si awọn oniyipada iwe-iṣere.

Awọn iyipada ohun-ini fun Awọn ẹgbẹ

Jẹ ki a faagun awoṣe wa ni Nọmba 1 nipa fifi awọn ẹgbẹ meji ti olupin kun pẹlu ohun elo Java ti o yatọ, ṣugbọn pẹlu awọn eto oriṣiriṣi.

Ọna eto si awọn oniyipada ni Ansible

Fojuinu kini iwe-iṣere naa yoo dabi ninu ọran yii:

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

A ni awọn ẹgbẹ mẹta ninu iwe-iṣere, nitorinaa o gba ọ niyanju lati ṣẹda bi ọpọlọpọ awọn faili ẹgbẹ ni awọn oniyipada akojo oja group_vars ati awọn oniyipada iwe ere ni ẹẹkan. Fáìlì ẹgbẹ́ kan nínú ọ̀ràn yìí jẹ́ àpèjúwe paati kan ti ohun elo rẹ ninu iwe eré. Nigbati o ba ṣii faili ẹgbẹ ninu awọn oniyipada iwe-iṣere, o rii lẹsẹkẹsẹ gbogbo awọn iyatọ lati ihuwasi aiyipada ti awọn ipa ti a yàn si ẹgbẹ naa. Ni awọn oniyipada ọja: awọn iyatọ ninu ihuwasi ẹgbẹ lati agọ si agọ.

koodu ara

  • Gbiyanju ko lati lo host_vars oniyipada ni gbogbo, bi won ko ba ko apejuwe awọn eto, sugbon nikan kan pataki nla, eyi ti o ni awọn gun sure yoo ja si awọn ibeere: "Kí ni ogun yi yatọ si lati awọn iyokù?", Idahun si eyi ti o jẹ. ko nigbagbogbo rorun a ri.

Awọn oniyipada ọna asopọ

Sibẹsibẹ, iyẹn jẹ nipa awọn oniyipada ohun-ini, ṣugbọn kini nipa awọn oniyipada ọna asopọ?
Iyatọ wọn ni pe wọn gbọdọ ni iye kanna ni awọn ẹgbẹ oriṣiriṣi.

Ni ibere nibẹ wà agutan lo ikole nla ti fọọmu naa:
hostvars[groups['bbauth'][0]]['auth_bind_port'], ṣugbọn o ti kọ silẹ lẹsẹkẹsẹ
nitori pe o ni awọn abawọn. Ni akọkọ, iwuwo. Ẹlẹẹkeji, gbára lori kan pato ogun ninu awọn ẹgbẹ. Ni ẹkẹta, o jẹ dandan lati gba awọn ododo lati ọdọ gbogbo awọn ọmọ-ogun ṣaaju ki o to bẹrẹ imuṣiṣẹ, ti a ko ba fẹ lati gba aṣiṣe oniyipada ti ko ni asọye.

Bi abajade, a pinnu lati lo awọn oniyipada ọna asopọ.

Awọn oniyipada ọna asopọ jẹ awọn oniyipada ti o jẹ ti iwe-iṣere ati pe o nilo lati sopọ awọn nkan eto.

Awọn oniyipada ọna asopọ jẹ olugbe ni awọn oniyipada eto gbogbogbo group_vars/all/vars ati pe a ṣẹda nipasẹ yiyọ gbogbo awọn oniyipada olutẹtisi kuro ninu ẹgbẹ kọọkan, ati fifi orukọ ẹgbẹ kun lati eyiti a ti yọ olutẹtisi kuro si ibẹrẹ ti oniyipada naa.

Bayi, awọn uniformity ati ti kii-ikorita ti awọn orukọ ti wa ni idaniloju.

Jẹ ki a gbiyanju lati di awọn oniyipada lati apẹẹrẹ loke:

Ọna eto si awọn oniyipada ni Ansible

Fojuinu pe a ni awọn oniyipada ti o dale lori ara wọn:

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

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

Jẹ ká fi o ni wọpọ oniyipada group_vars/all/vars gbogbo awọn olutẹtisi, ki o si fi orukọ ẹgbẹ kun orukọ naa:

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

Bayi, nipa yiyipada iye ti asopo, a yoo rii daju pe ibeere naa yoo lọ si aaye kanna nibiti ibudo naa wa.

koodu ara

  • Niwọn igba ti awọn ipa ati awọn ẹgbẹ jẹ awọn nkan oriṣiriṣi ninu eto, o nilo lati ni awọn orukọ oriṣiriṣi fun wọn, lẹhinna awọn oniyipada ọna asopọ yoo fihan ni deede pe wọn wa si ẹgbẹ kan pato ti awọn olupin, kii ṣe ipa kan ninu eto naa.

Awọn faili ayika

Awọn ipa le lo awọn faili ti o yatọ lati agbegbe si ayika.

Awọn iwe-ẹri SSL jẹ apẹẹrẹ ti iru awọn faili. Tọju wọn bi ọrọ
ni a ayípadà ni ko gidigidi rọrun. Ṣugbọn o rọrun lati tọju ọna wọn si inu oniyipada kan.

Fun apẹẹrẹ, a lo oniyipada api_ssl_key_file: "/path/to/file".

Niwọn bi o ti han gbangba pe ijẹrisi bọtini yoo yipada lati agbegbe si agbegbe, eyi jẹ iyipada ti o gbẹkẹle ayika, eyiti o tumọ si pe o yẹ ki o wa ninu faili naa.
group_vars/myapi/vars akojo oja ti awọn oniyipada, ati ni iye ninu 'fun apẹẹrẹ'.

Ọna ti o rọrun julọ ninu ọran yii ni lati fi faili bọtini sinu ibi ipamọ iwe-iṣere ni ọna
files/prod/certs/myapi.key, lẹhinna iye ti oniyipada yoo jẹ:
api_ssl_key_file: "prod/certs/myapi.key". Irọrun wa ni otitọ pe awọn eniyan ti o ni iduro fun gbigbe eto naa sori iduro kan pato tun ni aaye iyasọtọ tiwọn ni ibi ipamọ lati tọju awọn faili wọn. Ni akoko kanna, o ṣee ṣe lati pato ọna pipe si ijẹrisi lori olupin naa, ti o ba jẹ pe awọn iwe-ẹri ti pese nipasẹ eto miiran.

Awọn iduro pupọ ni agbegbe kan

Nigbagbogbo iwulo wa lati ran ọpọlọpọ awọn iduro ti o fẹrẹẹ jọmọ ni agbegbe kanna pẹlu awọn iyatọ kekere. Ni idi eyi, a pin awọn oniyipada ti o gbẹkẹle ayika si awọn ti ko yipada laarin agbegbe yii ati awọn ti o ṣe. Ati pe a mu igbehin naa taara sinu awọn faili akojora funrararẹ. Lẹhin ifọwọyi yii, o ṣee ṣe lati ṣẹda akojo oja miiran taara ni itọsọna agbegbe.

Yoo tun lo akojo oja group_vars ati tun ni anfani lati tuntumọ diẹ ninu awọn oniyipada taara fun ararẹ.

Ilana itọsọna ikẹhin fun iṣẹ imuṣiṣẹ:

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

Akopọ

Lẹhin ti ṣeto awọn oniyipada ni ibamu pẹlu nkan naa: faili kọọkan pẹlu awọn oniyipada jẹ iduro fun iṣẹ-ṣiṣe kan pato. Ati pe niwọn igba ti faili naa ni awọn iṣẹ ṣiṣe kan, o ṣee ṣe lati yan eniyan ti o ni iduro fun deede faili kọọkan. Fun apẹẹrẹ, olupilẹṣẹ ti imuṣiṣẹ eto di oniduro fun kikun kikun ti awọn oniyipada iwe-iṣere, lakoko ti alabojuto, ti iduro rẹ ti ṣe apejuwe ninu akojo oja, jẹ iduro taara fun kikun ninu akojo oja ti awọn oniyipada.

Awọn ipa ti di apakan idagbasoke ti ara ẹni pẹlu wiwo tiwọn, gbigba oludasilẹ ipa lati ṣe agbekalẹ awọn ẹya dipo kiko ipa lati baamu eto naa. Ọrọ yii jẹ otitọ paapaa fun awọn ipa ti o wọpọ fun gbogbo awọn eto ni ipolongo kan.

Awọn alakoso eto ko nilo lati loye koodu imuṣiṣẹ mọ. Gbogbo ohun ti a beere lọwọ wọn fun imuṣiṣẹ aṣeyọri ni lati kun awọn faili ti awọn oniyipada ayika.

Iwe iwe

  1. Iwe akosilẹ

onkowe

Kalyuzhny Denis Alexandrovich

orisun: www.habr.com

Fi ọrọìwòye kun