ืœื–ืจื– ืืช Ansible

ืœื–ืจื– ืืช Ansible
ื–ื” ืœื ืกื•ื“ ืฉืขื ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ Ansible ืœื ื™ื›ื•ืœื” ืœืขืฉื•ืช ืืช ื”ืขื‘ื•ื“ื” ืฉืœื” ืžื”ืจ ืžืื•ื“. ื‘ืžืืžืจ ืืฆื™ื™ืŸ ืžืกืคืจ ืกื™ื‘ื•ืช ืœื›ืš ื•ืืฆื™ืข ืžื™ื ื™ืžื•ื ืฉื™ืžื•ืฉื™ ืฉืœ ื”ื’ื“ืจื•ืช, ืฉื™ื™ืชื›ืŸ ืžืื•ื“ ืฉื™ื’ื‘ื™ืจื• ืืช ืžื”ื™ืจื•ืช ื”ืคืจื•ื™ืงื˜ ืฉืœื›ื.

ื›ืืŸ ื•ืœืžื˜ื” ื ื“ื•ืŸ ื‘-Ansible 2.9.x, ืฉื”ื•ืชืงืŸ ื‘-virtualenv ื˜ืจื™ ืฉื ื•ืฆืจ ื‘ื“ืจืš ื”ืžื•ืขื“ืคืช ืขืœื™ืš.

ืœืื—ืจ ื”ื”ืชืงื ื”, ืฆื•ืจ ืงื•ื‘ืฅ "ansible.cfg" ืœื™ื“ ืกืคืจ ื”ื”ืคืขืœื” ืฉืœืš - ืžื™ืงื•ื ื–ื” ื™ืืคืฉืจ ืœืš ืœื”ืขื‘ื™ืจ ืืช ื”ื”ื’ื“ืจื•ืช ื”ืœืœื• ื™ื—ื“ ืขื ื”ืคืจื•ื™ืงื˜, ื‘ื ื•ืกืฃ ื”ืŸ ื™ื™ื˜ืขื ื• ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™ ืœืžื“ื™.

ืฆื ืจืช

ื—ืœืงื ืื•ืœื™ ื›ื‘ืจ ืฉืžืขื• ืขืœ ื”ืฆื•ืจืš ืœื”ืฉืชืžืฉ ื‘-pipelining, ื›ืœื•ืžืจ, ืœื ืœื”ืขืชื™ืง ืžื•ื“ื•ืœื™ื ืœืžืขืจื›ืช ื”ืงื‘ืฆื™ื ืฉืœ ืžืขืจื›ืช ื”ื™ืขื“, ืืœื ืœื”ืขื‘ื™ืจ ืืจื›ื™ื•ืŸ zip ืขื˜ื•ืฃ ื‘-Base64 ื™ืฉื™ืจื•ืช ืœ-stdin ืฉืœ ืžืชื•ืจื’ืžืŸ Python, ืื‘ืœ ืื—ืจื™ื ืื•ืœื™ ืœื, ืื‘ืœ ื”ืขื•ื‘ื“ื” ื ืฉืืจ ืขื•ื‘ื“ื”: ื”ื’ื“ืจื” ื–ื• ืขื“ื™ื™ืŸ ืœื ืžื•ืขืจื›ืช. ืœืจื•ืข ื”ืžื–ืœ, ื—ืœืง ืžื”ื”ืคืฆื•ืช ื”ืคื•ืคื•ืœืจื™ื•ืช ืฉืœ ืœื™ื ื•ืงืก ืฉืฉื™ืžืฉื• ืœื”ื’ื“ื™ืจ ืืช sudo ืื™ื ืŸ ื˜ื•ื‘ื•ืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ - ื›ืš ืฉื”ืคืงื•ื“ื” ื”ื–ื• ื“ืจืฉื” tty (ื˜ืจืžื™ื ืœ), ืื– Ansible ื”ืฉืื™ืจื” ืืช ื”ื”ื’ื“ืจื” ื”ืžืื•ื“ ืฉื™ืžื•ืฉื™ืช ื”ื–ื• ืžื•ืฉื‘ืชืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ.

