Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΠΎΠ΄Ρ…ΠΎΠ΄ IaC (Infrastructure as Code) состоит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ хранится Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, Π½ΠΎ Π΅Ρ‰Π΅ людСй ΠΈ процСссов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ этот ΠΊΠΎΠ΄ ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‚. МоТно Π»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΈΠ· Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ПО Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ описаниС инфраструктуры? Π‘ΡƒΠ΄Π΅Ρ‚ Π½Π΅ лишним Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Π³ΠΎΠ»ΠΎΠ²Π΅ эту идСю, ΠΏΠΎΠΊΠ° Π±ΡƒΠ΄Π΅Ρ‚Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ.

English version

Π­Ρ‚ΠΎ Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° ΠΌΠΎΠ΅Π³ΠΎ выступлСния Π½Π° DevopsConf 2019-05-28.

Slides and videos

Infrastructure as bash history

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ Π²Ρ‹ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π° Π²Π°ΠΌ говорят: «Ρƒ нас Infrastructure as Code«. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ оказываСтся, Infrastructure as bash history ΠΈΠ»ΠΈ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Documentation as bash history. Π­Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ ситуация, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ случай описывал ДСнис ЛысСнко Π² выступлСниС Как Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всю инфраструктуру ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΡΠΏΠ°Ρ‚ΡŒ спокойно, ΠΎΠ½ рассказал ΠΊΠ°ΠΊ ΠΈΠ· bash history ΠΎΠ½ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΡΡ‚Ρ€ΠΎΠΉΠ½ΡƒΡŽ инфраструктуру Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅.

ΠŸΡ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Infrastructure as bash history это ΠΊΠ°ΠΊ ΠΊΠΎΠ΄:

  1. Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·ΡΡ‚ΡŒ bash history, Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΡ‚Ρ‚ΡƒΠ΄Π°, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, кстати, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅.
  2. вСрсионированиС: Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΡ‚ΠΎ Π·Π°Ρ…ΠΎΠ΄ΠΈΠ» ΠΈ Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π», ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ Π½Π΅ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ это вас ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅.
  3. история: история ΠΊΡ‚ΠΎ ΠΈ Ρ‡Ρ‚ΠΎ сдСлал. Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ смоТСтС Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли потСряСтС сСрвСр.

Π§Ρ‚ΠΎ ΠΆΠ΅ Π΄Π΅Π»Π°Ρ‚ΡŒ?

Infrastructure as Code

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π”Π°ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠΉ странный случай ΠΊΠ°ΠΊ Infrastructure as bash history ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡ‚ΡΠ½ΡƒΡ‚ΡŒ Π·Π° ΡƒΡˆΠΈ ΠΊ Infrastructure as Code, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ послоТнСС Ρ‡Π΅ΠΌ старый Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ LAMPΠΎΠ²Ρ‹ΠΉ сСрвСр, ΠΌΡ‹ ΠΏΡ€ΠΈΠΉΠ΄Π΅ΠΌ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ этот ΠΊΠΎΠ΄ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ, Π΄ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ. Π”Π°Π»Π΅Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Infrastructure as Code ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ПО.

D.R.Y.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

На ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π‘Π₯Π”, Π±Ρ‹Π»Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡Π° пСриодичСски Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ SDS: выпускаСм Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· β€” Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΠΊΠ°Ρ‚Π°Ρ‚ΡŒ, для дальнСйшСго тСстирования. Π—Π°Π΄Π°Ρ‡Π° ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ простая:

  • сюда Π·Π°ΠΉΠ΄ΠΈ ΠΏΠΎ ssh ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ.
  • Ρ‚ΡƒΠ΄Π° скопируй Ρ„Π°ΠΉΠ»ΠΈΠΊ.
  • здСсь ΠΏΠΎΠ΄ΠΏΡ€Π°Π²ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³.
  • Ρ‚Π°ΠΌ запусти сСрвис
  • PROFIT!

