MEETUP ANSIBLE MEETUP ANSIBLE MEETUP ANSIBLE MEETUP ANSIBLE MEETUP ANSIBLE MEETUP ANSIBLE MONTRÉAL MONTRÉAL MONTRÉAL MONTRÉAL MONTRÉAL MONTRÉAL ADOPTION D'ANSIBLE AU SEIN D'UNE ÉQUIPE DE SYSADMINS mercredi 12 avril 2017, par Grégory Colpart
MEETUPANSIBLEMEETUPANSIBLEMEETUPANSIBLEMEETUPANSIBLEMEETUPANSIBLEMEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLE
MEETUPANSIBLEMEETUPANSIBLE
MONTRÉALMONTRÉALMONTRÉALMONTRÉALMONTRÉALMONTRÉAL
MONTRÉAL
MONTRÉAL
MONTRÉAL
MONTRÉAL
MONTRÉAL
MONTRÉAL
MONTRÉAL
MONTRÉAL
MONTRÉALMONTRÉALADOPTIOND'ANSIBLE
AUSEIND'UNEÉQUIPEDESYSADMINSmercredi12avril2017,parGrégoryColpart
Infogérance/Hébergement/InfonuagiqueManagedHostingProviderLinux,infraweb,HA,Ansible,DockerUneéquipeàMontréal+enFrance(24/7)Clients:agencesweb,SaaS,médias
MÉTIERD'EVOLIXUnecentained'infraclientsUnàplusieursdizainesdeserveursparinfraTotald'environ700serveurshétérogènesinfogérésServeursDebian/BSDCultureSysAdmin:shell,100%outilslibres
HISTORIQUE:COMMENTINSTALLERUNSERVEUR?
toutàlamaincopier/collerchecks(evocheck)scriptshellprivé(evolinuxv1)
AUTOMATION?(Tempsd'unetâche)×(nombred'exécution)VS
Tempsd'automatisation
2013:GESTIOND'UNEINFRACLIENTAVECPUPPET
2014:PLAYBOOKANSIBLEPOURDESPETITESTÂCHESPONCTUELLES
ajoutd'unenouvelleadresseIPsurtousnosserveurs
DÉCLICIMMÉDIAT...adoptionprogressiveparcertainsSysAdminsfacileàappréhender(modulecommand/shell)homogénéité,fiabilité,rapidité
ONL'ADOPTEPOUR:actionsurgentes(màjsécuritécommeopenssl)tâchesrépétitives(utilisateurs,firewall)
demandesspécifiques(extensioncluster,instancesdeservices)
2015:ADOPTIONOFFICIELLED'ANSIBLEinventorygénéréàpartirdenotreannuaireLDAPmigrationd'Ansible1.7vers2.0(sudo→become)
2016:CRÉATIONSDERÔLESANSIBLEDANSUNDÉPÔTDÉDIÉ/PUBLIC
conversiondenotrescriptshelld'installationenensembledeplaybooks/rôlesAnsible
2016:INSTALLATIOND'INFRACLIENTCOMPLEXESCOMPLÈTEMENTORCHESTRÉESAVECANSIBLE
2017:MIGRATIOND'ANSIBLE2.0VERSVERSION2.2
LESKILLERSFEATURESD'ANSIBLEconceptidempotenceagent-lesspermettantuneadoptionprogressive
CHOIXD'ORGANISATIONrôlesAnsiblepublics(déploiementencoursversAnsibleGalaxy)outillageAnsiblepublic:tasks,conventions,etc.outillageAnsibleprivé:vaultpourvariables,tasks,etc.scriptsdegestion:générationdesvariables(dialog),syncGit,etc.playbooksdansundépôtpartagéavecleclient
CONVENTIONSlastructuredesrôles(ansiblegalaxy,README.md)leformatYAML(pasdesyntaxecompacte)l'utilisationdelaprécédencedesvariablesutilisationducheckmodedépôtspublics:commentairesetdocsenanglais
mailto={{log2mail_alert_emailorgeneral_alert_email}}
CHOIXDENEPASUTILISERANSIBLETOWER
100%librepasd'interfacegraphique
FOCUSSURL'INVENTORYinventoryviaLDAPpourlaprodinventoryparclient,notammentpourlestests
FOCUSSURLESMODULESIlexistedescentainesdemodules...
CHOIXFIXEDECERTAINSMODULES+CONVENTIONSD'UTILISATION
lineinfilevsblockinfilevscopy/template
CONVENTIONS(SUITE)utilisationdestagssecrets:vaultdansunrepositoryprivétestspourvérificationdel'applicationdesconventionsServeurscentraux...maisoptionnels
[defaults]inventory=$HOME/.ansible/hostsgathering=smart
[ssh_connection]ssh_args=-oControlMaster=auto-oControlPersist=300spipelining=True
[defaults]inventory=$HOME/.ansible/hosts[ssh_connection]ssh_args=-oControlMaster=no-oControlPersist=no
ENJEUDETRANSMISSIONDUSAVOIRtoutlemondedoitêtredanslabarquelesdécouvertesdoiventêtretransmiseslesconventionsetbonnespratiquesprêchéesetrabachéesfaireducollectif/collaboratifetpasavoirunleaderetdessuiveurs
PAIR-PROGRAMMINGTRÈSEFFICACE
ADOPTIOND'ANSIBLEPOURUNEINFRAULTRA-HÉTÉROGÈNE
quelquesserveursgérésad-hocquelquesinfrasglobaliséesmigrationtrèsprogressivedesinfraslegacymaintenancecomplexedansuncontextedeproduction
FOCUSSURLADOCUMENTATIONimportantpourfaciliterlatransmissionexplicitedusavoir,desbonnespratiques,desconventions.
TRAITERLESPLAYBOOKS/ROLESCOMMEDUCODE:desbonsmessagesdecommitsdescommentaireslàoùc'estpertinent(lepourquoi,paslequoi/comment)normerlesREADMEcentraliserlesinfosclés(conventions.md…)écriredestests
FOCUSSURLASÉCURITÉFaillesdesécurité,commeCVE-2016-9587
TESTSIndispensablescommepourducode«classique»
testerlasyntaxelinttesterl'éxécutionsansbug,puistesterl'idempotence(viaKitchen)testerlerésultat(viaserverspeclancéparKitchen)
Seservirdestestscommechasseauxbugs,maisaussipourempêcherlesrégressionsLecodeAnsibleestcommeducodeclassique:ilévolue,serefactore…etilestfaciledecasserquelquechosequiaétévalidéprécédemment
QUELQUESDÉFAUTSD'ANSIBLELesmessagesdesortieenJSONsontconçuspourAnsibleTower,paspourdeshumainspasdegestiondesaccréditations,l'idéalseraitunagentfaçonSSHpourmotsdepassevault/sudo/sshladocumentationestuniquementorientéepourladernièreversion
NOTATIONENOCTALENYAMLmode:0755→Good!mode:755→Bad!mode:1777→Bad!mode:"0755"→Goodmode:"1777"→Good
CONCLUSIONAnsible,idéalpouruneadoptionprogressiveauseind'uneéquipedeSysAdminsÊtreattentifauchangementdeculturequecelaapporteaméliorations:+detestsetpushsurAnsiblegalaxy
POURENSAVOIRPLUS...RôlesAnsibleEvolix:
WikiEvolix:Twitter:Mail:
forge.evolix.org/projects/ansible-roleswiki.evolix.org