pipelining = True

ืื™ืกื•ืฃ ืขื•ื‘ื“ื•ืช

ื”ื™ื“ืขืชื ืฉืขื ื”ื’ื“ืจื•ืช ื‘ืจื™ืจืช ื”ืžื—ื“ืœ, Ansible ืขื‘ื•ืจ ื›ืœ ื”ืฆื’ื” ื™ื•ื–ืžืช ืื™ืกื•ืฃ ืฉืœ ืขื•ื‘ื“ื•ืช ืขื‘ื•ืจ ื›ืœ ื”ืžืืจื—ื™ื ื”ืžืฉืชืชืคื™ื ื‘ื”? ื‘ืื•ืคืŸ ื›ืœืœื™, ืื ืœื ื™ื“ืขืช, ืขื›ืฉื™ื• ืืชื” ื™ื•ื“ืข. ื›ื“ื™ ืœืžื ื•ืข ื–ืืช, ืขืœื™ืš ืœื”ืคืขื™ืœ ืืช ืžืฆื‘ ื”ื‘ืงืฉื” ื”ืžืคื•ืจืฉืช ืœืื™ืกื•ืฃ ืขื•ื‘ื“ื•ืช (ืžืคื•ืจืฉ) ืื• ืืช ื”ืžืฆื‘ ื”ื—ื›ื. ื‘ื• ื™ื™ืืกืคื• ืขื•ื‘ื“ื•ืช ืจืง ืžืื•ืชื ืžืืจื—ื™ื ืฉืœื ื ืชืงืœื• ื‘ื”ื ื‘ื”ืฆื’ื•ืช ืงื•ื“ืžื•ืช.
UPD. ื‘ืขืช ื”ืขืชืงื”, ื™ื”ื™ื” ืขืœื™ืš ืœื‘ื—ื•ืจ ืื—ืช ืžื”ื”ื’ื“ืจื•ืช ื”ืœืœื•.

gathering = smart|explicit

ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ื—ื™ื‘ื•ืจื™ ssh

ืื ืื™ ืคืขื ื”ืคืขืœืช ืืช Ansible ื‘ืžืฆื‘ ื ื™ืคื•ื™ ื‘ืื’ื™ื (ืืคืฉืจื•ืช ื”-"v", ืฉื—ื•ื–ืจืช ืขืœ ืขืฆืžื” ืคืขื ืื—ืช ืขื“ ืชืฉืข ืคืขืžื™ื), ืื•ืœื™ ืฉืžืชื ืœื‘ ืฉื—ื™ื‘ื•ืจื™ ssh ื ื•ืฆืจื™ื ื•ื ืฉื‘ืจื™ื ื›ืœ ื”ื–ืžืŸ. ืื– ื’ื ื›ืืŸ ื™ืฉ ื›ืžื” ื“ืงื•ื™ื•ืช.

