Ratio accessus ad variabiles in Ansible

ansible devos codestyle

heus! Meum nomen est Dionysius Kalyuzhny Laboro ut ingeniarius in processu evolutionis automation department. Quotidie nova applicatione aedium centenis servientibus expeditionis evolutae sunt. Et in hoc articulo experientiam meam communicamus ad haec usus Ansible.

Hic dux viam praebet ad variabiles variabiles instruere. Hic dux destinatur iis qui iam muneribus utebantur in fabularum libris et legerunt Optimus exercitiased similia problemata:

  • In codice variabili invento, impossibile est statim intelligere quid eius sit.
  • Plures partes sunt, et variabiles uno valore sociari debent, sed solum non operantur;
  • Difficultatem habentibus aliis explicandis quomodo logica variabilium in tuis playbooks opera

Has difficultates in inceptis in societate nostra offendimus, ex quibus venimus regulas ad variabiles fabulas designandas, quae aliquatenus problemata haec solvunt.

Ratio accessus ad variabiles in Ansible

Variabiles in muneribus

Munus est objectum separatum instruere ratio. Sicut ratio aliqua objecti, debet habere interface pro commercio cum reliquis systematis. Talis compositio variabilium partes est.

Sumamus, exempli gratia, partes apiqui applicationem in calculonis servi Iava inaugurat. Quid variabiles habeat?

Ratio accessus ad variabiles in Ansible

Partes variae in 2 species secundum genus dividi possunt;

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

Variae possessiones variabiles mores munus determinant.

Query Variabiles - hae variabiles sunt quarum praestantia adhibetur ad opes externas ad munus designandum.

Variae auditores - hae variabiles sunt quarum valor ad variabiles postulandas usus est.

Ex altera parte, 1a, 2a, 2b variabiles sunt quae in ambitu (odium, opes externae, etc.) non pendent et impleri possunt valoribus defaltis in partes defaltis. Impossibile est tamen complere variabilitates speciei 1.b et 2.c aliis valoribus quam "exemplum", cum mutabuntur a stando ad standum secundum ambitum.

Code style

  • Nomen variabile a munere nominis incipere debet. Hoc facile efficiet ut in posterum evolvatur quam sit variabilis partes et quid eius rei sit.
  • Cum variabilibus in muneribus utendo, principium encapsulationis et variabilium usui definitorum sive in ipsa functione sive in muneribus a quibus hic pendet, certo debeas sequi.
  • Fugientes dictionarii variabiles. Ansible te non permittit ut singula bona in dictionario commode vincas.

    Exemplum malae variabilis:

    myrole_user:
        login: admin
        password: admin

    Hic login varius independens est, et tessera variabilis dependens. Sed
    cum componantur in dictionarium, omnino denotare debebis
    Semper. Valde incommodum est. Melius hoc modo:

    myrole_user_login: admin
    myrole_user_password: admin

Variabiles in instruere playbooks

Cum componendis instruere fabulae librum (infra postea ad fabulae librum relatum est), regulae adhaeremus quod in reposito separato collocari debet. The same as roles : ' Repositorium cuique in suo git. Hoc tibi permittit ut intelligas partes et fabulas varias esse res independentes ratio instituti, et mutationes in uno objecto operationem alterius non afficere debent. Hoc fit mutando valores defectus variabilium.

Cum componendis fabularum libris, ut compendiose componendis, valores defectuum variabilium in duobus locis vincire potest: in variabilium fabularum libro et in variabilium inventario.

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

* - Variabiles et Vaults

Discrimen est quod variabiles fabulae fabulae semper adhibentur cum vocantes fabulas librorum in eodem gradu positas esse. Hoc significat has variabiles magni esse ad mutandum valores defectus variabilium variabilium in ambitu-independentium. Vice versa, inventarium variabilium tantum pro certo ambitu adhibebitur, quod est specimen pro variabilium specialium environment.

Gravis est notare quod prioritas variabilis non patitur te primum in variabilium fabularum variabilium praeiudicare et deinde separatim in uno inventario.

Hoc significat quod iam in hoc statu necessarium est diiudicare utrum variabilis sit ambitus-dependens necne, et in loco suo ponatur.

Exempli gratia, in uno incepto, variabilis responsabilis efficere SSL erat environment-dependens diu, quia SSL rationes efficere non potuimus extra nostrum imperium in uno stat. Postquam hanc quaestionem despeximus, ambitus independentis factus est et ad varias fabulas fabulas movebatur.

Proprietas Variabiles pro Groups

Dilatemus exemplar nostrum in Figura 1 addendo 2 circulos ministrantium cum applicatione diversa Javae, sed cum diversis fundis.

Ratio accessus ad variabiles in Ansible

Cogitemus quid fabulae in hoc casu simile spectent;

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

