System approach to variables in Ansible

ansible devops codestyle

Hey! Ny anarako dia Denis Kalyuzhny Miasa amin'ny maha-injeniera ahy ao amin'ny sampana automatique ny fizotran'ny fampandrosoana. Isan'andro dia avoaka amin'ny mpizara fampielezan-kevitra an-jatony ny fananganana fampiharana vaovao. Ary amin'ity lahatsoratra ity dia mizara ny traikefako amin'ny fampiasana Ansible ho an'ireo tanjona ireo aho.

Ity torolalana ity dia manolotra fomba iray handaminana ireo fari-pahalalana amin'ny fametrahana. Ity torolalana ity dia natao ho an'ireo izay efa mampiasa ny anjara asa ao amin'ny bokiny ary namaky BestPractices, fa miatrika olana mitovy amin'izany:

  • Rehefa nahita fari-pitsipika ao amin'ny code, dia tsy azo atao ny mahatakatra avy hatrany ny andraikiny;
  • Misy andraikitra maromaro, ary mila ampifandraisina amin'ny soatoavina iray ny variables, saingy tsy mandeha fotsiny izany;
  • Sarotra ny manazava amin'ny hafa ny fomba fiasan'ny lojika ao amin'ny bokinao

Nisedra ireo olana ireo izahay tamin'ny tetikasa tao amin'ny orinasanay, vokatr'izany dia tonga tamin'ny fitsipika momba ny famolavolana varimbazaha ao amin'ny bokinay, izay namaha ireo olana ireo.

System approach to variables in Ansible

Variables amin'ny andraikitra

Ny anjara asa dia Object misaraka amin'ny rafitra fametrahana. Tahaka ny zavatra rehetra amin'ny rafitra, dia tsy maintsy manana interface tsara hifaneraserana amin'ny rafitra sisa. Ny interface toy izany dia variables role.

Andeha horaisintsika, ohatra, ny anjara asa api, izay mametraka fampiharana Java amin'ny mpizara. Inona avy ireo fari-pitsipika mety ananany?

System approach to variables in Ansible

Ny anjara asa miovaova dia azo zaraina ho karazany 2 araka ny karazana:

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

Toetra miovaova dia miovaova mamaritra ny fitondran-tenan'ny anjara.

Fanontaniana Variables - ireo dia faribolana izay ny sandany ampiasaina hanondroana loharano ivelan'ny anjara asa.

Variable mpihaino - ireo dia variables izay ny sandany ampiasaina amin'ny fananganana fari-pitsipika fangatahana.

Amin'ny lafiny iray, ny 1a, 2a, 2b dia miovaova tsy miankina amin'ny tontolo iainana (fitaovana, loharano ivelany, sns.) Na izany aza, tsy azo atao ny mameno ny fari-pahaizan'ny karazana 1.b sy 2.c amin'ny sanda hafa ankoatra ny 'ohatra', satria hiova avy amin'ny fijoroana izy ireo arakaraka ny tontolo iainana.

Fomba kaody

  • Ny anarana miovaova dia tsy maintsy manomboka amin'ny anaran'ny anjara. Izany dia hanamora ny fahafantarana amin'ny hoavy hoe avy aiza ny andraikitry ny fari-piainana ary inona no andraikiny.
  • Rehefa mampiasa variables amin'ny andraikitra ianao dia tokony ho azo antoka fa manaraka ny fitsipiky ny encapsulation ary ampiasao ny fari-piadidiana voafaritra na amin'ny anjara asany na amin'ny andraikitra izay iankinan'ny ankehitriny.
  • Fadio ny mampiasa diksionera ho an'ny variana. Ansible dia tsy mamela anao hanilika ny soatoavina tsirairay ao anaty rakibolana.

    Ohatra amin'ny variable ratsy:

    myrole_user:
        login: admin
        password: admin

    Eto ny fidirana dia ny fari-piainana tsy miankina, ary ny tenimiafina dia ny fari-piainana miankina. SAINGY
    satria atambatra ao anaty rakibolana izy ireo dia tsy maintsy mamaritra azy tanteraka ianao
    foana. Izay tena mahasosotra. Tsara kokoa amin'ity fomba ity:

    myrole_user_login: admin
    myrole_user_password: admin

Variables amin'ny deployment playbooks

Rehefa manangona boky filalaovana fanaparitahana (antsoina hoe boky filalaovana) isika dia manaraka ny fitsipika tokony hapetraka ao anaty tahiry mitokana. Mitovy amin'ny andraikitra: samy ao amin'ny tahiry git azy manokana. Izany dia ahafahanao mahazo fa ny anjara asa sy ny playbook dia zavatra tsy miankina amin'ny rafitra fametrahana, ary ny fiovan'ny zavatra iray dia tsy tokony hisy fiantraikany amin'ny fiasan'ny iray hafa. Izany dia tratra amin'ny fanovana ny sanda default amin'ny variables.