ืืชื” ื™ื›ื•ืœ ืœื”ื™ืžื ืข ืžื”ืฉืœื‘ ืฉืœ ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ssh ืžื—ื“ืฉ ื‘ืฉืชื™ ืจืžื•ืช ื‘ื• ื–ืžื ื™ืช: ื”ืŸ ื™ืฉื™ืจื•ืช ื‘ืœืงื•ื— ssh, ื•ื”ืŸ ื‘ืขืช โ€‹โ€‹ื”ืขื‘ืจืช ืงื‘ืฆื™ื ืœืžืืจื— ื”ืžื ื•ื”ืœ ืžื”ืžื ื”ืœ.
ื›ื“ื™ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ื—ื™ื‘ื•ืจ ssh ืคืชื•ื—, ืคืฉื•ื˜ ื”ืขื‘ื™ืจื• ืืช ื”ืžืคืชื—ื•ืช ื”ื“ืจื•ืฉื™ื ืœืœืงื•ื— ssh. ืœืื—ืจ ืžื›ืŸ ื”ื•ื ื™ืชื—ื™ืœ ืœื‘ืฆืข ืืช ื”ืคืขื•ืœื•ืช ื”ื‘ืื•ืช: ื‘ืขืช ื™ืฆื™ืจืช ื—ื™ื‘ื•ืจ ssh ื‘ืคืขื ื”ืจืืฉื•ื ื”, ื”ื•ื ื™ืฆื•ืจ ื‘ื ื•ืกืฃ ืžื” ืฉื ืงืจื ืฉืงืข ื‘ืงืจื”, ื‘ื”ืชืงื ื•ืช ืขื•ืงื‘ื•ืช, ื”ื•ื ื™ื‘ื“ื•ืง ืืช ืงื™ื•ืžื• ืฉืœ ืฉืงืข ื–ื”, ื•ืื ื™ืฆืœื™ื—, ื™ืขืฉื” ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘- ื—ื™ื‘ื•ืจ ssh ืงื™ื™ื. ื•ื›ื“ื™ ืฉื”ื›ืœ ื™ื”ื™ื” ื”ื’ื™ื•ื ื™, ื‘ื•ืื• ื ืงื‘ืข ืืช ื”ื–ืžืŸ ืœืฉืžื™ืจืช ื”ืงืฉืจ ื›ืืฉืจ ื”ื•ื ืœื ืคืขื™ืœ. ืืชื” ื™ื›ื•ืœ ืœืงืจื•ื ืขื•ื“ ื‘ ืชื™ืขื•ื“ ssh, ื•ื‘ื”ืงืฉืจ ืฉืœ Ansible ืื ื—ื ื• ืคืฉื•ื˜ ืžืฉืชืžืฉื™ื ื‘"ื”ืขื‘ืจื”" ืฉืœ ื”ืืคืฉืจื•ื™ื•ืช ื”ื“ืจื•ืฉื•ืช ืœืœืงื•ื— ssh.

ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"

ื›ื“ื™ ืœืขืฉื•ืช ืฉื™ืžื•ืฉ ื—ื•ื–ืจ ื‘ื—ื™ื‘ื•ืจ ssh ืฉื›ื‘ืจ ืคืชื•ื— ื‘ืขืช ื”ืขื‘ืจืช ืงื‘ืฆื™ื ืœืžืืจื— ืžื ื•ื”ืœ, ืคืฉื•ื˜ ืฆื™ื™ืŸ ื”ื’ื“ืจื” ืœื ื™ื“ื•ืขื” ืื—ืจืช ssh_tranfer_method. ื”ืชื™ืขื•ื“ ื‘ื ื•ืฉื ื–ื” ื”ื•ื ืžืื•ื“ ืงึทืžืฆึธืŸ ื•ืžื˜ืขื”, ื›ื™ ืืคืฉืจื•ืช ื–ื• ืขื•ื‘ื“ืช ื“ื™ ื˜ื•ื‘! ืื‘ืœ ืงืจื™ืื” ืงื•ื“ ืžืงื•ืจ ืžืืคืฉืจ ืœืš ืœื”ื‘ื™ืŸ ืžื” ื‘ื“ื™ื•ืง ื™ืงืจื”: ื”ืคืงื•ื“ื” dd ืชื•ืฉืง ืขืœ ื”ืžืืจื— ื”ืžื ื•ื”ืœ, ืชื•ืš ืขื‘ื•ื“ื” ื™ืฉื™ืจื” ืขื ื”ืงื•ื‘ืฅ ื”ืจืฆื•ื™.

transfer_method = piped

ืื’ื‘, ื‘ืขื ืฃ "ืœืคืชื—" ื’ื ื”ื”ื’ื“ืจื” ื”ื–ื• ืงื™ื™ืžืช ืœื ื”ื•ืœืš ืœืฉื•ื ืžืงื•ื.

ืืœ ืชืคื—ื“ื• ืžื”ืกื›ื™ืŸ, ืชืคื—ื“ื• ืžื”ืžื–ืœื’