Для описанной Π»ΠΎΠ³ΠΈΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ достаточно bash, особСнно Π½Π° Ρ€Π°Π½Π½ΠΈΡ… стадиях ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ стартуСт. Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠ»ΠΎΡ…ΠΎ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ bash, Π½ΠΎ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ запросы Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅Π΅, Π½ΠΎ Ρ‡ΡƒΡ‚ΡŒ-Ρ‡ΡƒΡ‚ΡŒ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ: copy-paste. И Π²ΠΎΡ‚ Ρƒ нас ΡƒΠΆΠ΅ Π΄Π²Π° ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠΈΡ… скрипта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎΠΆΠ΅ самоС. Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ скриптов выросло, ΠΈ ΠΌΡ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ нСкая бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° развСртывания инсталляции, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ скриптами, это достаточно слоТно.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Π΅ΡΡ‚ΡŒ такая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° D.R.Y. (Do not Repeat Yourself). ИдСя Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄. Π—Π²ΡƒΡ‡ΠΈΡ‚ просто, Π½ΠΎ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ этому Π½Π΅ сразу. Π’ нашСм случаС это Π±Ρ‹Π»Π° банальная идСя: ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ ΠΎΡ‚ скриптов. Π’.Π΅. бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° ΠΊΠ°ΠΊ разворачиваСтся инсталляция ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

S.O.L.I.D. for CFM

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ рос ΠΈ СстСствСнным ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ΠΌ стало появлСниС Ansible. Основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° появлСния Π΅Π³ΠΎ это Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ экспСртизы Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈ Ρ‡Ρ‚ΠΎ bash Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для слоТной Π»ΠΎΠ³ΠΈΠΊΠΈ. Ansible Ρ‚ΠΎΠΆΠ΅ стал ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎ Π±Ρ‹ слоТная Π»ΠΎΠ³ΠΈΠΊΠ° Π½Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π»Π°ΡΡŒ Π² хаос, Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° S.O.L.I.D. Π’Π°ΠΊ ΠΆΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Григория ΠŸΠ΅Ρ‚Ρ€ΠΎΠ² Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ «Π—Π°Ρ‡Π΅ΠΌ Π°ΠΉΡ‚ΠΈΡˆΠ½ΠΈΠΊΡƒ Π»ΠΈΡ‡Π½Ρ‹ΠΉ Π±Ρ€Π΅Π½Π΄» Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΠ» вопрос, Ρ‡Ρ‚ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ, Ρ‚Π°ΠΊ устроСн, Ρ‡Ρ‚ΠΎ Π΅ΠΌΡƒ ΠΏΡ€ΠΎΡ‰Π΅ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Ρ‚ΠΎ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ сущностями, Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Если ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ эти Π΄Π²Π΅ ΠΈΠ΄Π΅ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ…, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² описании инфраструктуры Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ S.O.L.I.D. Ρ‡Ρ‚ΠΎ Π±Ρ‹ Π² дальнСйшСм Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту Π»ΠΎΠ³ΠΈΠΊΡƒ.

The Single Responsibility Principle

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ класс выполняСт лишь ΠΎΠ΄Π½Ρƒ Π·Π°Π΄Π°Ρ‡Ρƒ.

НС Π½Π°Π΄ΠΎ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ ΠΈ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½Ρ‹Π΅ боТСствСнныС ΠΌΠ°ΠΊΠ°Ρ€ΠΎΠ½Π½Ρ‹Π΅ монстры. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· простых ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠ². ΠžΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ссли Ρ€Π°Π·Π΄Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ Ansible playbook Π½Π° нСбольшиС кусочки, Ρ‡ΠΈΡ‚Π°ΠΉ Ansible Ρ€ΠΎΠ»ΠΈ, Ρ‚ΠΎ ΠΈΡ… ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ.

The Open Closed Principle

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ открытости/закрытости.

  • ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ для Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ: ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ сущности ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΎ ΠΏΡƒΡ‚Ρ‘ΠΌ создания Π½ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² сущностСй.
  • Π—Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ для измСнСния: Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ повСдСния сущности, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Π½ΠΎΡΠΈΡ‚ΡŒΡΡ измСнСния Π² ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эти сущности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π»ΠΈ Ρ‚Π΅ΡΡ‚ΠΎΠ²ΡƒΡŽ инфраструктуру Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠ°ΡˆΠΈΠ½Π°Ρ…, Π½ΠΎ Π·Π° счСт Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ бизнСс Π»ΠΎΠ³ΠΈΠΊΠ° разворачивания Π±Ρ‹Π»Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΌΡ‹ Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ раскатку Π½Π° baremetall.

