рд░рд┐рдореЛрдЯ рд╣реЛрд╕реНрдЯрд╣рд░реВрдорд╛ SSH рдЬрдбрд╛рдирд╣рд░реВрдорд╛ рдЙрддреНрддрд░рджрд╛рдпреА рдХрд╛рд░реНрдпрд╣рд░реВред рдпрд╕рд▓реЗ SSH рд╕рддреНрд░ рдЦреЛрд▓реНрдЫ, рд▓рдЧ рдЗрди рдЧрд░реНрдЫ, рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдкрд╛рдЗрдерди рдХреЛрдб рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рдЕрд╕реНрдерд╛рдпреА рдлрд╛рдЗрд▓рдорд╛ рд▓реЗрдЦреНрдЫред рддреНрдпрд╕ рдкрдЫрд┐, рдпрд╕рд▓реЗ рдпреЛ рдлрд╛рдЗрд▓ рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рдЪрд▓рд╛рдЙрдБрдЫред рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рдпреЛ рд╕рдореНрдкреВрд░реНрдг рдХреНрд░рдо рдирд┐рдХреИ рд▓рд╛рдореЛ рд░ рдердХрд╛рдЗрд▓рд╛рдЧреНрджреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреНред
рдпреА рдордзреНрдпреЗ рдПрдХ рддрд░рд┐рдХрд╛ рд╣реЛ requiretty
рддрдкрд╛рдИрдВрдХреЛ рдорд╛ sudo рдХреЛ рд▓рд╛рдЧрд┐ рд╕реЗрдЯрд┐рдЩ /etc/sudoers
рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рдлрд╛рдЗрд▓)
рдУрднрд░рдХреНрд▓реЛрдХ Ansible рдХреЛ рдирдпрд╛рдБ рддрд░рд┐рдХрд╛ рдкрд╛рдЗрдерди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднрдирд┐рдиреНрдЫ
рдорд┐рдЯреЛрдЬреЗрдирд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░рд┐рд╕реНрдерд┐рддрд┐рд╣рд░реВрдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдЙрддреНрддрд░рджрд╛рдпреА рдХреЛрдбрд▓рд╛рдИ рдзреЗрд░реИ рдкрдЯрдХ рдЧрддрд┐ рджрд┐рди рд░ рдЯреНрд░рд╛рдлрд┐рдХ рдЦрдкрддрд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдШрдЯрд╛рдЙрди рд╕рдХреНрдЫред рд╕рдмреИрднрдиреНрджрд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдкреНрд░рдпреЛрдЧ рдХреЗрд╕рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реМрдВ рд░ рд╣реЗрд░реМрдВ рдХрд┐ рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдХрддрд┐ рдорджреНрджрдд рдЧрд░реНрдЫред
рдореИрд▓реЗ Ansible рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рдзреЗрд░реИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБ: рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ, рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ, рд░рд┐рдореЛрдЯ рдореЗрд╕рд┐рдирдорд╛ рд░ рдмрд╛рдЯ рдлрд╛рдЗрд▓рд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреЗред рд╕рд╛рдпрдж рддрдкрд╛рдИрдВрд╕рдБрдЧ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреН - рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВрдорд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реНред
рдЪрд▓реЛ рдЬрд╛рдиреБрд╣реЛрд╕реН!
Ansible рдХреЛ рд▓рд╛рдЧрд┐ Mitogen рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдзреЗрд░реИ рд╕рд░рд▓ рдЫ:
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
Mitogen рд╕рдБрдЧ рд░ рдмрд┐рдирд╛ virtualenv рдорд╛ Ansible рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реМрдВ:
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 }}
рд░ 10 рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди Mitogen рд╕рдБрдЧ рд░ рдмрд┐рдирд╛ рдпрд╕рд▓рд╛рдИ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:
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 рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдпреА рдкрд░рд┐рджреГрд╢реНрдпрд╣рд░реВрдорд╛ рд╕рдордп рд░ рдЯреНрд░рд╛рдлрд┐рдХ рджреБрд╡реИ рдмрдЪрдд рдЧрд░реНрджрдЫред рддрд░ рдпрджрд┐ рдмрд╛рдзрд╛ рдЙрддреНрддрд░рджрд╛рдпреАрдорд╛ рдЫреИрди, рддрд░ рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдбрд┐рд╕реНрдХ рд╡рд╛ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ I/O рдорд╛, рд╡рд╛ рдЕрд░реВ рдХрддреИ, рддрдм Mitogen рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ рднрдиреНрдиреЗ рдЖрд╢рд╛ рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫред
рдкрд┐рдк рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ yum/dnf рд░ python рдореЛрдбреНрдпреБрд▓рд╣рд░реВрдХреЛ рд╕рд╛рде рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред рдкреНрдпрд╛рдХреЗрдЬрд╣рд░реВ рдХреНрдпрд╛рд╕ рдЧрд░рд┐рдПрдХрд╛ рдерд┐рдП рддрд╛рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдЧреНрд▓рд┐рдЪрд╣рд░реВрдорд╛ рдирд┐рд░реНрднрд░ рдирд╣реЛрд╕реН:
---
- 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 рдореЛрдбреНрдпреБрд▓ рдЧрддрд┐ рдЧрд░реНрди рд╕рдХреНрджреИрдиред рдпрд╕рд▓реЗ рдпреЛ рдореЛрдбреНрдпреБрд▓рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рд╕рдХреЗрд╕рдореНрдо рдЫрд┐рдЯреЛ рдмрдирд╛рдЙрди рд╕рдХреНрдЫред
рддрд╕рд░реНрде, рддрдкрд╛рдЗрдБрдХреЛ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯрдорд╛ рддрдкрд╛рдЗрдБрдХреЛ рдмрд╛рдзрд╛рд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ рд░ рдпрджрд┐ рддреА рдЙрддреНрддрд░рджрд╛рдпреА рдХрд╛рд░рдгрд▓реЗ рдЫрдиреН рднрдиреЗ, Mitogen рд▓реЗ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рддреА рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд░ рддрдкрд╛рдЗрдБрдХреЛ рдкреНрд▓реЗрдмреБрдХрд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирд▓рд╛рдИ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдЧрддрд┐ рджрд┐рди рдорджреНрджрдд рдЧрд░реНрджрдЫред
рд╕реНрд░реЛрдд: www.habr.com