Π§Π°ΡΡΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΎ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΈΠΌΠ΅ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠ°Π±Π»ΠΎΠ½. ΠΡΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΌΠ΅Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΈΠ· ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊΠ° Π»ΠΈΠ±ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Π²Π½ΡΡΡΠΈ floppy_files ΠΈΠ»ΠΈ http_server
ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ:
Π― Π½Π΅ Π²Π΅ΡΡ, ΡΡΠΎ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡ ΠΎΠΆΠ΅, Π΅Π³ΠΎ ΡΠ°ΡΡΠΎ ΠΏΡΠΎΡΡΡ.
Π― Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ Π·Π΄Π΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΌΠ΅Π½Ρ ΠΈΡ Π½Π΅Ρ.
Π΅ΡΠ»ΠΈ Π±Ρ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊ Π±ΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° python, ΠΎΡΠ²Π΅ΡΠΎΠΌ Π±ΡΠ»ΠΎ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ jinja2, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ ΠΌΠΎΡΠ½ΡΠΌ ΠΈ ΠΏΡΠΎΡΡΡΠΌ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠ·ΡΠΊΠΎΠΌ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ². ΠΠΎΡ ΠΎΠΆΠ΅, ΠΏΠ°ΡΡ Π»Π΅Ρ Π½Π°Π·Π°Π΄ ΠΊΡΠΎ-ΡΠΎ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°Π» Π΅Π³ΠΎ ΠΏΠΎΡΡ: https://github.com/jmoiron/jigo
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ. ΠΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΊΠΎΠ»Π»Π΅Π³Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ JS Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΡΠ΅Ρ ΡΠ²ΠΎΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊΠ°, Π½ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΡΡΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ JS Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°, ΠΈ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΡΠΎΡΡΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ ΡΡΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. ΠΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ΅Π½ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ JS-ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ json-ΡΠ°ΠΉΠ»Π°, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ.
Π― ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡ Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΉ ΡΠ°ΠΉΠ» json ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΈΠ³ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², ΡΡΠΎΠ±Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΅Π³ΠΎ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ. ΠΡΠ΅ ΠΎΠ΄Π½Π° Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ Π΄Π΅Π»Π°Ρ, - ΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΡΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΎΡΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ jinja for-loop.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ jinja2-ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² JSON - ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΎΠΉ Π² JSON. Π¨Π°Π±Π»ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΌΠ½ΡΠΌ, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΡ, Π½ΡΠΆΠ½Π° Π»ΠΈ Π·Π°ΠΏΡΡΠ°Ρ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° YAML?).
ΠΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ: ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊΠ° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, builder_type, ...) Π² ΡΠΊΡΠΈΠΏΡΡ Π² autounattend (windows) ΠΈΠ»ΠΈ kickstart / preseed (linux).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: vsphere-iso builder ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ vmware Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ IP ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ°Π³Ρ Β«ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ IPΒ». ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ builder_type (ΠΈΠ»ΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ env ΡΠ°Π·Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ PACKER_BUILDER_TYPE) ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠΈΠΉ ΡΡΠ΅Π½Π°ΡΠΈΠΉ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΡΠ°Π³ΠΎΠ²ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² vmware Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ±ΠΎΡΠΊΠΈ, ΠΈΠ·Π±Π΅Π³Π°Ρ Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π°.
Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΠ°Π½Π½ΠΈΡ ΡΡΠ°ΠΏΠ°Ρ Π΄Π°Π΅Ρ Π±ΠΎΠ»ΡΡΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΈ Π‘Π£Π₯ΠΠ ΠΊΠΎΠ΄.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ. ΠΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ Ρ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ ΠΊΠΎΠ»Π»Π΅Π³Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π» ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ JS Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΡΠ΅Ρ ΡΠ²ΠΎΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΉ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊΠ°, Π½ΠΎ Π»ΠΎΠ³ΠΈΠΊΠ° Π² ΡΡΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ JS Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°, ΠΈ Π±ΡΠ»ΠΎ Π±Ρ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ ΠΏΡΠΎΡΡΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π²ΡΠ΅ ΡΡΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅. ΠΠΌΡ ΡΠ°ΠΊΠΆΠ΅ Π½ΡΠΆΠ΅Π½ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ JS-ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ json-ΡΠ°ΠΉΠ»Π°, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠΈ.
Π― ΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΡ Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΉ ΡΠ°ΠΉΠ» json ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΈΠ³ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅Π², ΡΡΠΎΠ±Ρ Π΄ΡΡΠ³ΠΈΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΅Π³ΠΎ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΡΡΡ. ΠΡΠ΅ ΠΎΠ΄Π½Π° Π²Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Ρ Π΄Π΅Π»Π°Ρ, - ΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π²ΡΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΠΈΡΠ΅ΠΉ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΎΡΠ° Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ jinja for-loop.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ jinja2-ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² JSON - ΡΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΎΠΉ Π² JSON. Π¨Π°Π±Π»ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΌΠ½ΡΠΌ, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΡ, Π½ΡΠΆΠ½Π° Π»ΠΈ Π·Π°ΠΏΡΡΠ°Ρ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡΡΡ Π½Π° YAML?).