
Det er ingen hemmelighet at med standardinnstillingene kan Ansible utfÞre arbeidet sitt ikke sÊrlig raskt. I denne artikkelen vil jeg pÄpeke noen Ärsaker til dette og foreslÄ et nyttig minimum av innstillinger som muligens kan Þke hastigheten pÄ prosjektet ditt.
Vi diskuterer her og videre Ansible 2.9.x, som ble installert i et nylig opprettet virtualenv pÄ din favoritt mÄte.
Etter installasjon lager vi en fil «ansible.cfg» ved siden av spilleboken din â dette stedet lar deg flytte innstillingene sammen med prosjektet, og de vil lastes inn ganske automatisk.
Pipelinebygging
Noen har kanskje hĂžrt om at det er nĂždvendig Ă„ bruke pipelining, det vil si at moduler ikke kopieres til filsystemet pĂ„ mĂ„lmaskinen, men at en Base64-kodet zip-arkiv sendes direkte til stdin til Python-tolkeren, andre har kanskje ikke hĂžrt om det, men faktum er at: fremdeles er undervurdert. Dessverre har en av de populĂŠre Linux-distribusjonene tidligere hatt dĂ„rlig konfigurert sudo som standard â slik at denne kommandoen krevde en tty (terminal), derfor har Ansible latt denne svĂŠrt nyttige innstillingen vĂŠre deaktivert som standard.
pipelining = TrueInnsamling av fakta
Visste du at med standardinnstillingene starter Ansible faktainnsamling for hver lekse som involverer alle vertsene? Generelt, hvis du ikke visste det, vet du det nÄ. For Ä hindre dette mÄ du aktivere enten eksplisitt forespÞrsel for faktainnsamling (explicit) eller smart-modus. I smart-modus vil fakta bare bli samlet inn fra de vertsene som ikke har vÊrt med i tidligere leksjoner.
UPD. NÄr du kopierer, mÄ du velge en av disse innstillingene.
gathering = smart|explicitGjenbruk av ssh-tilkoblinger
Hvis du noen gang har kjÞrt Ansible i debug-modus (alternativ «v», gjentatt fra en til ni ganger), har du kanskje merket at ssh-tilkoblinger stadig blir opprettet og brutt. Det finnes ogsÄ noen detaljer her.
UnngÄ trinnet med Ä opprette ssh-tilkoblinger pÄ nytt kan gjÞres pÄ to nivÄer samtidig: bÄde i ssh-klienten og nÄr filer overfÞres til den administrerte verten fra kontrollmaskinen.
For reusing an open SSH connection, it is enough to simply pass the necessary keys to the SSH client. Then it will start doing the following: when establishing the SSH connection for the first time, it will additionally create a so-called control socket, and in subsequent connections, it will check the existence of that socket and, if successful, reuse the existing SSH connection. To make all this meaningful, let's set the connection timeout for inactivity. You can read more in , and in the context of Ansible, we simply use the 'forwarding' of the required options to the SSH client.
ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"To reuse an already open SSH connection when transferring files to the managed host, it is enough to specify one more unknown setting, ssh_tranfer_method. The documentation on this is extremely and misleading, as this option actually works! However, reading allows you to understand what exactly is going to happen: a command will be executed on the managed host, directly interacting with the required file.
transfer_method = pipedBy the way, in the 'develop' branch, this setting also exists and .
Do not fear the knife, fear the fork
Another useful setting is forks. It determines the number of worker processes that will connect to the hosts and perform tasks simultaneously. Due to the peculiarities of Python as a programming language, it uses processes instead of threads, because Ansible still supports Python 2.7 â no asyncio here, no need to introduce asynchronicity! By default, Ansible starts workers, but if requested correctly, it can start more:
forks = 20Just a heads up, there may be some difficulties related to the available memory on the controlling machine. In other words, setting forks=100500 is certainly possible, but who said it will work?
Let's summarize everything
In the end, the necessary settings for ansible.cfg (ini format) may look like this:
[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped
And if you want to hide everything in a proper YaML inventory of a healthy person, it might look something like this:
---
all:
vars:
ansible_ssh_pipelining: true
ansible_ssh_transfer_method: piped
ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m
Dessverre, med innstillingene «gathering = smart/explicit» og «forks = 20» vil dette ikke gÄ: deres YaML-ekvivalenter eksisterer ikke. Enten angir vi dem i ansible.cfg, eller sÄ overfÞrer vi dem gjennom miljÞvariablene ANSIBLE_GATHERING og ANSIBLE_FORKS.
Om Mitogen
â Men hvor stĂ„r det noe om Mitogen her? â har du rett til Ă„ spĂžrre, kjĂŠre leser. I denne artikkelen â ingen steder. Men hvis du er virkelig klar til Ă„ lese koden hans og forstĂ„ hvorfor spilleplanen din feiler med Mitogen, men fungerer normalt med vanilje Ansible, eller hvorfor denne spilleplanen har fungert fint til nĂ„ og etter oppdateringen begynte Ă„ oppfĂžre seg rart â vel, Mitogen kan potensielt vĂŠre ditt verktĂžy. Bruk det, bli klokere, skriv artikler â jeg vil lese dem med interesse.
Hvorfor bruker jeg personlig ikke Mitogen? Fordi det fungerer bare sĂ„ lenge oppgavene er virkelig enkle og alt gĂ„r bra. Men sĂ„ snart du viker litt til venstre eller hĂžyre â er det over: i svar flyr det en haug med uklare unntak mot deg, og for Ă„ fullfĂžre bildet mangler det bare den kjente frasen «takk for oss, alle sammen er frie». Generelt Ăžnsker jeg bare ikke Ă„ bruke tid pĂ„ Ă„ finne ut av Ă„rsaken til et nytt «underjordisk bankebrett».
Noen av disse innstillingene ble oppdaget i prosessen med Ă„ lese tilkoblingspluginet med det talende navnet «ssh.py». Resultatene fra lesingen deler jeg i hĂ„p om at det vil inspirere flere til Ă„ se i kildekodene, lese dem, sjekke implementeringen, sammenligne med dokumentasjonen â for alt dette vil fĂžr eller siden gi deg positive resultater. Lykke til!
Kun registrerte brukere kan delta i undersÞkelsen. , vÊr sÄ snill.
Hvilke av de nevnte Ansible-innstillingene bruker du for Ă„ akselerere prosjektene dine?
69,6%pipelining = true32
34,8%gathering = smart/explicit16
52,2%ssh_args = "-o ControlMaster=auto -o ControlPersist=âŠ"24
17,4%transfer_method = piped8
63,0%forks = XXX29
6,5%Ingen av disse, bare Mitogen3
8,7%Mitogen + skal jeg pÄpeke, hvilke av disse innstillingene som er brukt4
46 brukere har stemt. 21 brukere avholdt seg.
Vil du ha mer forskjellig om Ansible?
78,3%ja, selvfĂžlgelig54
21,7%ja, jeg vil bare ha flere hardcore ting!15
0,0%nei, og det mÄ vi ikke ha0
0,0%nei, det er vanskelig!!!0
69 brukere har stemt. 7 brukere avholdt seg.
Kilde: habr.com