The Liskov Substitution Principle

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ подстановки Π‘Π°Ρ€Π±Π°Ρ€Ρ‹ Лисков. ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ замСняСмыми Π½Π° экзСмпляры ΠΈΡ… ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠ² Π±Π΅Π· измСнСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Если ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΡˆΠΈΡ€Π΅, Ρ‚ΠΎ Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ S.O.L.I.D., ΠΎΠ½ΠΎ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΡ€ΠΎ CFM, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡Π½ΠΎΠ΅ Java ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Ρ€Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Java, сСрвСров ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, OS, ΠΈΡ‚Π΄. На это ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я Π±ΡƒΠ΄Ρƒ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ дальнСйшиС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ S.O.L.I.D.

Π’ нашСм случаС Π² Ρ€Π°ΠΌΠΊΠ°Ρ… инфраструктурной ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли ΠΌΡ‹ установили Ρ€ΠΎΠ»ΡŒ imbjava ΠΈΠ»ΠΈ oraclejava, Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ исполняймый Ρ„Π°ΠΉΠ» java. Π­Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ Ρ‚.ΠΊ. Π²Ρ‹ΡˆΠ΅ΡΡ‚ΠΎΡΡ‰Π΅Π΅ Ρ€ΠΎΠ»ΠΈ зависят ΠΎΡ‚ этого повСдСния, ΠΎΠ½ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ java. Π’ Ρ‚ΠΎΠΆΠ΅ врСмя это Π½Π°ΠΌ позволяСт Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ/Π²Π΅Ρ€ΡΠΈΡŽ java Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΏΡ€ΠΈ этом Π½Π΅ измСняя Π»ΠΎΠ³ΠΈΠΊΡƒ развСртывания прилоТСния.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° здСсь кроСтся Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Ansible нСльзя Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅, ΠΊΠ°ΠΊ слСдствиС Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ договорСнности.

The Interface Segregation Principle

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ раздСлСния интСрфСйса Β«ΠΌΠ½ΠΎΠ³ΠΎ интСрфСйсов, ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… для ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠ², Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ ΠΎΠ΄ΠΈΠ½ интСрфСйс ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния.

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ всю Π²Π°Ρ€ΠΈΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ разворачивания прилоТСния Π² ΠΎΠ΄ΠΈΠ½ Ansible playbook, Π½ΠΎ это Π±Ρ‹Π»ΠΎ слоТно ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ, Π° ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΠ³Π΄Π° Ρƒ нас спСцифицирован интСрфСйс Π½Π°Ρ€ΡƒΠΆΡƒ (ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ 443 ΠΏΠΎΡ€Ρ‚) Ρ‚ΠΎ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ инфраструктуру ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠ².

The Dependency Inversion Principle

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ инвСрсии зависимостСй. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. Оба Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций. Абстракции Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ. Π”Π΅Ρ‚Π°Π»ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ ΠΎΡ‚ абстракций.

Π—Π΄Π΅ΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ основан Π½Π° Π°Π½Ρ‚ΠΈΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π΅.

  1. Π£ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠ² Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½ΠΎΠ΅ ΠΎΠ±Π»Π°ΠΊΠΎ.
  2. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Π»Π°ΠΊΠ° ΠΌΡ‹ Π·Π°ΠΊΠ°Π·Ρ‹Π²Π°Π»ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹.
  3. Но Π² Π²ΠΈΠ΄Ρƒ особСнностСй ΠΎΠ±Π»Π°ΠΊΠ°, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ прилоТСния Π±Ρ‹Π»ΠΎ привязано ΠΊ Ρ‚ΠΎΠΌΡƒ, Π½Π° ΠΊΠ°ΠΊΠΎΠΉ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€ ΠΏΠΎΠΏΠ°Π»Π° Π’Πœ.

Π’.Π΅. высокоуровнСвая Π»ΠΎΠ³ΠΈΠΊΠ° развСртывания прилоТСния, зависимостями ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°Π»Π° Π½Π° Π½ΠΈΠΆΠ΅Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π°, ΠΈ это ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ этой Π»ΠΎΠ³ΠΈΠΊΠΈ. НС Π½Π°Π΄ΠΎ Ρ‚Π°ΠΊ.

Interaction

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΊΠ°ΠΊ ΠΊΠΎΠ΄ β€” это Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎ ΠΊΠΎΠ΄, Π½ΠΎ Π΅Ρ‰Ρ‘ ΠΈ ΠΏΡ€ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ, ΠΏΡ€ΠΎ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ инфраструктуры.

