Mitogen เชธเชพเชฅเซ‡ เชœเชตเชพเชฌเซ€เชฌเชฒเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเชตเซเช‚

Ansible เชธเซŒเชฅเซ€ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏเชฎเชพเช‚เชจเซเช‚ เชเช• เชฌเชจเซเชฏเซเช‚ เชธเชฟเชธเซเชŸเชฎ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชตเซเชฏเชตเชธเซเชฅเชพเชชเชจ. เชชเช›เซ€ เชฐเซ‡เชก เชนเซ‡เชŸ เชฆเซเชตเชพเชฐเชพ เช–เชฐเซ€เชฆเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เชนเชคเซ€ 2015 เชฎเชพเช‚ เชธเช‚เช–เซเชฏเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเชนเชญเชพเช—เซ€เช“ เชนเชœเชพเชฐเซ‹เชจเซ‡ เชตเชŸเชพเชตเซ€ เช—เชฏเชพ เช…เชจเซ‡ เชเชจเซเชธเชฟเชฌเชฒ เช•เชฆเชพเชš เชธเซŒเชฅเซ€ เชตเชงเซ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเซ€ เชœเชฎเชพเชตเชŸ เช…เชจเซ‡ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชถเชจ เชธเชฟเชธเซเชŸเชฎ เชฌเชจเซ€. เชคเซ‡เชจเซ€ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเชจเซ€ เชตเชฟเชถเชพเชณ เชถเซเชฐเซ‡เชฃเซ€ เช–เซ‚เชฌ เชชเซเชฐเชญเชพเชตเชถเชพเชณเซ€ เช›เซ‡.

เชฐเชฟเชฎเซ‹เชŸ เชฏเชœเชฎเชพเชจเซ‹ เชฎเชพเชŸเซ‡ SSH เช•เชจเซ‡เช•เซเชถเชจเซเชธ เชชเชฐ เชœเชตเชพเชฌเชฆเชพเชฐ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡ SSH เชธเชคเซเชฐ เช–เซ‹เชฒเซ‡ เช›เซ‡, เชฒเซ‹เช— เช‡เชจ เช•เชฐเซ‡ เช›เซ‡, เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ เชชเชพเชฏเชฅเซ‹เชจ เช•เซ‹เชกเชจเซ€ เชจเช•เชฒ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เช…เชฒเช— เช…เชธเซเชฅเชพเชฏเซ€ เชซเชพเช‡เชฒเชฎเชพเช‚ เชฒเช–เซ‡ เช›เซ‡. เชคเซ‡ เชชเช›เซ€, เชคเซ‡ เช† เชซเชพเช‡เชฒเชจเซ‡ เชฐเชฟเชฎเซ‹เชŸ เชฎเชถเซ€เชจ เชชเชฐ เชšเชฒเชพเชตเซ‡ เช›เซ‡. เช•เชพเชฎเช—เซ€เชฐเซ€เชจเซ‹ เช† เชธเชฎเช—เซเชฐ เช•เซเชฐเชฎ เช˜เชฃเซ‹ เชฒเชพเช‚เชฌเซ‹ เช…เชจเซ‡ เช•เช‚เชŸเชพเชณเชพเชœเชจเช• เช›เซ‡, เชคเซ‡เชฅเซ€ เชคเซ‡เชจเซ‡ เช‘เชชเซเชŸเชฟเชฎเชพเช‡เช เช•เชฐเชตเชพเชจเซ€ เชตเชฟเชตเชฟเชง เชฐเซ€เชคเซ‹ เช›เซ‡.

เช†เชฎเชพเช‚เชจเซ€ เชเช• เชฐเซ€เชค เช›เซ‡ SSH เชชเชพเช‡เชชเชฒเชพเช‡เชจเซเชธ เชœเซ‡ เชคเชฎเชจเซ‡ เชฆเชฐเซ‡เช• เชตเช–เชคเซ‡ เชจเชตเซเช‚ เชธเชคเซเชฐ เช–เซ‹เชฒเชตเชพเชจเซ‡ เชฌเชฆเชฒเซ‡ เชธเซ‚เชšเชจเชพเช“ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชเช• SSH เชธเชคเซเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡, เชœเซ‡ เช…เชฎเชพเชฐเซ‹ เช˜เชฃเซ‹ เชธเชฎเชฏ เชฌเชšเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡. (เชซเช•เซเชค เชฌเช‚เชง เช•เชฐเชตเชพเชจเซเช‚ เชฏเชพเชฆ เชฐเชพเช–เซ‹ requiretty เชคเชฎเชพเชฐเชพเชฎเชพเช‚ เชธเซเชกเซ‹ เชฎเชพเชŸเซ‡ เชธเซ‡เชŸเชฟเช‚เช— /etc/sudoers เชฐเชฟเชฎเซ‹เชŸ เชฎเชถเซ€เชจ เชชเชฐ เชซเชพเช‡เชฒ)