Rehefa manangona playbook, raha fintinina, dia azo atao ny manafoana ny soatoavina default amin'ny fari-piadidiana amin'ny toerana roa: amin'ny fari-pahalalana playbook sy amin'ny fari-piadidiana.

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

* - Variables sy Vaults

Ny mahasamihafa azy dia ny fiovaovan'ny playbook dia ampiasaina foana rehefa miantso playbooks mitovy amin'ny azy. Midika izany fa ireo fari-piadidiana ireo dia tsara amin'ny fanovana ny soatoavina default amin'ny fari-piainana tsy miankina amin'ny tontolo iainana. Mifanohitra amin'izany, ny fari-piadidiana dia tsy hampiasaina afa-tsy amin'ny tontolo iray manokana, izay mety tsara ho an'ny fari-piainana manokana.

Zava-dehibe ny manamarika fa ny laharam-pahamehana miovaova dia tsy hamela anao hanilika ireo fari-pahalalana voalohany amin'ny faribolan'ny playbook ary avy eo misaraka amin'ny lisitra iray.

Midika izany fa amin'izao dingana izao dia ilaina ny manapa-kevitra raha miankina amin'ny tontolo iainana na tsia ny fari-piainana ary apetraka amin'ny toerana mety.

Ohatra, ao amin'ny tetikasa iray, ny fari-piadidiana tompon'andraikitra amin'ny fampandehanana ny SSL dia miankina amin'ny tontolo iainana nandritra ny fotoana ela, satria tsy afaka namela SSL noho ny antony tsy voafehintsika teo amin'ny iray amin'ireo toerana. Taorian'ny nanamboaranay ity olana ity dia nanjary mahaleo tena ny tontolo iainana ary nifindra tany amin'ny faribolan'ny playbook.

Variable fananana ho an'ny vondrona

Andao hanitatra ny maodely amin'ny sary 1 amin'ny fampidirana vondrona mpizara 2 miaraka amin'ny rindranasa Java hafa, saingy misy toe-javatra hafa.

System approach to variables in Ansible

Alao sary an-tsaina ny ho endriky ny playbook amin'ity tranga ity:

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

Manana vondrona telo izahay ao amin'ny playbook, noho izany dia aroso avy hatrany ny hamorona rakitra vondrona mitovy amin'ny vondrona_vars inventory variables sy ny playbook variables. Ny rakitra vondrona iray amin'ity tranga ity dia famaritana ny singa iray amin'ny fampiharana etsy ambony ao amin'ny playbook. Rehefa manokatra rakitra vondrona ao amin'ny faribolan'ny playbook ianao, dia hitanao avy hatrany ny fahasamihafana rehetra amin'ny fitondran-tena mahazatra amin'ny andraikitra napetraka ao amin'ny vondrona. Ao amin'ny fiovaovan'ny inventory: ny fahasamihafan'ny fitondran-tenan'ny vondrona avy amin'ny toerana mijoro.

Code Style

  • Andramo ny tsy mampiasa variables host_vars mihitsy, satria tsy mamaritra ny rafitra izy ireo, fa tranga manokana, izay amin'ny ho avy dia hiteraka fanontaniana: "Nahoana ity mpampiantrano ity no tsy mitovy amin'ny hafa?", Ny valiny dia tsy mora hita foana.

Fifandraisana Variables

Na izany aza, izany no atao hoe variables fananana, fa ahoana kosa ny amin'ny variables amin'ny fifandraisana?
Ny mahasamihafa azy dia ny hoe tokony hitovy ny dikany amin'ny vondrona samihafa.

Tamin'ny voalohany dia nisy izany ilay hevitra mampiasa fanorenana goavana toy ny:
hostvars[groups['bbauth'][0]]['auth_bind_port'], nefa nolavin’izy ireo avy hatrany izany
satria misy fatiantoka. Voalohany, bulkiness. Faharoa, ny fiankinan-doha amin'ny mpampiantrano manokana ao amin'ny vondrona. Fahatelo, alohan'ny hanombohan'ny fametrahana dia ilaina ny manangona ny zava-misy avy amin'ny mpampiantrano rehetra raha tsy te hahazo fahadisoana amin'ny fari-piainana tsy voafaritra.

Vokatr'izany dia nanapa-kevitra ny hampiasa ny fari-piainan'ny fifandraisana.

Fifandraisana Variables - ireo dia variables izay an'ny playbook ary ilaina hampifandraisana ireo zavatra rafitra.

Ny fari-pifandraisana dia misy mponina ao amin'ny fari-piainan'ny rafitra ankapobeny group_vars/all/vars ary amboarina amin'ny alalan'ny fanesorana ny fari-pahaizan'ny mpihaino rehetra avy amin'ny vondrona tsirairay, ary manampy ny anaran'ny vondrona izay nesorina ny mpihaino ho eo am-piandohan'ny fari-piainana.

Izany dia miantoka ny fitoviana sy ny tsy fifandimbiasan'ny anarana.