ื”ื’ื“ืจื” ืฉื™ืžื•ืฉื™ืช ื ื•ืกืคืช ื”ื™ื ืžื–ืœื’ื•ืช. ื”ื•ื ืงื•ื‘ืข ืืช ืžืกืคืจ ืชื”ืœื™ื›ื™ ื”ืขื‘ื•ื“ื” ืฉื™ืชื—ื‘ืจื• ื‘ื• ื–ืžื ื™ืช ืœืžืืจื—ื™ื ื•ื™ื‘ืฆืขื• ืžืฉื™ืžื•ืช. ื‘ืฉืœ ื”ืžื•ื–ืจื•ื™ื•ืช ืฉืœ Python ื›ืฉืคื”, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืชื”ืœื™ื›ื™ื, ืœื ื‘ืฉืจืฉื•ืจื™ื, ื›ื™ Ansible ืขื“ื™ื™ืŸ ืชื•ืžื›ืช ื‘-Python 2.7 - ืื™ืŸ ืืกื™ื ืฆื™ื• ื‘ืฉื‘ื™ืœืš, ืื™ืŸ ื˜ืขื ืœื”ืฆื™ื’ ื›ืืŸ ื”ืชื ื”ื’ื•ืช ืืกื™ื ื›ืจื•ื ื™ืช! ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, Ansible ืคื•ืขืœ ื—ืžืฉ ืขื•ื‘ื“ื™ื, ืื‘ืœ ืื ื™ืฉืืœื• ืื•ืชื• ื ื›ื•ืŸ, ื–ื” ื™ืฉื™ืง ืขื•ื“:

forks = 20

ืื ื™ ืจืง ืžื–ื”ื™ืจ ืื•ืชืš ืžื™ื“ ืฉื™ื™ืชื›ื ื• ื›ืืŸ ื›ืžื” ืงืฉื™ื™ื ื”ืงืฉื•ืจื™ื ืœื›ืžื•ืช ื”ื–ื™ื›ืจื•ืŸ ื”ื–ืžื™ื ื” ื‘ืžื›ื•ื ืช ื”ื‘ืงืจื”. ื‘ืžื™ืœื™ื ืื—ืจื•ืช, ืืคืฉืจ ื›ืžื•ื‘ืŸ ืœื”ื’ื“ื™ืจ ืžื–ืœื’ื•ืช=100500, ืื‘ืœ ืžื™ ืืžืจ ืฉื–ื” ื™ืขื‘ื•ื“?

ืžื—ื‘ืจื™ื ืืช ื”ื›ืœ ื‘ื™ื—ื“

ื›ืชื•ืฆืื” ืžื›ืš, ืขื‘ื•ืจ ansible.cfg (ืคื•ืจืžื˜ ini), ื”ื”ื’ื“ืจื•ืช ื”ื ื—ื•ืฆื•ืช ืขืฉื•ื™ื•ืช ืœื”ื™ืจืื•ืช ื›ืš:

