Ansible ΡΠ°Π±ΠΎΡΠΈ ΠΏΡΠ΅Π· SSH Π²ΡΡΠ·ΠΊΠΈ ΠΊΡΠΌ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΈ Ρ ΠΎΡΡΠΎΠ²Π΅. Π’ΠΎΠΉ ΠΎΡΠ²Π°ΡΡ SSH ΡΠ΅ΡΠΈΡ, Π²Π»ΠΈΠ·Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΊΠΎΠΏΠΈΡΠ° ΠΊΠΎΠ΄Π° Π½Π° Python ΠΏΠΎ ΠΌΡΠ΅ΠΆΠ°ΡΠ° ΠΈ Π³ΠΎ Π·Π°ΠΏΠΈΡΠ²Π° Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ Π²ΡΠ΅ΠΌΠ΅Π½Π΅Π½ ΡΠ°ΠΉΠ». Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠΎΠΉ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°. Π¦ΡΠ»Π°ΡΠ° ΡΠ°Π·ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π΅ Π΄ΠΎΡΡΠ° Π΄ΡΠ»Π³Π° ΠΈ Π΄ΠΎΡΠ°Π΄Π½Π°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΈΠΌΠ° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π·Π° Π½Π΅ΠΉΠ½ΠΎΡΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅.
ΠΠ΄ΠΈΠ½ ΠΎΡ ΡΠ΅Π·ΠΈ Π½Π°ΡΠΈΠ½ΠΈ Π΅ requiretty
Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π·Π° sudo Π²ΡΠ² Π²Π°ΡΠΈΡ /etc/sudoers
ΡΠ°ΠΉΠ» Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°)
ΠΠΎΠ² Π½Π°ΡΠΈΠ½ Π·Π° ΠΎΠ²ΡΡΠΊΠ»ΠΎΠΊΠ²Π°Π½Π΅ Π½Π° Ansible Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½Π° Python, Π½Π°ΡΠ΅ΡΠ΅Π½Π°
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 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'
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ½ΠΈΠ³Π° Π·Π° ΠΈΠ³ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΡΠ·Π΄Π°Π²Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° ΠΌΠ°ΡΠΈΠ½Π°:
---
- hosts: all
gather_facts: false
tasks:
- name: Create files with copy content module
copy:
content: |
test file {{ 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 ΡΠ°ΠΉΠ»Π°:
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: Install packages
become: true
package:
name:
- samba
- httpd
- nano
- ruby
state: present
- name: Install pip modules
become: true
pip:
name:
- pytest-split-tests
- bottle
- pep8
- flask
state: present
Π‘ Mitogen ΠΎΡΠ½Π΅ 12 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΊΠΎΠ»ΠΊΠΎΡΠΎ ΠΈ Π±Π΅Π· Π½Π΅Π³ΠΎ.
ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ°ΡΠ°
Mitogen Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠΊΠΎΡΠΈ ΠΌΠΎΠ΄ΡΠ»Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠΎΠΉ ΡΠ°Π±ΠΎΡΠΈ. ΠΠΎΠΆΠ΅ ΡΠ°ΠΌΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠΎΠ΄ΡΠ» Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉ-Π±ΡΡΠ·ΠΎ.
ΠΡΠΎ Π·Π°ΡΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΠΈΡΠ΅ ΡΠ΅ΡΠ½ΠΈ ΠΌΠ΅ΡΡΠ° Π²ΡΠ² Π²Π°ΡΠ΅ΡΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ ΠΈ Π°ΠΊΠΎ ΡΠ΅ ΡΠ΅ Π΄ΡΠ»ΠΆΠ°Ρ Π½Π° Ansible, ΡΠΎΠ³Π°Π²Π° Mitogen ΡΠ΅ Π²ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° Π³ΠΈ ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΡΡΠΊΠΎΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ Π·Π° ΠΈΠ³ΡΠ°.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com