Tres coetus in playbook habemus, ideo statim commendatur ut idem numerus imaginum sodalitatum crearetur in inventario variabilium coetus_vars et variabilium fabularum. Unius fasciculi in hoc casu descriptio unius componentis superioris applicationis in playbook est. Cum fasciculum globi aperis in variabilium fabularum libro, statim vides omnes differentias ab habitu munerum in coetu constitutorum. In variabilium inventario: differentiae in coetus mores ab sto ad standum.

Code Style

  • Non probas variabiles omnino utere, cum systema non describant, sed solum specialem casum, qui in futurum ad quaestiones ducet: "Quare haec hospes ab aliis differt?", cui responsum non est? semper facile.

Communicationis Variabiles

Nihilominus, quid proprietas variabilium sunt de omnibus, sed quid de variabilibus communicationis?
Eorum differentia est ut idem in diversis coetibus sensum habeant.

Primo erat idea monstrosa constructione utere:
hostvars[groups['bbauth'][0]]['auth_bind_port']At illi statim reiecerunt
quia incommoda habet. Uno modo, mole. Alio modo potest considerari secundum speciem fortitudinis in medio multitudinis. Tertio, antequam instruere incipias, necesse est res ex omnibus exercitibus colligere, si errorem indeterminatae variabilis obtinere nolumus.

Quam ob rem placuit differentiis communicationis uti.

Communicationis Variabiles - hae variabiles sunt quae ad fabularum librum pertinent et necessaria sunt ad obiecta systematis connectendi.

Communicationis variabiles frequentantur in systemate generali variabilium group_vars/all/vars et formantur ab unoquoque coetu audientium variabilium tollendo, et addendo nomen globi, a quo audientis ad principium variabilis remotum est.

Hoc efficit uniformitatem et non imbricationem nominum.

S conantur variabiles ex exemplo supra alligare:

Ratio accessus ad variabiles in Ansible

Fingamus nos variabiles habere ab invicem pendentes;

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

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

Mittamus eam in communes variabiles group_vars/all/vars omnes auditores, et nomen catervae ad titulum adde:

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

Nunc, mutando valorem connectoris, certo erimus petitum iturum ad eundem locum ubi portus sita est.

Code Style

  • Cum functiones et coetus diversa sint obiecta systematis, necesse est habere nomina diversa, tum variabiles nexus accurate indicabunt se pertinere ad certum coetum ministrantium, non ad munus in systemate.

Environment dependens files

Partes possunt uti fasciculis quae ab ambitu ad ambitum differunt.

Exemplum talium imaginum SSL testimonium est. Condite in textu forma
in variabili non convenit. Sed commodius est iis intra variabilem viam condere.

Verbi gratia, variabilis utimur api_ssl_key_file: "/path/to/file".

Cum manifestum sit clavem certificamenti mutaturam a ambitu ad ambitum, hoc est variabilis environment-dependens, quod significat in tabella collocari.
group_vars/myapi/vars inventarium variabilium, et continent valorem "exempli gratia".

Modus commodissimus in hac causa est ponere fasciculum clavis in repositorio playbook per viam
files/prod/certs/myapi.keyergo valor variabilis erit;
api_ssl_key_file: "prod/certs/myapi.key". Commodum in eo est quod homines responsabiles explicandi systema specifice statis habent etiam suum spatium dedicatum in promptuario ad suas tabellas reponendas. Eodem tempore relinquitur possibile est iter absolutum libellum servo definire, si alia ratio testimoniales suppeditent.

Multa stat in uno environment

Saepe in eadem ambitu cum minimis differentiis opus est pluribus explicandis fere identicis. Hoc in casu, variabiles ambitus-dependentes in eas dividimus, quae intra hoc ambitu et mutationibus non mutantur. Haec autem directe ad tabulas inventarii transfermus. Post hanc manipulationem, fieri potest ut aliud inventarium directe in directorio ambitus creare possit.

Inventarium coetus_vars reus reddet, et etiam nonnullas variabiles sibi directe reducere poterit.

Postrema directorii structura ad instruere consilium:

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

Quoquo

Post variabiles variabiles secundum articulum ordinandis: singuli fasciculi variabiles munus specificum responsant. Et cum tabella quaedam munia habeat, possibilis est aliquem responsalem cuiusque tabulae rectitudinem assignare. Exempli causa, elit systema instruere responsabilis fit ad rectam impletionem fabularum variabilium, dum administrator, cuius status in inventario describitur, directe responsabilis est ad inventarium variabilium implendum.

Partes suas factae sunt evolutionis unitatis cum suo instrumento, permittens munus elit ad facultates explicandas potius quam ad partes systematis sartor. Quaestio haec praecipue pertinet ad partes communes pro omnibus systematibus in expeditione.

Systema administratorum non iam opus est ut codicem instruere possint. Quidquid ab eis ad bene instruendum requiritur, scriniis variabilium dependens dependens est.

litterae

  1. Документация

auctor

Kalyuzhny Dionysius Alexandrovich

Source: www.habr.com

Add a comment