เช…เชจเซเชธเชฟเชฌเชฒเชจเซ‡ เช“เชตเชฐเช•เซเชฒเซ‹เช• เช•เชฐเชตเชพเชจเซ€ เชจเชตเซ€ เชฐเซ€เชค เชชเชพเชฏเชฅเซ‹เชจ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เช•เชนเซ‡เชตเชพเชฏ เช›เซ‡ เชฎเชฟเชŸเซ‹เชœเชจ. เชœเซ‹ เช•เซ‹เชˆเช เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชธเชพเช‚เชญเชณเซเชฏเซเช‚ เชจ เชนเซ‹เชฏ, เชคเซ‹ เชนเซเช‚ เชคเซ‡เชจเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเซเช‚ เชŸเซ‚เช‚เช•เชฎเชพเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถ. เชคเซ‡ เชฐเซ€เชฎเซ‹เชŸ เชฎเชถเซ€เชจ เชชเชฐ เชชเชพเชฏเชฅเซ‹เชจ เช•เซ‹เชกเชจเชพ เชเชกเชชเซ€ เช…เชฎเชฒเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡, เช…เชจเซ‡ เชเชจเซเชธเชฟเชฌเชฒ เช เช‰เชชเชฏเซ‹เช—เชจเซเช‚ เชฎเชพเชคเซเชฐ เชเช• เช‰เชฆเชพเชนเชฐเชฃ เช›เซ‡. เชฎเชฟเชŸเซ‹เชœเซ‡เชจ เชฐเชฟเชฎเซ‹เชŸ เชฎเชถเซ€เชจ เชชเชฐ UNIX เชชเชพเช‡เชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ zlib เชธเชพเชฅเซ‡ เชธเช‚เช•เซเชšเชฟเชค เช…เชจเซ‡ เช…เชฅเชพเชฃเชพเช‚ เชธเชพเชฅเซ‡ เชธเซ€เชฐเซ€เชฏเชฒเชพเช‡เชเซเชก เชชเชพเชฏเชฅเซ‹เชจ เช•เซ‹เชก เชŸเซเชฐเชพเชจเซเชธเชซเชฐ เช•เชฐเซ‡ เช›เซ‡. เช† เชคเซ‡เชจเซ‡ เชเชกเชชเชฅเซ€ เชชเซ‚เชฐเซเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชฌเชšเชพเชตเซ‡ เช›เซ‡. เชœเซ‹ เชคเชฎเชจเซ‡ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เชธเชฎเชœเซ‚เชคเซ€เชฎเชพเช‚ เชฐเชธ เชนเซ‹เชฏ, เชคเซ‹ เชชเซƒเชทเซเช  เชชเชฐ เชคเซ‡เชจเชพ เชตเชฟเชถเซ‡ เชตเชพเช‚เชšเชตเซเช‚ เชถเซเชฐเซ‡เชทเซเช  เช›เซ‡ "เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡". เชชเชฐเช‚เชคเซ เช†เชœเซ‡ เช†เชชเชฃเซ‡ เชซเช•เซเชค เชเชจเซเชธเชฟเชฌเชฒ เชธเชพเชฅเซ‡ เชชเซเชธเซเชคเช•เชพเชฒเชฏ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เชชเชฐ เชงเซเชฏเชพเชจ เช•เซ‡เชจเซเชฆเซเชฐเชฟเชค เช•เชฐเซ€เชถเซเช‚.

เชšเซ‹เช•เซเช•เชธ เชธเช‚เชœเซ‹เช—เซ‹เชฎเชพเช‚ Mitogen เชคเชฎเชพเชฐเชพ เชœเชตเชพเชฌเซ€ เช•เซ‹เชกเชจเซ‡ เช˜เชฃเซ€ เชตเช–เชค เชเชกเชชเซ€ เชฌเชจเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡ เช…เชจเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชตเชชเชฐเชพเชถเชฎเชพเช‚ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เช˜เชŸเชพเชกเซ‹ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชธเซŒเชฅเซ€ เชตเชงเซ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏ เช‰เชชเชฏเซ‹เช—เชจเชพ เช•เชฟเชธเซเชธเชพเช“ เชคเชชเชพเชธเซ€เช เช…เชจเซ‡ เชœเซ‹เชˆเช เช•เซ‡ เชคเซ‡ เช†เชชเชฃเชจเซ‡ เช•เซ‡เชŸเชฒเซ€ เชฎเชฆเชฆ เช•เชฐเซ‡ เช›เซ‡.