Bus factor

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅ΡΡ‚ΡŒ Вася. Вася всё Π·Π½Π°Π΅Ρ‚ ΠΏΡ€ΠΎ Π²Π°ΡˆΡƒ инфраструктуру, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ссли Вася Π²Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠΏΠ°Π΄Π΅Ρ‚? Π­Ρ‚ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½Π°Ρ ситуация, вСдь Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ±ΠΈΡ‚ΡŒ автобус. Иногда Ρ‚Π°ΠΊΠΎΠ΅ случаСтся. Если Ρ‚Π°ΠΊΠΎΠ΅ случится ΠΈ Π·Π½Π°Π½ΠΈΠ΅ ΠΎΠ± ΠΊΠΎΠ΄Π΅, Π΅Π³ΠΎ структурС, ΠΊΠ°ΠΊ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, явках ΠΈ паролях, Π½Π΅ распрСдСлСны Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ с рядом нСприятных ситуаций. Π§Ρ‚ΠΎ Π±Ρ‹ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эти риски ΠΈ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Π½ΠΈΠ΅ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹

Pair Devopsing

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π­Ρ‚ΠΎ Π½Π΅ ΠΊΠ°ΠΊ Π² ΡˆΡƒΡ‚ΠΊΠ΅, Ρ‡Ρ‚ΠΎ Π°Π΄ΠΌΠΈΠ½Ρ‹ ΠΏΠΈΠ»ΠΈ ΠΏΠΈΠ²ΠΎ, ΠΏΠ°Ρ€ΠΎΠ»ΠΈ мСняли, Π° Π°Π½Π°Π»ΠΎΠ³ ΠΏΠ°Ρ€Π½ΠΎΠ³ΠΎ программирования. Π’.Π΅. Π΄Π²Π° ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° садятся Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΎΠ΄Π½Ρƒ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ вмСстС Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π²Π°ΡˆΡƒ инфраструктуру: сСрвСр Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ, Ansible Ρ€ΠΎΠ»ΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΈΡ‚Π΄. Π—Π²ΡƒΡ‡ΠΈΡ‚ красиво, Π½ΠΎ Ρƒ нас Π½Π΅ сработало. Но Π²ΠΎΡ‚ частныС случаи этой ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ. ΠŸΡ€ΠΈΡˆΠ΅Π» Π½ΠΎΠ²Ρ‹ΠΉ сотрудник, Π΅Π³ΠΎ наставник вмСстС с Π½ΠΈΠΌ Π±Π΅Ρ€Π΅Ρ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€” ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π·Π½Π°Π½ΠΈΠ΅.

Π”Ρ€ΡƒΠ³ΠΎΠΉ частный случай, это incident call. Π’ΠΎ врСмя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ собираСтся Π³Ρ€ΡƒΠΏΠΏΠ° Π΄Π΅ΠΆΡƒΡ€Π½Ρ‹Ρ… ΠΈ причастных, назначаСтся ΠΎΠ΄ΠΈΠ½ Π²Π΅Π΄ΡƒΡ‰ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°ΡΡˆΠ°Ρ€ΠΈΠ²Π°Π΅Ρ‚ свой экран ΠΈ ΠΎΠ·Π²ΡƒΡ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ…ΠΎΠ΄ мысли. Π”Ρ€ΡƒΠ³ΠΈΠ΅ участники ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π·Π° ΠΌΡ‹ΡΠ»ΡŒΡŽ Π²Π΅Π΄ΡƒΡ‰Π΅Π³ΠΎ, ΠΏΠΎΠ΄ΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ Ρ‚Ρ€ΡŽΠΊΠΈ ΠΈΠ· консоли, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ Ρ‡Ρ‚ΠΎ Π½Π΅ пропустил строчку Π² Π»ΠΎΠ³Π΅, ΡƒΠ·Π½Π°ΡŽΡ‚ Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠ± систСмС. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ скорСС Ρ€Π°Π±ΠΎΡ‚Π°Π», Ρ‡Π΅ΠΌ Π½Π΅Ρ‚.

Code Review

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π‘ΡƒΠ±ΡŒΠ΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ, Π±ΠΎΠ»Π΅Π΅ эффСктивно распространСниС Π·Π½Π°Π½ΠΈΠΉ ΠΎΠ± инфраструктурС ΠΈ Ρ‚ΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ½Π° устроСна ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΎ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ code review:

  • Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° описана ΠΊΠΎΠ΄ΠΎΠΌ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.
  • ИзмСнСния происходят Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅.
  • ΠŸΡ€ΠΈ ΠΌΠ΅Ρ€Π΄ΠΆΠ΅ рСквСстС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Π΄Π΅Π»ΡŒΡ‚Ρƒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ инфраструктуру.

