ansible devops codestyle
Hey! jenengku
Pandhuan iki nawakake cara kanggo ngatur variabel ing panyebaran. Pandhuan iki ditujokake kanggo wong sing wis nggunakake peran ing playbook lan wis maca
- Sawise nemokake variabel ing kode kasebut, ora bisa langsung ngerti apa tanggung jawabe;
- Ana sawetara peran, lan variabel kudu digandhengake karo siji nilai, nanging mung ora bisa;
- Duwe kangelan nerangake marang wong liya carane logika variabel ing playbook sampeyan bisa digunakake
Kita nemoni masalah kasebut ing proyek ing perusahaan kita, minangka asil saka aturan kanggo ngrancang variabel ing playbooks, sing bisa ngatasi masalah kasebut.
Variabel ing peran
Peran minangka Obyek kapisah saka sistem penyebaran. Kaya obyek sistem, kudu duwe antarmuka kanggo interaksi karo sistem liyane. Antarmuka kasebut minangka variabel peran.
Ayo njupuk, contone, peran api
, sing nginstal aplikasi Java ing server. Apa variabel sing bisa diduweni?
Peran variabel bisa dipérang dadi 2 jinis miturut jinis:
1. Свойства
a) независимые от среды
б) зависимые от среды
2. Связи
a) слушатели
б) запросы внутри системы
в) запросы в среду
Sifat variabel yaiku variabel sing nemtokake prilaku peran.
Variabel Pitakonan - iki minangka variabel sing nilai digunakake kanggo nemtokake sumber daya njaba peran.
Variabel pamireng - iki variabel sing nilai digunakake kanggo mbentuk variabel request.
Ing sisih liya, 1a, 2a, 2b minangka variabel sing ora gumantung ing lingkungan (perangkat keras, sumber daya eksternal, lsp) lan bisa diisi nilai standar ing peran standar. Nanging, ora mungkin kanggo ngisi variabel jinis 1.b lan 2.c kanthi nilai liyane saka 'conto', amarga bakal ganti saka stand menyang stand gumantung saka lingkungan.
Gaya kode
- Jeneng variabel kudu diwiwiti kanthi jeneng peran. Iki bakal luwih gampang kanggo mangerteni ing mangsa ngarep apa peran variabel kasebut lan apa tanggung jawabe.
- Nalika nggunakake variabel ing peran, sampeyan kudu ngetutake prinsip enkapsulasi lan nggunakake variabel sing ditetepake ing peran kasebut utawa ing peran sing saiki gumantung.
-
Aja nggunakake kamus kanggo variabel. Ansible ora ngidini sampeyan ngganti nilai individu kanthi gampang ing kamus.
Tuladha variabel ala:
myrole_user: login: admin password: admin
Ing kene login minangka variabel bebas, lan tembung sandi minangka variabel gumantung. Nanging
amarga digabungake dadi kamus, sampeyan kudu nemtokake kanthi lengkap
tansah. Kang banget ora trep. Luwih apik kanthi cara iki:myrole_user_login: admin myrole_user_password: admin
Variabel ing playbooks penyebaran
Nalika nyusun playbook penyebaran (sabanjuré diarani minangka playbook), kita netepi aturan sing kudu diselehake ing gudang sing kapisah. Padha peran: saben ing repositori git dhewe. Iki ngidini sampeyan ngerti yen peran lan playbook minangka obyek independen sing beda saka sistem penyebaran, lan owah-owahan ing siji obyek kudu ora mengaruhi operasi liyane. Iki digayuh kanthi ngganti nilai standar variabel.
Nalika nyusun playbook, kanggo ngringkes, sampeyan bisa ngilangi nilai standar variabel peran ing rong panggonan: ing variabel playbook lan ing variabel inventaris.
mydeploy # Каталог деплоя
├── deploy.yml # Плейбук деплоя
├── group_vars # Каталог переменных плейбука
│ ├── all.yml # Файл для переменных связи всей системы
│ └── myapi.yml # Файл переменных свойств группы myapi
└── inventories #
└── prod # Каталог окружения prod
├── prod.ini # Инвентори файл
└── group_vars # Каталог для переменных инвентори
└── myapi #
├── vars.yml # Средозависимые переменные группы myapi
└── vault.yml # Секреты (всегда средозависимы) *
Bentenipun punika variabel playbook tansah digunakake nalika nelpon playbooks dumunung ing tingkat padha. Iki tegese variabel kasebut apik kanggo ngganti nilai standar variabel bebas lingkungan. Kosok baline, variabel inventaris mung bakal digunakake kanggo lingkungan tartamtu, sing becik kanggo variabel khusus lingkungan.
Wigati dimangerteni manawa prioritas variabel ora ngidini sampeyan ngganti variabel dhisik ing variabel playbook banjur kanthi kapisah ing siji persediaan.
Iki tegese wis ing tahap iki perlu kanggo mutusake manawa variabel kasebut gumantung karo lingkungan utawa ora lan dilebokake ing papan sing cocog.
Contone, ing sawijining proyek, variabel sing tanggung jawab kanggo ngaktifake SSL wis suwe gumantung karo lingkungan, amarga kita ora bisa ngaktifake SSL amarga alasan sing ora bisa dikontrol ing salah sawijining stand. Sawise kita ndandani masalah iki, dadi lingkungan independen lan dipindhah menyang variabel playbook.
Variabel Properti kanggo Grup
Ayo nggedhekake model kita ing Gambar 1 kanthi nambahake 2 klompok server kanthi aplikasi Java sing beda, nanging kanthi setelan sing beda.
Ayo bayangake kaya apa playbook ing kasus iki:
- hosts: myapi
roles:
- api
- hosts: bbauth
roles:
- auth
- hosts: ghauth
roles:
- auth
We duwe telung klompok ing playbook, supaya langsung dianjurake kanggo nggawe nomer padha file grup ing variabel persediaan group_vars lan variabel playbook. Siji file grup ing kasus iki minangka katrangan babagan siji komponen aplikasi ing ndhuwur ing playbook. Nalika mbukak file grup ing variabel playbook, sampeyan langsung ndeleng kabeh beda saka prilaku standar peran diinstal ing grup. Ing variabel persediaan: beda ing prilaku klompok saka stand kanggo ngadeg.
Kode Gaya
- Coba ora nggunakake variabel host_vars ing kabeh, amarga padha ora njlèntrèhaké sistem, nanging mung kasus khusus, kang ing mangsa bakal mimpin kanggo pitakonan: "Napa host iki beda saka liyane?", Jawaban sing ora. tansah gampang ditemokake.
Variabel Komunikasi
Nanging, apa variabel properti kabeh babagan, nanging babagan variabel komunikasi?
Bedane yaiku kudu padha tegese ing kelompok beda.
Ing kawitan iku
hostvars[groups['bbauth'][0]]['auth_bind_port']
, nanging padha langsung nolak
amarga nduweni kekurangan. Kaping pisanan, bulkiness. Kapindho, katergantungan ing host tartamtu ing grup kasebut. Katelu, sadurunge miwiti panyebaran, perlu kanggo ngumpulake fakta saka kabeh host yen ora pengin entuk kesalahan saka variabel sing ora ditemtokake.
Akibaté, diputusake nggunakake variabel komunikasi.
Variabel Komunikasi - iki minangka variabel sing ana ing playbook lan dibutuhake kanggo nyambungake obyek sistem.
Variabel komunikasi diisi ing variabel sistem umum group_vars/all/vars
lan kawangun kanthi mbusak kabeh variabel pamireng saka saben grup, lan nambah jeneng grup saka ngendi pamireng wis dibusak menyang awal variabel.
Iki njamin keseragaman lan ora tumpang tindih jeneng.
Ayo nyoba ngiket variabel saka conto ing ndhuwur:
Ayo bayangake yen kita duwe variabel sing gumantung ing siji liyane:
# roles/api/defaults:
# Переменная запроса
api_auth1_address: "http://example.com:80"
api_auth2_address: "http://example2.com:80"
# roles/auth/defaults:
# Переменная слушатель
auth_bind_port: "20000"
Ayo dilebokake ing variabel umum group_vars/all/vars
kabeh pamireng, lan tambahake jeneng grup menyang judhul:
# 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 }}"
Saiki, kanthi ngganti nilai konektor, kita bakal yakin manawa panyuwunan bakal menyang papan sing padha karo port kasebut.
Kode Gaya
- Amarga peran lan klompok minangka obyek sistem sing beda, mula kudu duwe jeneng sing beda-beda, mula variabel link bakal nuduhake kanthi akurat manawa ana ing klompok server tartamtu, lan dudu peran ing sistem kasebut.
File gumantung lingkungan
Peran bisa nggunakake file sing beda-beda saka lingkungan menyang lingkungan.
Conto file kasebut yaiku sertifikat SSL. Simpen ing wangun teks
ing variabel ora trep banget. Nanging trep kanggo nyimpen dalan menyang wong-wong mau ing variabel.
Contone, kita nggunakake variabel api_ssl_key_file: "/path/to/file"
.
Amarga jelas manawa sertifikat kunci bakal ganti saka lingkungan menyang lingkungan, iki minangka variabel sing gumantung karo lingkungan, tegese kudu ana ing file kasebut.
group_vars/myapi/vars
inventarisasi variabel, lan ngemot nilai 'contone'.
Cara sing paling trep ing kasus iki yaiku nyelehake file kunci ing repositori playbook ing sadawane dalan
files/prod/certs/myapi.key
, banjur nilai variabel bakal dadi:
api_ssl_key_file: "prod/certs/myapi.key"
. Penak dumunung ing kasunyatan manawa wong sing tanggung jawab kanggo nyebarake sistem kasebut ing papan tartamtu uga duwe papan khusus ing gudang kanggo nyimpen file. Ing wektu sing padha, tetep bisa nemtokake path absolut menyang sertifikat ing server, yen sertifikat diwenehake dening sistem liyane.
Multiple stands ing siji lingkungan
Asring ana perlu kanggo masang sawetara stands meh podho rupo ing lingkungan padha karo minimal beda. Ing kasus iki, kita dibagi variabel gumantung lingkungan menyang sing ora owah ing lingkungan iki lan sing diganti. Lan kita nransfer sing terakhir langsung menyang file inventaris dhewe. Sawise manipulasi iki, bisa nggawe inventaris liyane langsung ing direktori lingkungan.
Bakal nggunakake maneh persediaan group_vars, lan uga bakal bisa redefine sawetara variabel langsung kanggo dhewe.
Struktur direktori pungkasan kanggo proyek penyebaran:
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
Summing up
Sawise ngatur variabel sesuai karo artikel: saben file variabel tanggung jawab kanggo tugas tartamtu. Lan amarga file kasebut duwe tugas tartamtu, mula bisa nemtokake wong sing tanggung jawab kanggo bener saben file. Contone, pangembang penyebaran sistem dadi tanggung jawab kanggo ngisi variabel playbook sing bener, dene pangurus sing diterangake ing inventaris langsung tanggung jawab kanggo ngisi inventaris variabel.
Peran dadi unit pangembangan dhewe kanthi antarmuka dhewe, ngidini pangembang peran ngembangake kapabilitas tinimbang ngatur peran kasebut menyang sistem. Masalah iki utamané ngangap peran umum kanggo kabeh sistem ing kampanye.
Administrator sistem ora perlu maneh ngerti kode panyebaran. Kabeh sing dibutuhake kanggo panyebaran sukses yaiku ngisi file variabel sing gumantung ing lingkungan.
Sastra
penulis
Kalyuzhny Denis Alexandrovich
Source: www.habr.com