เชฐเชฟเชฎเซ‹เชŸ เชฎเชถเซ€เชจ เชชเชฐ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเชˆเชฒเซ‹ เชฌเชจเชพเชตเชตเชพ, เชชเซ‡เช•เซ‡เชœเซ‹ เชˆเชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ, เชฐเชฟเชฎเซ‹เชŸ เชฎเชถเซ€เชจเชฎเชพเช‚ เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชซเชพเชˆเชฒเซ‹เชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชนเซเช‚ เชœเชตเชพเชฌเซ€เชฌเชฒเชจเซ‹ เชธเซŒเชฅเซ€ เชตเชงเซ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเช‚ เช›เซเช‚. เช•เชฆเชพเชš เชคเชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช…เชจเซเชฏ เช‰เชฆเชพเชนเชฐเชฃเซ‹ เช›เซ‡ - เชŸเชฟเชชเซเชชเชฃเซ€เช“เชฎเชพเช‚ เชฒเช–เซ‹.

เชšเชพเชฒเซ‹ เชœเชˆเช!

Ansible เชฎเชพเชŸเซ‡ Mitogen เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡:
เชฎเชฟเชŸเซ‹เชœเซ‡เชจ เชฒเชพเช‡เชฌเซเชฐเซ‡เชฐเซ€ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‹:

pip install mitogen

เชนเชตเซ‡ เชฌเซ‡ เชธเชฎเชพเชจ เชฐเซ€เชคเซ‹ เช›เซ‡ - เช•เชพเช‚ เชคเซ‹ ansible.cfg เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชซเชพเช‡เชฒเชฎเชพเช‚ เชตเชฟเช•เชฒเซเชชเซ‹เชจเซ‡ เช—เซ‹เช เชตเซ‹, เช…เชฅเชตเชพ เชœเชฐเซ‚เชฐเซ€ เชชเชฐเซเชฏเชพเชตเชฐเชฃ เชšเชฒเซ‹ เชธเซ‡เชŸ เช•เชฐเซ‹.

เชšเชพเชฒเซ‹ เชงเชพเชฐเซ€เช เช•เซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ‡เชฒ เชฎเชฟเชŸเซ‹เชœเชจเชจเซ‹ เชฎเชพเชฐเซเช— เชนเชถเซ‡ /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 เชธเชพเชฅเซ‡ เช…เชจเซ‡ เชตเช—เชฐ เชตเชฐเซเชšเซเชฏเซเช…เชฒเซ‡เชจเชตเชฎเชพเช‚ 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 เชเชจเซเชธเชฟเชฌเชฒ 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, ..., 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):
    Mitogen เชธเชพเชฅเซ‡ เชœเชตเชพเชฌเซ€เชฌเชฒเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเชตเซเช‚

  • เชธเชพเชฅเซ‡ เชฐเชฟเชฎเซ‹เชŸ เชนเซ‹เชธเซเชŸ เชชเชฐ เชซเชพเช‡เชฒเซ‹ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸ copy เชฎเซ‹เชกเซเชฏเซเชฒ
    Mitogen เชธเชพเชฅเซ‡ เชœเชตเชพเชฌเซ€เชฌเชฒเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเชตเซเช‚

  • เชฐเชฟเชฎเซ‹เชŸ เชนเซ‹เชธเซเชŸเชฅเซ€ เชธเซเชฅเชพเชจเชฟเช•เชฎเชพเช‚ เชซเชพเช‡เชฒเซ‹ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซเช‚ เชฆเซƒเชถเซเชฏ:
    Mitogen เชธเชพเชฅเซ‡ เชœเชตเชพเชฌเซ€เชฌเชฒเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเชตเซเช‚

เชšเชพเชฒเซ‹ เช˜เชฃเชพ (3) เชฐเชฟเชฎเซ‹เชŸ เชฎเชถเซ€เชจเซ‹ เชธเชพเชฅเซ‡ เชเช• เชฆเซƒเชถเซเชฏ เช…เชœเชฎเชพเชตเซ€เช, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฐเชฟเชฎเซ‹เชŸ เชนเซ‹เชธเซเชŸ เชชเชฐ เชซเชพเช‡เชฒเซ‹เชจเซ€ เชจเช•เชฒ เช•เชฐเชตเชพเชจเซเช‚ เชฆเซƒเชถเซเชฏ:
Mitogen เชธเชพเชฅเซ‡ เชœเชตเชพเชฌเซ€เชฌเชฒเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเชตเซเช‚