Изюминкой здСсь Π±Ρ‹Π»ΠΎ, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Ρ€Π΅Π²ΡŒΡŽΠ²Π΅Ρ€Ρ‹ Π²Ρ‹Π±ΠΈΡ€Π°Π»ΠΈΡΡŒ ΠΏΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ, ΠΏΠΎ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ, Ρ‚.Π΅. с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΠ»Π΅ΠΉ вСроятности Ρ‚Ρ‹ залСзСшь Π² Π½ΠΎΠ²Ρ‹ΠΉ участок инфраструктуры.

Code Style

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π‘ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ стали ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ склоки Π²ΠΎ врСмя Ρ€Π΅Π²ΡŒΡŽ, Ρ‚.ΠΊ. Ρƒ Ρ€Π΅Π²ΡŒΡŽΠ²Π΅Ρ€ΠΎΠ² Π±Ρ‹Π» свой ΡΡ‚ΠΈΠ»ΡŒ ΠΈ ротируСмости Ρ€Π΅Π²ΡŒΡŽΠ²Π΅Ρ€ΠΎΠ² стакивала ΠΈΡ… с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ стилями: 2 ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΈΠ»ΠΈ 4, camelCase ΠΈΠ»ΠΈ snake_case. Π’Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ это ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π½Π΅ сразу.

  • ΠŸΠ΅Ρ€Π²ΠΎΠΉ ΠΈΠ΄Π΅ΠΉ Π±Ρ‹Π»ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡΠΎΠ²Π΅Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ linter, вСдь всС ΠΆΠ΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹, всС ΡƒΠΌΠ½Ρ‹Π΅. Но Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹, ОБ, Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ
  • Π­Ρ‚ΠΎ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π»ΠΎ Π² Π±ΠΎΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠΌΡƒ писал Π² slack, ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°Π» Π²Ρ‹Π²ΠΎΠ΄ linter. Но Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв Π½Π°Ρ…ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π΄Π΅Π»Π° ΠΈ ΠΊΠΎΠ΄ оставался Π½Π΅ исправлСнным.

Green Build Master

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ВрСмя ΠΈΠ΄Π΅Ρ‚, ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ нСльзя ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π² мастСр ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ проходят Π½Π΅ΠΊΠΈΠ΅ тСсты. Вуаля! ΠΌΡ‹ ΠΈΠ·ΠΎΠ±Ρ€Π΅Π»ΠΈ Green Build Master ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ Π΄Π°Π²Π½Ρ‹ΠΌ-Π΄Π°Π²Π½ΠΎ практикуСтся Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО:

  • Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ΄Π΅Ρ‚ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅.
  • По этой Π²Π΅Ρ‚ΠΊΠ΅ Π³ΠΎΠ½ΡΡŽΡ‚ΡΡ тСсты.
  • Если тСсты Π½Π΅ проходят, Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² мастСр.

ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΈΠ΅ этого Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π±Ρ‹Π»ΠΎ вСсьма Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½Ρ‹ΠΌ, Ρ‚.ΠΊ. Π²Ρ‹Π·Π²Π°Π»ΠΎ мноТСство споров, Π½ΠΎ ΠΎΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ стоило, Ρ‚.ΠΊ. Π½Π° Ρ€Π΅Π²ΡŒΡŽ стали ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ запросы Π½Π° слияниС Π±Π΅Π· разногласий ΠΏΠΎ ΡΡ‚ΠΈΠ»ΡŽ ΠΈ со Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… мСст стало ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Ρ‚ΡŒΡΡ.

IaC Testing

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠšΡ€ΠΎΠΌΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ стиля ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ваша инфраструктура Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ. Или ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ измСнСния Π² инфраструктурС Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄ΡƒΡ‚ ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ Π΄Π΅Π½Π΅Π³. Π—Π°Ρ‡Π΅ΠΌ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ? Вопрос слоТный ΠΈ философский, ΠΎΡ‚Π²Π΅Ρ‚ΠΈΡ‚ΡŒ Π»ΡƒΡ‡ΡˆΠ΅ Π±Π°ΠΉΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Π±Ρ‹Π» auto-scaler Π½Π° Powershell ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, Π½Π΅ провСрял ΠΏΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ условия => создалось большС Π’Πœ Ρ‡Π΅ΠΌ Π½Π°Π΄ΠΎ => ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΠΎΡ‚Ρ€Π°Ρ‚ΠΈΠ» Π΄Π΅Π½Π΅Π³ большС Ρ‡Π΅ΠΌ ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π». ΠŸΡ€ΠΈΡΡ‚Π½ΠΎΠ³ΠΎ ΠΌΠ°Π»ΠΎ, Π½ΠΎ эту ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²ΠΏΠΎΠ»Π½Π΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½ΠΈΡ… стадиях.