[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped

ื•ืื ืืชื” ืจื•ืฆื” ืœื”ืกืชื™ืจ ื”ื›ืœ ื‘ืžืœืื™ YaML ืจื’ื™ืœ ืฉืœ ืื“ื ื‘ืจื™ื, ืื– ื–ื” ื™ื›ื•ืœ ืœื”ื™ืจืื•ืช ื‘ืขืจืš ื›ืš:

---
all:
  vars:
    ansible_ssh_pipelining: true
    ansible_ssh_transfer_method: piped
    ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m

ืœืžืจื‘ื” ื”ืฆืขืจ, ื–ื” ืœื ื™ืขื‘ื•ื“ ืขื ื”ื”ื’ื“ืจื•ืช "ืื™ืกื•ืฃ = ื—ื›ื/ืžืคื•ืจืฉ" ื•"ืžื–ืœื’ื•ืช = 20": ื”ืžืงื‘ื™ืœื•ืช ืœ-YaML ืฉืœื”ื ืœื ืงื™ื™ืžื•ืช. ืื• ืฉื ืงื‘ืข ืื•ืชื ื‘-ansible.cfg, ืื• ืฉื ืขื‘ื™ืจ ืื•ืชื ื“ืจืš ืžืฉืชื ื™ ื”ืกื‘ื™ื‘ื” ANSIBLE_GATHERING ื•-ANSIBLE_FORKS.

ืœื’ื‘ื™ ืžื™ื˜ื•ื’ืŸ
- ืื™ืคื” ื–ื” ืœื’ื‘ื™ ืžื™ื˜ื•ื’ืŸ? - ื–ื›ื•ืชืš ืœืฉืื•ืœ, ืงื•ืจื ื™ืงืจ. ื‘ืฉื•ื ืžืงื•ื ื‘ืžืืžืจ ื”ื–ื”. ืื‘ืœ ืื ืืชื” ื‘ืืžืช ืžื•ื›ืŸ ืœืงืจื•ื ืืช ื”ืงื•ื“ ืฉืœื• ื•ืœื”ื‘ื™ืŸ ืœืžื” ืกืคืจ ื”ื”ืคืขืœื” ืฉืœืš ืงื•ืจืก ืขื ืžื™ื˜ื•ื’ืŸ, ืื‘ืœ ืขื•ื‘ื“ ืžืฆื•ื™ืŸ ืขื ื•ื ื™ืœ Ansible, ืื• ืœืžื” ืื•ืชื• ืกืคืจ ื”ืคืขืœื” ืขื‘ื“ ืžืฆื•ื™ืŸ ืœืคื ื™ ื›ืŸ, ืื‘ืœ ืื—ืจื™ ืขื“ื›ื•ืŸ ื”ืชื—ื™ืœ ืœืขืฉื•ืช ื“ื‘ืจื™ื ืžื•ื–ืจื™ื - ื•ื‘ื›ืŸ, ืžื™ื˜ื•ื’ืŸ ื™ื›ื•ืœ ืœื”ื™ื•ืช ื”ื›ืœื™ ืฉืœืš. ืœื™ื™ืฉื ืืช ื–ื”, ืœื”ื‘ื™ืŸ ืืช ื–ื”, ืœื›ืชื•ื‘ ืžืืžืจื™ื - ืื ื™ ืืงืจื ืืช ื–ื” ื‘ืขื ื™ื™ืŸ.

ืœืžื” ืื ื™ ืื™ืฉื™ืช ืœื ืžืฉืชืžืฉ ื‘ืžื™ื˜ื•ื’ืŸ? ื‘ื’ืœืœ ื’ืœื“ื™ื•ืœ ื–ื” ืขื•ื‘ื“ ืจืง ื›ืœ ืขื•ื“ ื”ืžืฉื™ืžื•ืช ืžืžืฉ ืคืฉื•ื˜ื•ืช ื•ื”ื›ืœ ื‘ืกื“ืจ. ืขื ื–ืืช, ืื ืชืคื ื• ืงืฆืช ืฉืžืืœื” ืื• ื™ืžื™ื ื” - ื–ื”ื•, ื”ื’ืขื ื•: ื‘ืชื’ื•ื‘ื” ืขืคื™ื ืขืœื™ื›ื ืงื•ืžืฅ ื—ืจื™ื’ื™ื ืœื ื‘ืจื•ืจื™ื, ื•ืœื”ืฉืœืžืช ื”ืชืžื•ื ื”, ื›ืœ ืžื” ืฉื—ืกืจ ื”ื•ื ื”ืžืฉืคื˜ ื”ื ืคื•ืฅ "ืชื•ื“ื” ืœื›ื•ืœื , ื›ื•ืœื ื—ื•ืคืฉื™ื™ื." ื‘ืื•ืคืŸ ื›ืœืœื™, ืื ื™ ืคืฉื•ื˜ ืœื ืจื•ืฆื” ืœื‘ื–ื‘ื– ื–ืžืŸ ื‘ืœื‘ืจืจ ืืช ื”ืกื™ื‘ื•ืช ืœ"ื“ืคื™ืงื” ื”ืžื—ืชืจืชื™ืช" ื”ื‘ืื”.

ื—ืœืง ืžื”ื”ื’ื“ืจื•ืช ื”ืœืœื• ื”ืชื’ืœื• ื‘ืžื”ืœืš ืชื”ืœื™ืš ื”ืงืจื™ืื” ืงื•ื“ ืžืงื•ืจ ืชื•ืกืฃ ื—ื™ื‘ื•ืจ ืชื—ืช ื”ืฉื ื”ืžื•ื‘ืŸ ืžืืœื™ื• "ssh.py". ืื ื™ ืžืฉืชืฃ ืืช ืชื•ืฆืื•ืช ื”ืงืจื™ืื” ื‘ืชืงื•ื•ื” ืฉื–ื” ื™ืขื•ืจืจ ืžื™ืฉื”ื• ืื—ืจ ืœื”ืกืชื›ืœ ื‘ืžืงื•ืจื•ืช, ืœืงืจื•ื ืื•ืชื, ืœื‘ื“ื•ืง ืืช ื”ื™ื™ืฉื•ื, ืœื”ืฉื•ื•ืช ืขื ื”ืชื™ืขื•ื“ - ื”ืจื™ ื‘ืžื•ืงื“ื ืื• ื‘ืžืื•ื—ืจ ื›ืœ ื–ื” ื™ื‘ื™ื ืœืš ืชื•ืฆืื•ืช ื—ื™ื•ื‘ื™ื•ืช. ื‘ื”ืฆืœื—ื”!

ืจืง ืžืฉืชืžืฉื™ื ืจืฉื•ืžื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืชืฃ ื‘ืกืงืจ. ืœื”ืชื—ื‘ืจื‘ื‘ืงืฉื”.

ื‘ืื™ืœื• ืžื”ื’ื“ืจื•ืช Ansible ื”ื‘ืื•ืช ืืชื” ืžืฉืชืžืฉ ื›ื“ื™ ืœื”ืื™ืฅ ืืช ื”ืคืจื•ื™ืงื˜ื™ื ืฉืœืš?

  • 69,6%pipelining=true32

  • 34,8%ืื™ืกื•ืฃ = ื—ื›ื/ืžืคื•ืจืฉ16

  • 52,2%ssh_args = "-o ControlMaster=auto -o ControlPersist=..."24

  • 17,4%transfer_method = piped8

  • 63,0%ืžื–ืœื’ื•ืช = XXX29

  • 6,5%ืฉื•ื ื“ื‘ืจ ืžื–ื”, ืจืง ืžื™ื˜ื•ื’ืŸ3

  • 8,7%Mitogen + ืื ื™ ืืฆื™ื™ืŸ ืื™ื–ื• ืžื”ื”ื’ื“ืจื•ืช ื”ืœืœื•4

46 ืžืฉืชืžืฉื™ื ื”ืฆื‘ื™ืขื•. ืžืฉืชืžืฉ ืื—ื“ ื ืžื ืข.

ืจื•ืฆื” ืขื•ื“ ื“ื‘ืจื™ื ืขืœ Ansible?

  • 78,3%ื›ืŸ, ื›ืžื•ื‘ืŸ54

  • 21,7%ื›ืŸ, ืื ื™ ืจืง ืจื•ืฆื” ืขื•ื“ ื“ื‘ืจื™ื ื”ืืจื“ืงื•ืจ!15

  • 0,0%ืœื, ื•ื–ื” ืœื ื ื—ื•ืฅ ืœื—ื™ื ื0

  • 0,0%ืœื, ื–ื” ืžืกื•ื‘ืš!!!0

69 ืžืฉืชืžืฉื™ื ื”ืฆื‘ื™ืขื•. 7 ืžืฉืชืžืฉื™ื ื ืžื ืขื•.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”