เชœเซ‡เชฎ เชคเชฎเซ‡ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹, Mitogen เช† เชฆเซƒเชถเซเชฏเซ‹เชฎเชพเช‚ เชธเชฎเชฏ เช…เชจเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชฌเช‚เชจเซ‡ เชฌเชšเชพเชตเซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เชœเซ‹ เช…เชกเชšเชฃ เชเชจเซเชธเชฟเชฌเชฒเชฎเชพเช‚ เชจ เชนเซ‹เชฏ, เชชเชฐเช‚เชคเซ เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชกเชฟเชธเซเช• เช…เชฅเชตเชพ เชจเซ‡เชŸเชตเชฐเซเช•เชจเชพ I/Oเชฎเชพเช‚ เช…เชฅเชตเชพ เชฌเซ€เชœเซ‡ เช•เซเชฏเชพเช‚เช• เชนเซ‹เชฏ, เชคเซ‹ เช…เชชเซ‡เช•เซเชทเชพ เชฐเชพเช–เชตเซ€ เชฎเซเชถเซเช•เซ‡เชฒ เช›เซ‡ เช•เซ‡ Mitogen เช…เชฎเชจเซ‡ เชฎเชฆเชฆ เช•เชฐเชถเซ‡.

เชšเชพเชฒเซ‹ pip เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ 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

เชฎเชฟเชŸเซ‹เชœเซ‡เชจ เชธเชพเชฅเซ‡ เชคเซ‡เชจเซ‡ 12 เชธเซ‡เช•เชจเซเชกเชจเซ‹ เชธเชฎเชฏ เชฒเชพเช—เซเชฏเซ‹, เชœเซ‡เชŸเชฒเซ‹ เชคเซ‡เชจเชพ เชตเช—เชฐ เชฅเชฏเซ‹.
เชชเซƒเชทเซเช  เชชเชฐ เชœเชตเชพเชฌเซ€ เชชเซƒเชทเซเช  เชฎเชพเชŸเซ‡ เชฎเชฟเชŸเซ‹เชœเซ‡เชจ เชคเชฎเซ‡ เช…เชจเซเชฏ เชฌเซ‡เชจเซเชšเชฎเชพเชฐเซเช• เช…เชจเซ‡ เชชเชฐเซ€เช•เซเชทเชฃเซ‹ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹. เชœเซ‡เชฎ เช•เซ‡ เชชเซƒเชทเซเช  เชœเชฃเชพเชตเซ‡ เช›เซ‡:

เชœเซเชฏเชพเชฐเซ‡ เชคเซ‡ เชšเชพเชฒเซ€ เชฐเชนเซเชฏเซเช‚ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชฎเชฟเชŸเซ‹เชœเชจ เชฎเซ‹เชกเซเชฏเซเชฒเชจเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเซ€ เชถเช•เชคเซเช‚ เชจเชฅเซ€. เชคเซ‡ เชซเช•เซเชค เช† เชฎเซ‹เชกเซเชฏเซเชฒเชจเชพ เช…เชฎเชฒเชจเซ‡ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซเช‚ เชเชกเชชเซ€ เชฌเชจเชพเชตเซ€ เชถเช•เซ‡ เช›เซ‡.

เชคเซ‡เชฅเซ€, เชคเชฎเชพเชฐเชพ เชœเชฎเชพเชตเชŸเชฎเชพเช‚ เชคเชฎเชพเชฐเซ€ เช…เชกเชšเชฃเซ‹ เชถเซ‹เชงเชตเชพเชจเซเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡ เช…เชจเซ‡ เชœเซ‹ เชคเซ‡ เชœเชตเชพเชฌเซ‹ เช†เชชเชตเชพเชจเชพ เช•เชพเชฐเชฃเซ‡ เช›เซ‡, เชคเซ‹ เชฎเชฟเชŸเซ‹เชœเชจ เชคเชฎเชจเซ‡ เชคเซ‡ เช‰เช•เซ‡เชฒเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเชถเซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชชเซเชฒเซ‡เชฌเซเช•เชจเชพ เช…เชฎเชฒเซ€เช•เชฐเชฃเชจเซ‡ เชจเซ‹เช‚เชงเชชเชพเชคเซเชฐ เชฐเซ€เชคเซ‡ เชเชกเชชเซ€ เชฌเชจเชพเชตเชถเซ‡.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