МоТно ΡΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ, Π° Π·Π°Ρ‡Π΅ΠΌ Π΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ инфраструктуру Π΅Ρ‰Π΅ слоТнСС? ВСсты для инфраструктуры, Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ для ΠΊΠΎΠ΄Π°, это Π½Π΅ ΠΏΡ€ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅, Π° ΠΏΡ€ΠΎ Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ваша инфраструктура Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

IaC Testing Pyramid

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

IaC Testing: Static Analysis

Если сразу Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ всю инфраструктуру ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ это Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΡƒΠΉΠΌΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΡƒΡ‡Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² основС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ быстро Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅, Π΅Π³ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ ΠΎΠ½ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ мноТСство ΠΏΡ€ΠΈΠΌΡ‚ΠΈΠ²Π½Ρ‹Ρ… мСст.

Bash is tricky

Π’ΠΎΡ‚ рассмотрим Π±Π°Π½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС Ρ„Π°ΠΉΠ»Ρ‹ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΈ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ мСсто. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² Π³ΠΎΠ»ΠΎΠ²Ρƒ:

for i in * ; do 
    cp $i /some/path/$i.bak
done

А Ρ‡Ρ‚ΠΎ Ссли Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠ±Π΅Π» Π΅ΡΡ‚ΡŒ? Ну ΠΎΠΊ, ΠΌΡ‹ ΠΆΠ΅ ΡƒΠΌΠ½Ρ‹Π΅, ΡƒΠΌΠ΅Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ:

for i in * ; do cp "$i" "/some/path/$i.bak" ; done

ΠœΠΎΠ»ΠΎΠ΄Ρ†Ρ‹? Π½Π΅Ρ‚! Π§Ρ‚ΠΎ Ссли Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ, Ρ‚.Π΅. Π³Π»ΠΎΠ±ΠΈΠ½Π³ Π½Π΅ сработаСт.

find . -type f -exec mv -v {} dst/{}.bak ;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎ ΠΌΠΎΠ»ΠΎΠ΄Ρ†Ρ‹? нСа… Π—Π°Π±Ρ‹Π»ΠΈ Ρ‡Ρ‚ΠΎ Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ n.

touch x
mv x  "$(printf "foonbar")"
find . -type f -print0 | xargs -0 mv -t /path/to/target-dir

Static analysis tools

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ шага ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΡ‚Π»ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π·Π°Π±Ρ‹Π»ΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, для это Π² ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π΅ сущСствуСт мноТСство срСдство Shellcheck, Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΈΡ… ΠΌΠ½ΠΎΠ³ΠΎ, ΠΈ скорСй всСго Π²Ρ‹ смоТСтС Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎΠ΄ свою IDE Π»ΠΈΠ½Ρ‚Π΅Ρ€ для вашСго стэка.

Language
Tool

bash
Shellcheck

Ruby
RuboCop

python
Pylint

ansible
Ansible Lint

IaC Testing: Unit Tests

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Как ΠΌΡ‹ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹ Π½Π΅ всСмогущиС ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π° всС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Π΅ мСста. Π”Π°Π»ΡŒΡˆΠ΅ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с тСстированиСм Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ПО ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎ unit tests. Π’ΡƒΡ‚ сразу Π½Π° ΡƒΠΌ приходят shunit, junit, rspec, pytest. Но Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ansible, chef, saltstack ΠΈ ΠΈΠΆΠ΅ с Π½ΠΈΠΌΠΈ?