Andeha isika hanandrana hamatotra ny variables avy amin'ny ohatra etsy ambony:

System approach to variables in Ansible

Alao sary an-tsaina fa manana fari-pitsipika izay miankina amin'ny tsirairay isika:

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

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

Andeha hojerentsika amin'ny fari-pitsipika mahazatra group_vars/all/vars ny mpihaino rehetra, ary ampio ny anaran'ny vondrona amin'ny lohateny:

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

Amin'izao fotoana izao, amin'ny fanovana ny sandan'ny mpampitohy, dia ho azo antoka fa handeha any amin'ny toerana misy ny seranana ny fangatahana.

Code Style

  • Koa satria zavatra hafa rafitra ny andraikitra sy ny vondrona, dia mila manana anarana hafa izy ireo, avy eo ireo fari-pandrafetana rohy dia hanondro marina fa anisan'ny vondrona mpizara manokana izy ireo, fa tsy anjara amin'ny rafitra.

rakitra miankina amin'ny tontolo iainana

Ny andraikitra dia mety mampiasa rakitra tsy mitovy amin'ny tontolo iainana.

Ohatra iray amin'ny rakitra toy izany ny mari-pankasitrahana SSL. Tehirizo amin'ny endrika lahatsoratra izy ireo
amin'ny variable dia tsy mety loatra. Fa mety ny mitahiry ny lalana mankany amin'izy ireo ao anaty fari-piainana.

Ohatra, mampiasa ny variable isika api_ssl_key_file: "/path/to/file".

Koa satria miharihary fa hiova avy amin'ny tontolo iainana mankany amin'ny tontolo iainana ny taratasy fanamarinana fototra, dia fari-piainana miankina amin'ny tontolo iainana izany, izay midika fa tokony ho hita ao amin'ny rakitra.
group_vars/myapi/vars fanisana ny variables, ary misy ny sanda 'ohatra'.

Ny fomba mety indrindra amin'ity tranga ity dia ny fametrahana ny rakitra manan-danja ao amin'ny fitehirizana playbook amin'ny lalana
files/prod/certs/myapi.key, dia ny sandan'ny variable dia:
api_ssl_key_file: "prod/certs/myapi.key". Ny fanamorana dia ny hoe ireo olona tompon'andraikitra amin'ny fanaparitahana ny rafitra amin'ny toerana manokana dia manana toerana manokana ao amin'ny trano fitehirizana ny rakitra. Mandritra izany fotoana izany, dia mbola azo atao ny mamaritra ny lalana tanteraka mankany amin'ny taratasy fanamarinana amin'ny mpizara, raha toa ka omen'ny rafitra hafa ny fanamarinana.

Mijoro maromaro ao anaty tontolo iray

Matetika dia ilaina ny mametraka fijoroana maromaro saika mitovy amin'ny tontolo mitovy ary misy fahasamihafana kely. Amin'ity tranga ity, mizara ny fari-piainana miankina amin'ny tontolo iainana isika amin'ireo izay tsy miova ao anatin'ity tontolo ity sy ireo izay miova. Ary afindranay mivantana any amin'ny fichier inventory ny tenany. Aorian'ity fanodinkodinana ity dia azo atao ny mamorona lisitra hafa mivantana ao amin'ny lahatahiry momba ny tontolo iainana.

Hampiasa indray ny lisitry ny group_vars izy io, ary ho afaka hamaritra mivantana ho an'ny tenany ihany koa.

Ny rafitra lahatahiry farany ho an'ny tetikasa fametrahana:

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

Famintinana

Rehefa avy nandamina ny variables mifanaraka amin'ny lahatsoratra: ny rakitra miovaova tsirairay dia tompon'andraikitra amin'ny asa manokana. Ary satria ny rakitra dia manana asa sasany, dia azo atao ny manendry olona tompon'andraikitra amin'ny fahamarinan'ny rakitra tsirairay. Ohatra, ny mpandrindra ny fametrahana rafitra dia lasa tompon'andraikitra amin'ny famenoana marina ny fari-pahalalana playbook, fa ny mpitantana izay voalaza ao amin'ny lisitra dia tompon'andraikitra mivantana amin'ny famenoana ny lisitry ny variables.

Lasa vondrona fampandrosoana ho azy manokana ny Role miaraka amin'ny interface tsara, ahafahan'ny mpamorona anjara hamolavola fahaiza-manao fa tsy hampifanaraka ny andraikitry ny rafitra. Ity olana ity dia mahakasika indrindra ny anjara andraikitry ny rafitra rehetra amin'ny fampielezan-kevitra.

Tsy mila mahatakatra ny kaody fametrahana intsony ny mpitantana ny rafitra. Ny hany takina amin'izy ireo mba hahombiazana dia ny famenoana ny antontan-taratasin'ny fari-piainan'ny tontolo iainana.

boky sy gazety

  1. tahirin-kevitra

mpanoratra

Kalyuzhny Denis Alexandrovich

Source: www.habr.com

Add a comment