ΡΡΠ°Π½Π° Π΅Π΄Π½Π° ΠΎΡ Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈΡΠ΅ . Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠ΅Π· 2015 Π³ΠΎΠ΄ΠΈΠ½Π° Π±ΡΠΎΡΡ Π½Π°Π΄Ρ Π²ΡΡΠ»ΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΠΈ Ansible ΡΡΠ°Π½Π° Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½Π°ΠΉ-ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ ΠΈ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡ. ΠΠ΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠΈΡΠΎΠΊΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ° Π½Π°ΠΈΡΡΠΈΠ½Π° Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠΈ.
Ansible ΡΠ°Π±ΠΎΡΠΈ ΡΡΠ΅Π· SSH Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅. Π’ΠΎΠΉ ΠΎΡΠ²Π°ΡΡ SSH ΡΠ΅ΡΠΈΡ, ΠΈΠ·Π²ΡΡΡΠ²Π° Π²Π»ΠΈΠ·Π°Π½Π΅, ΠΊΠΎΠΏΠΈΡΠ° Python ΠΊΠΎΠ΄ ΠΏΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΈ Π³ΠΎ Π·Π°ΠΏΠΈΡΠ²Π° Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½Π΅Π½ ΡΠ°ΠΉΠ». Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠΎΠΉ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°. Π¦ΡΠ»Π°ΡΠ° ΡΠ°Π·ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΅ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»Π½ΠΎ Π΄ΡΠ»Π³Π° ΠΈ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠ°, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ.
ΠΠ΄ΠΈΠ½ ΠΎΡ ΡΠ΅Π·ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π΅ , ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄Π½Π° SSH ΡΠ΅ΡΠΈΡ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ²Π°ΡΡ Π½ΠΎΠ²Π° ΡΠ΅ΡΠΈΡ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΏΠ΅ΡΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅. (Π‘Π°ΠΌΠΎ Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅ requiretty Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° Π·Π° sudo Π²ΡΠ² Π²Π°ΡΠΈΡ /etc/sudoers ΡΠ°ΠΉΠ» Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°)
ΠΠΎΠ²ΠΈΡΡ Π½Π°ΡΠΈΠ½ Π΄Π° 'ΡΠ°Π·Π³ΡΡΠ½Π΅ΠΌ' Ansible Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π½Π° Python Π½Π° ΠΈΠΌΠ΅ . ΠΠΊΠΎ Π½ΡΠΊΠΎΠΉ Π½Π΅ Π΅ ΡΡΠ²Π°Π» Π·Π° Π½Π΅Ρ - Π½Π°ΠΊΡΠ°ΡΠΊΠΎ ΡΠ΅ ΠΎΠΏΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° ΠΉ. Π’Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π±ΡΡΠ·ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Python ΠΊΠΎΠ΄ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, Π° Ansible Π΅ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠ΅ Π·Π° Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. Mitogen ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° UNIX pipe Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π° Python ΠΊΠΎΠ΄ ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½ Ρ zlib ΠΈ ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ Ρ pickle. Π’ΠΎΠ²Π° ΠΏΠΎΠΌΠ°Π³Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΈ ΡΠΏΠ΅ΡΡΡΠ²Π° ΡΡΠ°ΡΠΈΠΊ. ΠΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π°ΡΠ΅ ΠΎΡ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΠ±ΡΡΠ½Π΅Π½ΠΈΠ΅, Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΡΠΎΠ²Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° . ΠΠΎ Π΄Π½Π΅Ρ ΡΠ΅ ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π²ΡΡΡ Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Ρ Ansible.
Mitogen ΠΏΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠΊΠΎΡΠΈ Π²Π°ΡΠΈΡ Ansible ΠΊΠΎΠ΄ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ ΡΠ°Π·Ρ ΠΎΠ΄Π° Π½Π° ΡΡΠ°ΡΠΈΠΊ. ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π½Π°ΠΉ-ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ Π½ΠΈ ΠΏΠΎΠΌΠ°Π³Π°Ρ.
ΠΠ°ΠΉ-ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Ansible Π·Π°: ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° ΠΌΠ°ΡΠΈΠ½Π°, ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ - Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π² ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅.
ΠΠ° ΡΡΡΠ³Π²Π°ΠΌΠ΅!
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Mitogen Π·Π° Ansible Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠ°:
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Mitogen:
pip install mitogenΠ‘Π΅Π³Π° ΠΈΠΌΠ° Π΄Π²Π° ΡΠ°Π²Π½ΠΎΠ·Π½Π°ΡΠ½ΠΈ Π½Π°ΡΠΈΠ½Π° - ΠΈΠ»ΠΈ Π΄Π° Π½Π°ΡΡΡΠΎΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» ansible.cfg, ΠΈΠ»ΠΈ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π½ΡΠΆΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° ΡΡΠ΅Π΄Π°ΡΠ°.
ΠΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ ΠΏΡΡΡΡ Π΄ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈΡ Mitogen ΡΠ΅ Π±ΡΠ΄Π΅ /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. Π’ΠΎΠ³Π°Π²Π°:
export ANSIBLE_STRATEGY_PLUGINS=\/usr\/lib\/python2.7\/site-packages\/ansible_mitogen\/plugins\/strategy
export ANSIBLE_STRATEGY=mitogen_linearΠΈΠ»ΠΈ
[defaults]
strategy = mitogen_linear
strategy_plugins = \/usr\/lib\/python2.7\/site-packages\/ansible_mitogen\/plugins\/strategyΠΠ΅ΠΊΠ° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΠΌΠ΅ Ansible Π² virtualenv, Ρ Mitogen ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ:
virtualenv mitogen_ansible
.\/mitogen_ansible\/bin\/pip install ansible==2.7.10 mitogen
virtualenv pure_ansible
.\/pure_ansible\/bin\/pip install ansible==2.7.10ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Mitogen 0.2.7 Π½Π΅ ΡΠ°Π±ΠΎΡΠΈ Ρ Ansible 2.8 (ΠΊΡΠΌ ΠΌΠ°ΠΉ 2019)
Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ alias-ΠΈ:
alias pure-ansible-playbook='$(pwd)\/pure_ansible\/bin\/ansible-playbook'
alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=$(pwd)\/mitogen_ansible\/lib\/python3.7\/site-packages\/ansible_mitogen\/plugins\/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)\/mitogen_ansible\/bin\/ansible-playbook'Π‘Π΅Π³Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ playbook, ΠΊΠΎΠΉΡΠΎ ΡΡΠ·Π΄Π°Π²Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ Ρ ΠΎΡΡ:
---
- hosts: all
gather_facts: false
tasks:
- name: Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΌΠΎΠ΄ΡΠ»Π° copy
copy:
content: |
ΡΠ΅ΡΡΠΎΠ² ΡΠ°ΠΉΠ» {{ item }}
dest: ~\/file_{{ item }}
with_sequence: start=1 end={{ n }}Π ΡΠ΅ Π³ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Ρ Mitogen ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ 10 ΡΠ°ΠΉΠ»Π°:
time mitogen-ansible-playbook file_creation.yml -i hosts -e n=10 &>\/dev\/null
real 0m2.603s
user 0m1.152s
sys 0m0.096s
time pure-ansible-playbook file_creation.yml -i hosts -e n=10 &>\/dev\/null
real 0m5.908s
user 0m1.745s
sys 0m0.643sΠΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ 2 ΠΏΡΡΠΈ. ΠΠ΅ΠΊΠ° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π·Π° 20, 30, β¦, 100 ΡΠ°ΠΉΠ»Π°:
time pure-ansible-playbook file_creation.yml -i hosts -e n=100 &>\/dev\/null
real 0m51.775s
user 0m8.039s
sys 0m6.305s
time mitogen-ansible-playbook file_creation.yml -i hosts -e n=100 &>\/dev\/null
real 0m4.331s
user 0m1.903s
sys 0m0.197sΠ ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΡΠΊΠΎΡΠΈΡ
ΠΌΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 10 ΠΏΡΡΠΈ!
Π‘Π΅Π³Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈ ΡΠ΅ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΡΠ°Π±ΠΎΡΠΈ Π²ΡΠΈΡΠΊΠΎ:
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ Π»ΠΎΠΊΠ°Π»Π΅Π½ Ρ ΠΎΡΡ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½:
copy):
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ Ρ ΠΎΡΡ Ρ
copyΠΌΠΎΠ΄ΡΠ»Π°:
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ Ρ ΠΎΡΡ Π½Π° Π»ΠΎΠΊΠ°Π»Π΅Π½:
ΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ (3) ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π° ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ Ρ
ΠΎΡΡ:
ΠΠ°ΠΊΡΠΎ Π²ΠΈΠΆΠ΄Π°ΡΠ΅, Mitogen Π½ΠΈ ΡΠΏΠ΅ΡΡΡΠ²Π° ΠΊΠ°ΠΊΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΠ°ΠΊΠ° ΠΈ ΡΡΠ°ΡΠΈΠΊ Π² ΡΠ΅Π·ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΈ. ΠΠΎ Π°ΠΊΠΎ βΠ±ΡΡΠΈΠ»ΡΠ½ΠΎΡΠΎ Π³ΡΡΠ»ΠΎβ Π½Π΅ Π΅ Π² Ansible, Π° Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² I/O Π½Π° Π΄ΠΈΡΠΊΠ° ΠΈΠ»ΠΈ ΠΌΡΠ΅ΠΆΠ°ΡΠ°, ΠΈΠ»ΠΈ Π½Π° Π΄ΡΡΠ³ΠΎ ΠΌΡΡΡΠΎ, ΡΠΎΠ³Π°Π²Π° Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π°, ΡΠ΅ Mitogen ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅.
ΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Ρ yum/dnf ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° python Ρ pip. ΠΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π±ΡΡ Π° ΠΊΠ΅ΡΠΈΡΠ°Π½ΠΈ, Π·Π° Π΄Π° Π½Π΅ Π·Π°Π²ΠΈΡΠΈΠΌ ΠΎΡ Π³ΡΠ΅ΡΠΊΠΈ Π² ΠΌΡΠ΅ΠΆΠ°ΡΠ°:
---
- hosts: all
gather_facts: false
tasks:
- name: ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° pip ΠΌΠΎΠ΄ΡΠ»ΠΈ
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
Π‘ Mitogen ΡΠΎΠ²Π° ΠΎΡΠ½Π΅ 12 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΡΠΎ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ.
ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΡΠ΅ Π΄ΡΡΠ³ΠΈ Π±Π΅Π½ΡΠΌΠ°ΡΠΊΠΎΠ²Π΅ ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΡΠ²ΡΡΠ΄ΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°:
Mitogen Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠΊΠΎΡΠΈ ΠΌΠΎΠ΄ΡΠ»Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΉ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°. Π’ΠΎΠΉ ΠΌΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΡΠ» ΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ.
ΠΠ°ΡΠΎΠ²Π° Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ΡΠ΅ Π²Π°ΡΠΈΡΠ΅ ΡΠ΅ΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ° Π² ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ ΠΈ Π°ΠΊΠΎ ΡΠ΅ ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΈ ΠΎΡ Ansible, Mitogen ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π³ΠΈ ΡΠ΅ΡΠΈΡΠ΅ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΡΠΊΠΎΡΠΈΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΡΠ΅ playbooks.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