Π’ самом Π½Π°Ρ‡Π°Π»Π΅ ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ ΠΏΡ€ΠΎ S.O.L.I.D. ΠΈ Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ наша инфраструктура Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠ². ΠŸΡ€ΠΈΡˆΠ»ΠΎ ΠΈΡ… врСмя.

  1. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° дробится Π½Π° малСнькиС ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ansible Ρ€ΠΎΠ»ΠΈ.
  2. РазворачиваСтся ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ docker ΠΈΠ»ΠΈ Π’Πœ.
  3. На это тСстовоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ примСняСм Π½Π°ΡˆΡƒ Ansible Ρ€ΠΎΠ»ΡŒ.
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Ρ‡Ρ‚ΠΎ всС ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ (прогоняСм тСсты).
  5. РСшаСм ок или нС ок.

IaC Testing: Unit Testing tools

Вопрос, Π° Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ тСсты для CFM? ΠΌΠΎΠΆΠ½ΠΎ банально Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ скрипт, Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ для этого:

CFM
Tool

Ansible
Testinfra

Chef
Inspec

Chef
Serverspec

saltstack
Goss

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ для testinfra, провСряСм Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ test1, test2 ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΈ состоят Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ sshusers:

def test_default_users(host):
    users = ['test1', 'test2' ]
    for login in users:
        assert host.user(login).exists
        assert 'sshusers' in host.user(login).groups

Π§Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ? вопрос слоТный ΠΈ Π½Π΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½Ρ‹ΠΉ, Π²ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ измСнСния Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π° github Π·Π° 2018-2019 Π³ΠΎΠ΄Π°:

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

IaC Testing frameworks

Π’ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΊΠ°ΠΊ это всС ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ вмСстС ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ? МоТно Π²Π·ΡΡ‚ΡŒ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ всё самому ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ достаточного ΠΊΠΎΠ»-Π²ΠΎ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ². А ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€Π°Π²Π΄Π° ΠΈΡ… Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ-Ρ‚ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ:

CFM
Tool

Ansible
Molecule

Chef
Test Kitchen

Terraform
Terratest

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ измСнСния Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π° github Π·Π° 2018-2019 Π³ΠΎΠ΄Π°:

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Molecule vs. Testkitchen

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ testkitchen:

  1. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π’Πœ Π² ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒ.
  2. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ansible Ρ€ΠΎΠ»ΠΈ.
  3. ΠŸΡ€ΠΎΠ³ΠΎΠ½ΡΡ‚ΡŒ inspec.

Для 25-35 Ρ€ΠΎΠ»Π΅ΠΉ это Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ 40-70 ΠΌΠΈΠ½ΡƒΡ‚, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄ΠΎΠ»Π³ΠΎ.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ шагом стал ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° jenkins / docker / ansible / molecule. Π˜Π΄ΠΈΠΎΠ»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΈ всС Ρ‚ΠΎΠΆΠ΅ самоС

  1. ΠŸΡ€ΠΎΠ»ΠΈΠ½Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ плэйбуки.
  2. ΠŸΡ€ΠΎΠ»ΠΈΠ½Ρ‚ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΎΠ»ΠΈ.
  3. Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
  4. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ansible Ρ€ΠΎΠ»ΠΈ.
  5. ΠŸΡ€ΠΎΠ³ΠΎΠ½ΡΡ‚ΡŒ testinfra.
  6. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π›ΠΈΠ½Ρ‚ΠΎΠ²ΠΊΠ° для 40 Ρ€ΠΎΠ»Π΅ΠΉ ΠΈ тСсты для дСсятка стали Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ порядка 15 ΠΌΠΈΠ½ΡƒΡ‚.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π§Ρ‚ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ зависит ΠΎΡ‚ мноТСства Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², ΠΊΠ°ΠΊ Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ стэк, экспСртиза Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΡ‚Π΄. Ρ‚ΡƒΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ сам ΠΊΠ°ΠΊ Π·Π°ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ вопрос Unit тСстирования

IaC Testing: Integration Tests

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

На ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ступСни ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹ тСстирования инфраструктуры ΠΏΠΎΡΠ²Π»ΡŽΡ‚ΡΡ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты. Они ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Unit тСсты:

  1. Π˜Π½Ρ„Ρ€Π°ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° дробится Π½Π° малСнькиС ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ansible Ρ€ΠΎΠ»ΠΈ.
  2. РазворачиваСтся ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ docker ΠΈΠ»ΠΈ Π’Πœ.
  3. На это тСстовоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ примСняСтся мноТСство Ansible Ρ€ΠΎΠ»Π΅ΠΉ.
  4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Ρ‡Ρ‚ΠΎ всС ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ(прогоняСм тСсты).
  5. РСшаСм ок или нС ок.

