ΠΡΠΎ ΡΠ°ΡΡΠΈΡΡΠΎΠ²ΠΊΠ°
ΠΠ°ΡΠΈΠ½Π°Ρ ΡΠΎ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡΠ° Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ legacy, Ρ.ΠΊ. ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π·Π°Π΄ΡΠΌΠΊΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΈΡΡΡΡ Ρ ΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΡΡ. ΠΡΠΎ Π½Π΅ Ρ ΠΎΡΠΎΡΠΎ ΠΈ Π½Π΅ ΠΏΠ»ΠΎΡ ΠΎ, ΡΡΠΎ Π΄Π°Π½Π½ΠΎΡΡΡ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΏΠΎΡΠΈΡΡ ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΆΠΈΠ²Π°ΡΡΡΡ. Π§Π°ΡΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³. Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ Infrastructure as Code. ΠΠ° Π½Π°ΡΠ½Π΅ΡΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΊΠ°ΠΊ ΠΎΡΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΡ Ansible Π·Π° Π³ΠΎΠ΄ ΠΈ Π½Π΅ ΡΠ»Π΅ΡΠ΅ΡΡ Ρ ΠΊΠ°ΡΡΡΠ΅ΠΊ.
ΠΠ°ΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Legacy
ΠΠ΅Π½Ρ β 1: ΠΡΠ»Π΅Π²ΠΎΠΉ ΠΏΠ°ΡΠΈΠ΅Π½Ρ
ΠΠΈΠ» Π±ΡΠ» ΡΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ. ΠΠ° Π½Π΅ΠΌ Π±ΡΠ»Π° Dev ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Ops ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ. ΠΠ½ΠΈ ΡΠ΅ΡΠ°Π»ΠΈ ΠΎΠ΄Π½Ρ ΠΈ ΡΡ ΠΆΠ΅ Π·Π°Π΄Π°ΡΡ: ΠΊΠ°ΠΊ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ΡΠ°Π»Π° ΡΡΡ Π·Π°Π΄Π°ΡΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΌΡ. ΠΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Ansible Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π·Π½Π°Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Dev ΠΈ Ops.
ΠΠ΅Π½Ρ β 89: ΠΠ°ΡΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Legacy
Π‘Π°ΠΌΠΈ ΡΠΎΠ³ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΠ², Ρ ΠΎΡΠ΅Π»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π»ΡΡΡΠ΅, Π° ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ legacy. ΠΠ°ΠΊ ΡΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ?
- Π£ Π½Π°Ρ ΡΡΡ ΡΡΠΎΡΠ½Π°Ρ ΡΠ°ΡΠΊΠ°, ΡΠ΄Π΅Π»Π°Π΅ΠΌ Π³ΡΡΠ·Π½ΡΠΉ Ρ Π°ΠΊ β ΠΏΠΎΡΠΎΠΌ ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ.
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ ΠΈ ΡΠ°ΠΊ Π²ΡΡ ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΡΡΠΎ ΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
- Π― Π·Π½Π°Ρ Ansible / Python / Bash / Terraform! Π‘ΠΌΠΎΡΡΠΈΡΠ΅ ΠΊΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΈΠ·Π²Π΅ΡΠ½ΡΡΡΡΡ!
- Π― Full Stack Overflow Developer ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π» ΡΡΠΎ ΡΠΎ stackoverflow, Π½Π΅ Π·Π½Π°Ρ ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, Π½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠΈΠΊΠΎΠ»ΡΠ½ΠΎ ΠΈ ΡΠ΅ΡΠ°Π΅Ρ Π·Π°Π΄Π°ΡΡ.
Π ΠΈΡΠΎΠ³Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ΄ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎ ΡΡΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ, Π½ΡΠΆΠ΅Π½ Π»ΠΈ ΠΎΠ½, Π½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅Π³ΠΎ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΡ, Π΄ΠΎΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΊΠΎΡΡΡΠ»ΠΈ Ρ ΠΏΠΎΠ΄ΠΏΠΎΡΠΊΠ°ΠΌΠΈ, Π΄Π΅Π»Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ΅ Ρ ΡΠΆΠ΅.
- hosts: localhost
tasks:
- shell: echo -n Z >> a.txt && cat a.txt
register: output
delay: 1
retries: 5
until: not output.stdout.find("ZZZ")
ΠΠ΅Π½Ρ β 109: ΠΡΠΎΠ·Π½Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ
ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π·Π°Π΄ΡΠΌΠ°Π½Π½Π°Ρ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ IaC ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Ρ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ / Π±ΠΈΠ·Π½Π΅ΡΠ° / Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π²ΡΠ΅ΠΌΡ Π²Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ Π±ΡΡΡ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌ. Π ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΏΠΎΡΠ° ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΠΌΠ΅ΡΡ.
Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ IaC
ΠΠ΅Π½Ρ β 139: Π Π²Π°ΠΌ ΡΠΎΡΠ½ΠΎ Π½ΡΠΆΠ΅Π½ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³?
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΊΠΈΠ΄Π°ΡΡΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΡ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΡΠ΄ Π²Π°ΠΆΠ½ΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ²:
- ΠΠ°ΡΠ΅ΠΌ Π²Π°ΠΌ Π²ΡΡ ΡΡΠΎ?
- ΠΡΡΡ Π»ΠΈ Ρ Π²Π°Ρ Π²ΡΠ΅ΠΌΡ?
- ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π»ΠΈ Π·Π½Π°Π½ΠΈΠΉ?
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅ ΠΊΠ°ΠΊ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° Π²ΠΎΠΏΡΠΎΡΡ, ΡΠΎ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ Π·Π°ΠΊΠΎΠ½ΡΠΈΡΡΡ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π½Π°ΡΠ°Π²ΡΠΈΡΡ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ
ΡΠΆΠ΅. Π’.ΠΊ. Π±ΡΠ» ΠΎΠΏΡΡ(
ΠΠ΅Π½Ρ β 149: ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π°
ΠΠ΅ΡΠ²ΠΎΠΎΡΠ΅ΡeΠ΄Π½ΠΎΠ΅ ΡΡΠΎ Π½Π°Π΄ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡΡΡ. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡΡΡ ΡΡΠΎ Π±ΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ°Π΅ΠΌΡΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΈ ΠΏΡΠΈΠΊΠΈΠ΄ΡΠ²Π°Π΅ΠΌ ΠΏΡΡΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ. ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡ ΠΊΠ°ΠΊ-ΡΠΎ ΡΠΈΠΊΡΠΈΡΡΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ°ΡΡΡ Π² confluence, ΡΡΠΎ Π±Ρ ΠΏΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΠ° "ΠΊΠ°ΠΊ Π»ΡΡΡΠ΅?" ΠΈΠ»ΠΈ "ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π΅Π΅?" ΠΌΡ Π½Π΅ ΡΠ±ΠΈΠ»ΠΈΡΡ Ρ ΠΊΡΡΡΠ°. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°Π»ΠΈΡΡ ΠΈΠ΄Π΅ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉ: Π΄ΡΠΎΠ±ΠΈΠΌ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π½Π° ΠΌΠ°Π»Π΅Π½ΡΠΊΠΈΠ΅ ΠΊΡΡΠΎΡΠΊΠΈ / ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π·ΡΡΡ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΡΡΠΎΠΊ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ, ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ ΠΎΠ½ Π΄Π΅Π»Π°Π΅Ρ, ΠΏΠΎΠΊΡΡΡΡ Π΅Π³ΠΎ ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π½Π΅ ΠΏΠΎΠ±ΠΎΡΠ²ΡΠΈΡΡ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ»ΠΎΠΌΠ°ΡΡ.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΊΡΠ°Π΅ΡΠ³ΠΎΠ»ΡΠ½ΡΠΌ ΠΊΠ°ΠΌΠ½Π΅ΠΌ ΠΈ ΡΡΡ ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ ΠΏΠΈΡΠ°ΠΌΠΈΠ΄Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. Π ΠΎΠ²Π½ΠΎ ΡΠ°ΠΆΠ΅ ΠΈΠ΄Π΅Ρ, ΡΡΠΎ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, Π½ΠΎ Π΄Π»Ρ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ: ΠΈΠ΄Π΅ΠΌ ΠΎΡ Π΄Π΅ΡΠ΅Π²ΡΡ Π±ΡΡΡΡΡΡ ΡΠ΅ΡΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΡΠΎΡΡΡΠ΅ Π²Π΅ΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΡΡΡΠΏΡ, ΠΊ Π΄ΠΎΡΠΎΠ³ΠΈΠΌ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΌ ΡΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΠΈΡ ΡΠ΅Π»ΡΠ½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
ΠΠΎΠΏΡΡΠΊΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ansible
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΠΎΠΉΠ΄Π΅ΠΌ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΡΡΠ²Π°Π»ΠΈ ΡΠ΅ΡΡΠ°ΠΌΠΈ Ansible Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅, ΠΎΠΏΠΈΡΡ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ²Π΅Π»ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π½Π΅Π΅, ΡΡΠΎ Π±Ρ ΠΏΠΎΠ½ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
ΠΠ΅Π½Ρ β -997: SDS provision
ΠΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Ansible Π΄ΠΎΠ²Π΅Π»ΠΎΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΏΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ SDS (Software Defined Storage). ΠΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΡΡΠ°ΡΡΡ Π½Π° ΡΡΡ ΡΠ΅ΠΌΡ
ΠΠ΅Π½Ρ β -701: Ansible ΠΈ test kitchen
Π Π°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΠΈΠ΄Π΅ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ansible ΡΡΠ°Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²ΡΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ², Π° ΠΈΠΌΠ΅Π½Π½ΠΎ test kitchen / kitchen-ci ΠΈ inspec. ΠΡΠ±ΠΎΡ Π±ΡΠ» ΠΎΠ±ΡΡΠ»ΠΎΠ²Π΅Π½ Π·Π½Π°Π½ΠΈΠ΅ΠΌ Ruby ( ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅ΠΉ Π² ΡΡΠ°ΡΡΠ΅ Π½Π° Ρ
Π°Π±ΡΠ΅:
Π ΡΠ΅Π»ΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½ΠΎ Π±ΡΠ» ΠΎΡΠ°Π΄ΠΎΡΠ΅ΠΊ ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠ΄Π½ΠΎΡΠΎΠ΄Π½ΠΎΡΡΠΈ. ΠΠΎΠ³Π΄Π° ΠΆΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΡ Π΄ΠΎ 13 Π±Π°Π·ΠΎΠ²ΡΡ ΡΠΎΠ»Π΅ΠΉ ΠΈ 2 ΠΌΠ΅ΡΠ° ΡΠΎΠ»Π΅ΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΡΡΡΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡΠΎΠ»ΠΈ, ΡΠΎ Π²Π΄ΡΡΠ³ ΡΠ΅ΡΡΡ ΡΡΠ°Π»ΠΈ Π±Π΅ΠΆΠ°ΡΡ 70 ΠΌΠΈΠ½ΡΡ, ΡΡΠΎ ΠΏΠΎΡΡΠΈ Π² 2 ΡΠ°Π·Π° Π΄ΠΎΠ»ΡΡΠ΅. ΠΠ± XP (extreme programming) ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°Ρ Π±ΡΠ»ΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡ Ρ.ΠΊ. Π½ΠΈΠΊΡΠΎ Π½Π΅ Π·Π°Ρ ΠΎΡΠ΅Ρ ΠΆΠ΄Π°ΡΡ 70 ΠΌΠΈΠ½ΡΡ. ΠΡΠΎ ΡΡΠ°Π»ΠΎ ΠΏΠΎΠ΄ΠΎΠ²ΠΎΠ΄ΠΎΠΌ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°
ΠΠ΅Π½Ρ β -601: Ansible ΠΈ molecule
ΠΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ ΡΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° testkitchen, ΡΠΎΠ»ΡΠΊΠΎ ΠΌΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π»ΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ»Π΅ΠΉ Π² docker ΠΈ ΡΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΡΡΠΊ. ΠΡΠΎΠ³ΠΎΠΌ, Π²ΡΠ΅ΠΌΡ ΡΠΎΠΊΡΠ°ΡΠΈΠ»ΠΎΡΡ Π΄ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΡ 20-25 ΠΌΠΈΠ½ΡΡ Π΄Π»Ρ 7 ΡΠΎΠ»Π΅ΠΉ.
Π£Π²Π΅Π»ΠΈΡΠΈΠ² ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΠΈΡΡΠΌΡΡ ΡΠΎΠ»Π΅ΠΉ Π΄ΠΎ 17 ΠΈ Π»ΠΈΠ½ΡΠΎΠ²ΠΊΡ 45 ΡΠΎΠ»Π΅ΠΉ ΠΌΡ ΠΏΡΠΎΠ³ΠΎΠ½ΡΠ»ΠΈ ΡΡΠΎ Π·Π° 28 ΠΌΠΈΠ½ΡΡ Π½Π° 2 jenkins slave.
ΠΠ΅Π½Ρ β 167: ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ΡΡΡ Ansible
Π‘ Π½Π°ΡΠΊΠΎΠΊΡ Π·Π°Π΄Π°ΡΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π°, ΡΠΊΠΎΡΠ΅ΠΉ Π²ΡΠ΅Π³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ. ΠΠ°Π΄Π°ΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠΎΠΉ, ΡΡΠΎ Π±Ρ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π΅Π΅ ΡΠ°Π·Π±ΠΈΡΡ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΊΡΡΠΎΡΠΊΠΈ ΠΈ ΡΡΠ΅ΡΡΡ ΡΠ»ΠΎΠ½Π° ΠΏΠΎ ΡΠ°ΡΡΡΠΌ ΡΠ°ΠΉΠ½ΠΎΠΉ Π»ΠΎΠΆΠΊΠΎΠΉ. ΠΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΌ Π»ΠΈ Π²Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΈΠ΄Π΅Ρ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΠ»Π³ΠΎ Π»ΠΈ Π΅ΡΠ΅ ΠΈΠ΄ΡΠΈ.
Π ΡΠ΅Π»ΠΎΠΌ Π½Π΅ ΡΡΡΡ Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ΄Π΅Π»Π°Π½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ Π½Π° Π±ΡΠΌΠ°ΠΆΠΊΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ»Π΅ΠΈΡΡ ΡΡΠΈΠΊΠ΅ΡΡ Π½Π° ΡΠΊΠ°Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°ΡΠΊΠΈ Π² jira, Π° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π²Π΅ΡΡΠΈ google docs Π ΡΡΠ΄Π° Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΡΡΠ°ΡΡΡ. ΠΠΎΠ³ΠΈ ΡΠ°ΡΡΡΡ ΠΈΠ· ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΡΠΈΡΠΌΠΈΠ½ΡΡΠ½ΡΠΉ, ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΈ Π½ΡΠ΄Π½ΡΠΉ. ΠΠ°Π»ΠΎΠ²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎ ΠΊΡΠΎ-ΡΠΎ Ρ ΠΎΡΠ΅Ρ, ΡΡΠΎ Π±Ρ Π·Π° Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³Π° Π²Ρ ΠΏΠ΅ΡΠ΅Π³ΠΎΡΠ΅Π»ΠΈ ΠΈΠ΄Π΅ΠΉ, ΡΡΡΠ°Π»ΠΈ ΠΈ Π·Π°Π±ΠΈΠ»ΠΈ.
Π Π΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ ΠΏΡΠΎΡΡ:
- Eat.
- Sleep.
- Code.
- IaC test.
- Repeat
ΠΈ ΡΠ°ΠΊ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡΡΠΈΠ³Π½Π΅ΠΌ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΈ.
ΠΡΠ΅ ΡΡΠ°Π·Ρ Π½Π°ΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π°Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ Π±ΡΠ»ΠΎ Π½Π°ΡΠ°ΡΡ Ρ Π»ΠΈΠ½ΡΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°.
ΠΠ΅Π½Ρ β 181: Green Build Master
ΠΠΈΠ½ΡΠΎΠ²ΠΊΠ° ΡΡΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³ ΠΊ Green Build Master. ΠΡΠΎ ΠΏΠΎΡΡΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΡΠ»ΠΎΠΌΠ°Π΅Ρ, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΎΡΠ»Π°Π΄ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π·Π΅Π»Π΅Π½Π΅Π½ΡΠΊΠΈΠ΅ Π±ΠΈΠ»Π΄Ρ Π² jenkins. ΠΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±Ρ Π²ΡΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈΠ²ΡΡΠΊΠΈ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
- ΠΡΠ°ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡ ΠΏΠ»ΠΎΡ ΠΎ.
- ΠΡΠΈΡΡΠ» ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π·Π°ΠΎΠ΄Π½ΠΎ ΡΠ΄Π΅Π»Π°ΠΉ ΠΊΠΎΠ΄ ΡΡΡΡ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ ΠΎΠ½ Π±ΡΠ» Π΄ΠΎ ΡΠ΅Π±Ρ.
ΠΠ΅Π½Ρ β 193: ΠΡ Π»ΠΈΠ½ΡΠΎΠ²ΠΊΠΈ ΠΊ unit ΡΠ΅ΡΡΠ°ΠΌ
ΠΡΡΡΡΠΎΠΈΠ² ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡΡΠ΅Ρ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΡΠ°ΠΏΠ½ΠΎΠ³ΠΎ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ β Π·Π°ΠΌΠ΅Π½ΡΡ Π»ΠΈΠ½ΡΠΎΠ²ΠΊΡ Π½Π° Π·Π°ΠΏΡΡΠΊ ΡΠΎΠ»Π΅ΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π±Π΅Π· ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ.
ΠΠ΅Π½Ρ β 211: ΠΡ unit ΠΊ integration ΡΠ΅ΡΡΠ°ΠΌ
ΠΠΎΠ³Π΄Π° unit ΡΠ΅ΡΡΠ°ΠΌΠΈ ΠΏΠΎΠΊΡΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΡΠΎΠ»Π΅ΠΉ ΠΈ Π²ΡΡ Π»ΠΈΠ½ΡΡΠ΅ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ². Π’.Π΅. ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΈΡΠΏΠΈΡΠΈΠΊΠ° Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅, Π° ΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ½ΡΡΠ°Π½ΡΠ°.
ΠΠ° jenkins ΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π΄ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Ρ Π»ΠΈΠ½ΡΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ»ΠΈ / ΠΏΠ»ΡΠΉΠ±ΡΠΊΠΈ, ΠΏΠΎΡΠΎΠΌ ΡΠ½ΠΈΡ ΡΠ΅ΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°Ρ ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠ΅ ΡΠ΅ΡΡΡ.
Jenkins + Docker + Ansible = Tests
- CheckoutΒ repoΒ and generate build stages.
- Run lint playbook stages in parallel.
- Run lint role stages in parallel.
- RunΒ syntax check role stages in parallel.
- RunΒ test role stages in parallel.
- Lint role.
- Check dependency on other roles.
- Check syntax.
- Create docker instance
- Run molecule/default/playbook.yml.
- CheckΒ idempotency.
- Run integration tests
- Finish
ΠΠ΅Π½Ρ β 271: Bus Factor
ΠΠ΅ΡΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΠ½Π³ΠΎΠΌ Π·Π°Π½ΠΈΠΌΠ°Π»Π°ΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ Π³ΡΡΠΏΠΏΠ° Π»ΡΠ΄Π΅ΠΉ Π² ΠΏΠ°ΡΡ-ΡΡΠΎΠΉΠΊΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ. ΠΠ½ΠΈ Π΄Π΅Π»Π°Π»ΠΈ ΡΠ΅Π²ΡΡ ΠΊΠΎΠ΄Π° Π² ΠΌΠ°ΡΡΠ΅Ρe. Π‘ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Π²ΡΡΠ°Π±Π°ΡΠΎΠ»ΠΎΡΡ Π·Π½Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ ΠΈ code review ΡΠΏΠΎΡΠΎΠ±ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π·Π½Π°Π½ΠΈΠΉ ΠΎΠ± ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΈ ΡΠΎΠΌ ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΡΡΡΠΎΠ΅Π½Π°. ΠΠ·ΡΠΌΠΈΠ½ΠΊΠΎΠΉ Π·Π΄Π΅ΡΡ Π±ΡΠ»ΠΎ, ΡΠΎ ΡΡΠΎ ΡΠ΅Π²ΡΡΠ²Π΅ΡΡ Π²ΡΠ±ΠΈΡΠ°Π»ΠΈΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊΡ, Ρ.Π΅. Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄ΠΎΠ»Π΅ΠΉ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΠΈ ΡΡ Π·Π°Π»Π΅Π·Π΅ΡΡ Π² Π½ΠΎΠ²ΡΠΉ ΡΡΠ°ΡΡΠΎΠΊ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ.
Π Π·Π΄Π΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΄ΠΎΠ±Π½ΠΎ. Π£Π΄ΠΎΠ±Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ΅Π²ΡΡ, Π²ΠΈΠ΄Π΅ΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΠ°ΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΎΠ½ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ, ΠΈΡΡΠΎΡΠΈΡ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠΉ. ΠΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π»ΠΈ jenkins + bitbucket + jira.
ΠΠΎ ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²ΠΎΠ΅ ΡΠ΅Π²ΡΡ Π½Π΅ ΠΏΠ°Π½Π°ΡΠ΅Ρ, ΠΊΠ°ΠΊ-ΡΠΎ, Ρ Π½Π°Ρ ΠΏΡΠΎΠ»Π΅Π· Π² ΠΌΠ°ΡΡΠ΅Ρ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΄Π΅Π»Π°Π» Π½Π°ΠΌ ΡΠ»Π°ΠΏΠ°ΡΡΠΈΠ΅ ΡΠ΅ΡΡΡ:
- get_url:
url: "{{ actk_certs }}/{{ item.1 }}"
dest: "{{ actk_src_tmp }}/"
username: "{{ actk_mvn_user }}"
password: "{{ actk_mvn_pass }}"
with_subelements:
- "{{ actk_cert_list }}"
- "{{ actk_certs }}"
delegate_to: localhost
- copy:
src: "{{ actk_src_tmp }}/{{ item.1 }}"
dest: "{{ actk_dst_tmp }}"
with_subelements:
- "{{ actk_cert_list }}"
- "{{ actk_certs }}"
ΠΠΎΡΠΎΠΌ ΡΡΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ, Π½ΠΎ ΠΎΡΠ°Π΄ΠΎΡΠ΅ΠΊ ΠΎΡΡΠ°Π»ΡΡ.
get_url:
url: "{{ actk_certs }}/{{ actk_item }}"
dest: "{{ actk_src_tmp }}/{{ actk_item }}"
username: "{{ actk_mvn_user }}"
password: "{{ actk_mvn_pass }}"
loop_control:
loop_var: actk_item
with_items: "{{ actk_cert_list }}"
delegate_to: localhost
- copy:
src: "{{ actk_src_tmp }}/{{ actk_item }}"
dest: "{{ actk_dst_tmp }}"
loop_control:
loop_var: actk_item
with_items: "{{ actk_cert_list }}"
ΠΠ΅Π½Ρ β 311: Π£ΡΠΊΠΎΡΡΠ΅ΠΌ ΡΠ΅ΡΡΡ
Π‘ΠΎ Π²ΡΠ΅Π½Π΅ΠΌ ΡΠ΅ΡΡΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎΡΡ Π±ΠΎΠ»ΡΡΠ΅, Π±ΠΈΠ»Π΄Ρ Π±Π΅ΠΆΠ°Π»ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ Π΄ΠΎ ΡΠ°ΡΠ° Π² ΠΏΠ»ΠΎΡ ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. ΠΠ° ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΡΠΎ Π±ΡΠ»Π° ΡΡΠ°Π·Π° ΠΏΠΎ ΡΠΈΠΏΡ "Ρ ΠΎΡΠΎΡΠΎ ΡΡΠΎ Π΅ΡΡΡ ΡΠ΅ΡΡΡ, Π½ΠΎ ΠΎΠ½ΠΈ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅". Π ΠΈΡΠΎΠ³Π΅ ΠΌΡ ΠΎΡΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΎΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅ΡΡΠΎΠ² Π½Π° Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ ΠΈ Π°Π΄Π°ΠΏΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΏΠΎΠ΄ docker, Π΄Π°Π±Ρ Π±ΡΠ»ΠΎ Π±ΡΡΡΡΠ΅Π΅. Π’Π°ΠΊ ΠΆΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΠ»ΠΈ testinfra Π½Π° ansible verifier ΡΡΠΎ Π±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΊΠΎΠ»-Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ².
Π‘ΡΡΠΎΠ³ΠΎ Π³ΠΎΠ²ΠΎΡΡ ΡΡΡ Π±ΡΠ» ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ ΠΌΠ΅Ρ:
- ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π° docker.
- Π£Π±ΡΠ°ΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΡΠ±Π»ΠΈΡΡΠ΅ΡΡΡ Π·Π° ΡΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
- Π£Π²Π΅Π»ΠΈΡΠΈΡΡ ΠΊΠΎΠ»-Π²ΠΎ ΡΠ»ΡΠΉΠ²ΠΎΠ².
- ΠΠΎΡΡΠ΄ΠΎΠΊ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ².
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π»ΠΈΠ½ΡΠΎΠ²Π°ΡΡ ΠΠ‘Π Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ.
Π ΠΈΡΠΎΠ³Π΅ Pipeline Π½Π° jenkins ΡΠΎΠΆΠ΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π»ΡΡ
- Generate build stages.
- Lint all in parallel.
- RunΒ test role stages in parallel.
- Finish.
Lessons learned
Avoid global variables
Ansible ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π΅ΡΡΡ ΡΠ°ΡΡΠΈΡΠ½ΡΠΉ workaround Π² Π²ΠΈΠ΄Π΅
ΠΡΠΈΠ²Π΅Π΄Ρ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡΡΡΡ Ρ Π½Π°Ρ Π΅ΡΡΡ role_a
ΠΈ role_b
# cat role_a/defaults/main.yml
---
msg: a
# cat role_a/tasks/main.yml
---
- debug:
msg: role_a={{ msg }}
# cat role_b/defaults/main.yml
---
msg: b
# cat role_b/tasks/main.yml
---
- set_fact:
msg: b
- debug:
msg: role_b={{ msg }}
- hosts: localhost
vars:
msg: hello
roles:
- role: role_a
- role: role_b
tasks:
- debug:
msg: play={{msg}}
ΠΠ°Π±Π°Π²Π½Π°Ρ Π²Π΅ΡΡ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ ΠΏΠ»ΡΠΉΠ±ΡΠΊΠΎΠ² Π±ΡΠ΄Π΅Ρ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ Π²Π΅ΡΠ΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΎΠ»Π΅ΠΉ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΡΡΠΎ Π² Π½Π°ΡΡΡΠ΅ Ansible ΠΈ Π»ΡΡΡΠ΅Π΅ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½Π½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π²Π½ΡΡΡΠΈ ΡΠΎΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΉ ΡΠΎΠ»ΠΈ.
BAD: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
# cat roles/some_role/tasks/main.yml
---
debug:
var: java_home
GOOD: Π defaults
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΡ
.
# cat roles/some_role/defaults/main.yml
---
r__java_home:
"{{ java_home | default('/path') }}"
# cat roles/some_role/tasks/main.yml
---
debug:
var: r__java_home
Prefix role variables
BAD: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ.
# cat roles/some_role/defaults/main.yml
---
db_port: 5432
GOOD: Π ΡΠΎΠ»ΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΡΠΎΠ»ΠΈ, ΡΡΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π² Π½Π° inventory ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΡΠΎΡΠ΅ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ.
# cat roles/some_role/defaults/main.yml
---
some_role__db_port: 5432
Use loop control variable
BAD: ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠΈΠΊΠ»Π°Ρ
ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ item
, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΡΠ°ΡΠΊ/ΠΏΠ»ΡΠΉΠ±ΡΠΊ Π±ΡΠ΄Π΅Ρ Π³Π΄Π΅-ΡΠΎ Π·Π°ΠΈΠ½ΠΊΠ»ΡΠ΄Π°Π½ ΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½Π½ΠΎΠΌΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ
---
- hosts: localhost
tasks:
- debug:
msg: "{{ item }}"
loop:
- item1
- item2
GOOD: ΠΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΡΠΈΠΊΠ»Π΅ ΡΠ΅ΡΠ΅Π· loop_var
.
---
- hosts: localhost
tasks:
- debug:
msg: "{{ item_name }}"
loop:
- item1
- item2
loop_control:
loop_var: item_name
Check input variables
ΠΡ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠ»ΠΈΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΡΠΈΠΊΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , Π½Π΅ Π±ΡΠ΄Π΅Ρ Π»ΠΈΡΠ½ΠΈΠΌ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΊΠ°ΠΊ ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌ ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΊΡΡΡΡ ΠΏΡΡΡΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ
GOOD: ΠΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅.
- name: "Verify that required string variables are defined"
assert:
that: ahs_var is defined and ahs_var | length > 0 and ahs_var != None
fail_msg: "{{ ahs_var }} needs to be set for the role to work "
success_msg: "Required variables {{ ahs_var }} is defined"
loop_control:
loop_var: ahs_var
with_items:
- ahs_item1
- ahs_item2
- ahs_item3
Avoid hashes dictionaries, use flat structure
ΠΡΠ»ΠΈ ΡΠΎΠ»Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ hash/dictionary Π² ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈΠ· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠΎ Π΅ΡΠ»ΠΈ ΠΌΡ Π·Π°Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π²Π΅ΡΡ hash/dictionary, ΡΡΠΎ ΠΏΠΎΠ²ΡΡΠΈΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
BAD: ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ hash/dictionary.
---
user:
name: admin
group: admin
GOOD: ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ»ΠΎΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ .
---
user_name: admin
user_group: "{{ user_name }}"
Create idempotent playbooks & roles
Π ΠΎΠ»ΠΈ ΠΈ ΠΏΠ»ΡΠΉΠ±ΡΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΈΠ΄Π΅ΠΌΠΏΠΎΡΠ΅Π½ΡΠ½ΡΠΌΠΈ, Ρ.ΠΊ. ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ configuration drift ΠΈ ΡΡΡΠ°Ρ ΡΠ»ΠΎΠΌΠ°ΡΡ ΡΡΠΎ-ΡΠΎ. ΠΠΎ Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ molecule, ΡΠΎ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
Avoid using command shell modules
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ shell ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Ansible.
Test your roles via molecule
Molecule ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π΅ΡΡΠΌΠ° Π³ΠΈΠ±ΠΊΠ° ΡΡΡΠΊΠ°, Π΄Π°Π²Π°ΠΉ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π².
Molecule Multiple instances
Π molecule.yml
Π² ΡΠ΅ΠΊΡΠΈΠΈ platforms
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Ρ
ΠΎΡΡΠΎΠ² ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡ.
---
driver:
name: docker
platforms:
- name: postgresql-instance
hostname: postgresql-instance
image: registry.example.com/postgres10:latest
pre_build_image: true
override_command: false
network_mode: host
- name: app-instance
hostname: app-instance
pre_build_image: true
image: registry.example.com/docker_centos_ansible_tests
network_mode: host
Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠΈ Ρ
ΠΎΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠΌ Π² converge.yml
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ:
---
- name: Converge all
hosts: all
vars:
ansible_user: root
roles:
- role: some_role
- name: Converge db
hosts: db-instance
roles:
- role: some_db_role
- name: Converge app
hosts: app-instance
roles:
- role: some_app_role
Ansible verifier
Π molecule Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ansible ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΈΠ½ΡΡΠ°Π½Ρ Π±ΡΠ» Π½Π°ΡΡΡΠΎΠ΅Π½ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ ΡΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ 3 ΡΠ΅Π»ΠΈΠ·Π°. ΠΡΠΎ Π½Π΅ ΡΠ°ΠΊ Π³ΠΈΠ±ΠΊΠΎ ΠΊΠ°ΠΊ testinfra/inspec, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π½Π°ΡΠΈΠΌ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΠΌ:
---
- name: Verify
hosts: all
tasks:
- name: copy config
copy:
src: expected_standalone.conf
dest: /root/wildfly/bin/standalone.conf
mode: "0644"
owner: root
group: root
register: config_copy_result
- name: Certify that standalone.conf changed
assert:
that: not config_copy_result.changed
ΠΠ»ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΠ΅ΡΠ²ΠΈΡ, Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ Π΅Π³ΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΠΈ ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ smoke test:
---
- name: Verify
hosts: solr
tasks:
- command: /blah/solr/bin/solr start -s /solr_home -p 8983 -force
- uri:
url: http://127.0.0.1:8983/solr
method: GET
status_code: 200
register: uri_result
until: uri_result is not failed
retries: 12
delay: 10
- name: Post documents to solr
command: /blah/solr/bin/post -c master /exampledocs/books.csv
Put complex logic into modules & plugins
Ansible ΠΏΡΠΎΠΏΠΎΠ²Π΅Π΄ΡΠ΅Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠΎΠ³Π΄Π° Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ Π²Π΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ , shell ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠΎ ΠΊΠΎΠ΄ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎ ΡΠΈΡΠ°Π΅ΠΌΡΠΌ. Π§ΡΠΎ Π±Ρ ΠΏΠΎΠ±ΠΎΡΠΎΡΡΡΡ Ρ ΡΡΠΈΠΌ ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΏΡΠΎΡΡΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, Π½Π΅ Π±ΡΠ΄Π΅Ρ Π»ΠΈΡΠ½ΠΈΠΌ, Π±ΠΎΡΠΎΡΡΡΡ Ρ ΡΡΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΡ ΠΏΡΡΡΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ.
Summarize Tips & Tricks
- Avoid global variables.
- Prefix role variables.
- Use loop control variable.
- Check input variables.
- Avoid hashes dictionaries, use flat structure.
- Create idempotent playbooks & roles.
- Avoid using command shell modules.
- Test your roles via molecule.
- Put complex logic into modules & plugins.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠ΅Π»ΡΠ·Ρ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ Π²Π·ΡΡΡ ΠΈ ΠΎΡΡΠ΅ΡΠ°ΠΊΡΠΎΡΠΈΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ IaC. ΠΡΠΎ Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΡΡΠ΅Π±ΡΡΡΠΈΠΉ ΡΠ΅ΡΠΏΠ΅Π½ΠΈΡ, Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Π·Π½Π°Π½ΠΈΠΉ.
Links
- Slides
How to test Ansible and don’t go nuts - Video
How to test Ansible and don’t go nuts Π§ΡΠΎ Ρ ΡΠ·Π½Π°Π», ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π² 200 000 ΡΡΡΠΎΠΊ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Ansible: ΠΠΈΠ³ΡΠ°ΡΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ 120 VM c Coreos Π½Π° Centos Π·Π° 18 ΠΌΠ΅ΡΡΡΠ΅Π² ΠΠ°ΠΊ Π½Π°Π»ΠΎΠΌΠ°ΡΡ Π²Π΅Π»ΠΎΡΠΈΠΏΠ΅Π΄ΠΎΠ² ΠΏΠΎΠ²Π΅ΡΡ ΠΊΠΎΡΡΡΠ»Π΅ΠΉ ΠΏΡΠΈ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ΠΡΠΎΡΠ΅ΡΡΠΈΡΡΠΉ ΠΌΠ΅Π½Ρ Π΅ΡΠ»ΠΈ ΡΠΌΠΎΠΆΠ΅ΡΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΡΠ°ΡΡ Π»ΠΈ YML ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΎ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ansible? A list of awesome IaC testing articles, speeches & links ΠΊΡΠΎΡΡ ΠΏΠΎΡΡ English version
UPD1 2020.05.01 20:30 β ΠΠ»Ρ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ»ΡΠΉΠ±ΡΠΊΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ callback_whitelist = profile_tasks
ΡΡΠΎ Π±Ρ ΠΏΠΎΠ½ΡΡΡ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ»Π³ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΠΌΡΡ ΠΏΠΎ
UPD2 2020.05.03 16:34 β
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com