Π“Ρ€ΡƒΠ±ΠΎ говоря, ΠΌΡ‹ Π½Π΅ провСряСм Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта систСмы ΠΊΠ°ΠΊ Π² unit тСстах, ΠΌΡ‹ провСряСм ΠΊΠ°ΠΊ сСрвСр сконфигурирован Π² Ρ†Π΅Π»ΠΎΠΌ.

IaC Testing: End to End Tests

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

На Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹ нас Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ End to End тСсты. Π’.Π΅. ΠΌΡ‹ Π½Π΅ провСряСм Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сСрвСра, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ скрипта, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠ° нашСй инфраструктуры. ΠœΡ‹ провСряСм Ρ‡Ρ‚ΠΎ мноТСство сСрвСров, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Π²ΠΎΠ΅Π΄ΠΈΠ½ΠΎ, наша инфраструктура Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΌΡ‹ этого ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ. К соТалСнию Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΡ€ΠΎΠ±ΠΎΡ‡Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΌΠ½Π΅ Π½Π΅ доводилось Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π½Π°Π²Π΅Ρ€Π½ΠΎ Ρ‚.ΠΊ. инфраструктура Π·Π° Ρ‡Π°ΡΡ‚ΡƒΡŽ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Π°Ρ ΠΈ Π΅Π΅ слоТно ΡˆΠ°Π±Π»ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ фрэймворк для Π΅Π΅ тСстирования. Как ΠΈΡ‚ΠΎΠ³ всС ΡΠΎΠ·Π΄Π°ΡŽΡ‚ свои собствСнныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ. Бпрос Π΅ΡΡ‚ΡŒ, Π° Π²ΠΎΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π΅Ρ‚. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, расскаТу Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π½Π° Π·Π΄Ρ€Π°Π²Ρ‹Π΅ мысли ΠΈΠ»ΠΈ Ρ‚ΠΊΠ½ΡƒΡ‚ΡŒ мСня носом, Ρ‡Ρ‚ΠΎ всё Π΄Π°Π²Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π΅Π½ΠΎ Π΄ΠΎ нас.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ с Π±ΠΎΠ³Π°Ρ‚ΠΎΠΉ историСй. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… организациях ΠΈ вСроятно ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· вас косвСнно пСрСсСкался. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ мноТСство Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΉ ΠΈΡ‚Π΄ ΠΈΡ‚ΠΏ. Π—Π½Π°Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ инфраструктура ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ это мноТСство docker-compose Ρ„Π°ΠΉΠ»ΠΎΠ², Π° Π·Π½Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ тСсты Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ β€” это jenkins.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Π­Ρ‚Π° схСма достаточно Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π»Π°, ΠΏΠΎΠΊΠ° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… исслСдования ΠΌΡ‹ Π½Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ это пСрСнСсти Π² Openshift. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Ρ‚Π΅ΠΆΠ΅, Π° Π²ΠΎΡ‚ срСда запуска смСнилась (ΠΏΡ€ΠΈΠ²Π΅Ρ‚ D.R.Y. ΠΎΠΏΡΡ‚ΡŒ).

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

ΠœΡ‹ΡΠ»ΡŒ исслСдования пошла дальшС, ΠΈ Π² openshift нашлась такая ΡˆΡ‚ΡƒΠΊΠ° APB (Ansible Playbook Bundle), которая позволяСт Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π°ΠΏΠ°ΠΊΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Ρ€Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ инфраструктуру. Π’.Π΅. Π΅ΡΡ‚ΡŒ воспроизводимая, тСстируСмая Ρ‚ΠΎΡ‡ΠΊΠ° знания, ΠΊΠ°ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ инфраструктуру.

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Всё это Π·Π²ΡƒΡ‡Π°Π»ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡƒΡ‚ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ Π² Π³Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½ΡƒΡŽ инфраструктуру: Π½Π°ΠΌ для тСстов Π½ΡƒΠΆΠ½Π° Windows. Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π·Π½Π°Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΎΠΌ Ρ‡Ρ‚ΠΎ, Π³Π΄Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ, ΠΈ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ сидит Π² jenkins.

Conclusion

Π§Ρ‚ΠΎ я ΡƒΠ·Π½Π°Π», протСстировав 200 000 строк инфраструктурного ΠΊΠΎΠ΄Π°

Infrastructure as Code это

  • Код Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.
  • ВзаимодСйствиС людСй.
  • ВСстированиС инфраструктуры.

links

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com