anf 2018 lyon francois disdier › event › 123 › session › 4 › material › ...1....

18
ANF 2018 Lyon Francois Disdier

Upload: others

Post on 09-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

ANF2018–Lyon

FrancoisDisdier

Page 2: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Sommaire

1. Introduction1.1. Ansible?1.2. Autresproduits1.3. ExempleIBMP

2. MiseenœuvredeAnsible

2.1. Installation2.2. Définitiondel’inventaire2.3. Lesvariables2.4. Lesoutils/lesaccès

3. Utilisationdesmodules

3.1. Définition/syntaxe3.2. Exemples

4. LesPlaybooks

4.1. Définition4.2. Syntaxe4.3. Exemples

5. Structuresdecontrôle

5.1. Définitions5.2. Facts/Conditions/boucles/inclusions5.3. Exemples

6. Templates/Rôles

6.1. Templates6.2. Rôles

Page 3: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

1. Introduction• Ansible?

Ansibleestunprojetrécent(2012)quiaétédéveloppéentièrementenpythonetquirépondàdesbesoinsderemplacement,dedéploiementoudechangementsdeserveur.Cesactionspeuventêtremenésurl’ensembleouunepartiedesserveurs.C’estunsystèmeagentlesscapabledepiloterdessystèmesWindows,Linux,UnixetaussideséquipementsréseautelqueCiscoouJuniper.Pourfonctionneransiblen’abesoinqued’unaccèssshetdepythonoudesAPIs.Iln’yapasdeserveurcentral,toutordinateurayantAnsiblepeutcommanderlesautres.

• Autresproduits?Lesautresproduitsquipermettentl’orchestrationdeserveur:• Puppet(client/serveur)

C’estprojetquiaétécrééen2005etquiestécritenRUBY.

• Chef(client/serveur)Ilaétécrééen2009pardesex-employédePuppetlabs.IlaétéécritenRUBYpuisré-écritenErlang.

• Saltstack(client/serveurouagentless)Cetteplateformeavulejouren2011.Elleestécriteenpython.

Page 4: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

• ContexteIBMP

Plateformebioimage

ClusterIBMPdédiéàla

Bioinformatique

Maintenance,installationAdministrationniveau1

• Sauvegardedesprocessusd’installationetmiseàjourdesoutilsbioinformatique

• Etablissementetmaintientdeworkflowutileàl’administrationducluster

Page 5: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

2. MiseenœuvredeANSIBLE

• InstallationAnsibles’installefacilementetuniquementsurl’ordinateurdemanagement.Ellepeutsefairevialespaquetsdeladistribution(UBUNTU/DEBIAN)ouviadesdépôtstiersEPEL(REDHAT/CENTOS).EllepeutsefaireaussiviaPIP.

Exemple:pipinstallansibleNota:

• Viapiponpeutinstalleruneversionspécifiqued’ansible

• Python2.5auminimumdoitêtreinstallésurlesmachinescibles

• PourlesmachinesutilisantSELINUXilfaudrainstallerlepaquetpython-selinux

• Définitiondel’inventaire

Lefichierinventaire"hosts"setrouvedans"/etc/ansible"pardéfaut.Ildéfinitlalistedesmachinesquipourraitrépondreauxrequêtesd’Ansible.Lesordinateursdéfinisdanslefichier"hosts"peuventêtreorganisésengroupe.Onpeutmêmecréerdesgroupesdegroupe.Cefichierestmodifiabledanslaconfigurationd’ansibleoumêmespécifiableàl’executiondescomma,desansible.

Exemple:[Ordonnanceur]10.2.2.5[file_slow]nlame1.example.comnlame2.example.com[File_fast]10.2.2.10

Page 6: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

• LesvariablesOnpeutdéfinirdesvariablesarbitrairesquipeuventêtreassociéesàunemachineouungroupedemachines.Ellespermettentdemodifierlecomportementd’Ansible(infod’authentification).Lesvariablessedéfinissentsoitsurlalignecorrespondanteàlamachinesoitdansunesectiondédiée.

• Ilestcommund’utiliserlavariable"type"quiserautilenonpasàansiblemaisquiserautiliséeparlasuitedansunrôleouunplaybook(ensembledetâchesàeffectuer).

Exemple:[file_slow]nlame1.example.comtype=masternlame2.example.comtype=slave

• Unautreexempledevariableestansible_ssh_user.ElleestutilisépourétablirdesconnexionsSSHaveclebonutilisateur.

Exemple:[file_slow]nlame1.example.comansible_ssh_user=root

• Enfinilestpossiblededéfinirdesvariablesdanslesdossiersgroup_varsethost_vars(FormatYML)

Exemple:[file_slow]nlame1.example.comtype=masternlame2.example.comtype=slave

Contenude:/etc/ansible/group_vars/file_slowansible_ssh_user:ansible

Page 7: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Contenude:/etc/ansible/host_vars/nlame1.example.comtype:masterContenude:/etc/ansible/host_vars/nlame2.example.comtype:slave

• Lesoutils/lesaccèsLesoutils:ansiblefournitplusieursoutilsenlignedecommande:

Outil Descriptionansible Executiond’unetâcheansible-playbook Executiondeplaybook(ensembledetâchesàeffectuer)

ansible-doc Accèsaulisting+documentationdesserveursansible-vault Gestiondefichierschiffrés(stockagevariable-motdepasse)ansible-galaxy Accèsaudépôtdesrôlesd’ansible

Lemodulepingpermetdevaliderlesaccèsd’uninventaire.Lesmachinesciblesrépondrontparpong.

Exemple:ansible–ihostsfile_slow–mping

nota:• L’option-ispécifielecheminversl’inventaire• L’option–mspécifielemoduleansibleàutiliser• L’optionallmisàlaplacedefile_slowaurait

impactétouteslesmachinesprésententdansl’inventaire

Page 8: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Lesaccès:

L’accèsSSHauxhôtespeutêtreexplicitédeplusieursmanières:

• Enutilisantlesinformationsdeconnexiondansl’inventaire

• Enprécisanttouteslesinformationssurlalignedecommandeansible

• Enconfigurantlamachinedemanagementpouruneconnexiontransparente

Enpratiquelaméthode"configurerlamachinedemanagement"estlapluspratiqueàutiliser.Pourcelailfaudra:

• CréerunepairedecléSSH(ssh-keygen)• Déployerlaclépubliquesurchacundesserveurs

(ssh-copy-id)• Créeruneconfigurationsudosansmotdepasse

surleshôtesdistantsouunloginentantqueroot.Leloginutilisateurpourchaquehôtepeutêtrespécifiédansl’inventaire.

Exemple:

$ssh-keygenGeneratingpublic/privatersakeypair.Enterfileinwhichtosavethekey(/home/user/.ssh/id_rsa):Enterpassphrase(emptyfornopassphrase):Entersamepassphraseagain:[email protected]

Nota:sudopeutêtreconfigurépournepasdemanderdemotdepasselorsdesonutilisation$cat/etc/sudoers.d/ansibleansibleALL=(ALL)NOPASSWD:ALL

Page 9: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

3. Utilisationdesmodules• Définition

LesmodulessontlabasedesactionsexécutéesparAnsible.Chaquemoduleestliéàuneactionspécifique.Lesmodulesacceptentdesarguments.Lalistedesmodulesproposéparl’applicationansibleestaccessiblegrâceàlacommande"ansible-doc--list".Onpeutretrouverlalistedesmodulesàcetteadresse:http://docs.ansible.com/ansible/modules_by_category.htmlLasyntaxeest:ansible(hote/groupe/all)–mMODULE[-a"arg1=val1"]

• Exemple:$ansibleall–myum–a"name=httpdstate=latest"Cettecommandepermetdevérifiersiladernièreversiond’apacheestinstallée,sinon,alorselleinstalleladernièreversion.

Voiciunelistedemodulescourammentutilisés:

• ping:validationdel’inventaire• setup:retourneunelisted’informations

matérielsdel’hôte• shelletcommand:permettentd’exécuterdes

commandessurleshôtes• user:permetdegérerdesutilisateurssurles

hôtes• file:permetdegérerdesdroitssurdesfichiers• service:permetdegérerlesservicessystèmestel

que:arrêt/démarrage/redémarrageouactivationetdésactivationauboot

• yum/apt/zypper:permetdegérerl’installation,lamiseàjouretlasuppressiondepaquets

Page 10: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

4. LesPlaybooks:

1. Définition:

Lesplaybookspermettentd’exécuterunensembledetâchesàeffectuersurlesmachineshôtesdemanièreséquentiellesurtoutoupartiedel’inventaire.ChaquetâcheutiliseunmoduledeAnsible.OnutiliselelangageYAMLpourécrireunplaybook.Unplaybookestconstituéauminimum:• D’unevariablehostsquidésignelesmachines

cibles• D’unevariabletaskquidéfinituneactionà

accomplir.

Lesplaybookspeuventaussi:• Emettredesnotifications,quiserontutilespour

déclencheruneactiondanscertainesconditions• Effectuerdesactionsconditionnellesselonleur

valeur(parexempleletypededistributiondusystème)

• Utiliserdestemplatespourcréeroumodifierdesfichiers

Ontrouveaussidanslesplaybooks:

• Desrôlesàutiliser• Deshandlers(tâchesspécifiquesedéclenchant

grâceàunenotification)• DesélémentsdeconfigurationpourAnsible

(parexemplel’utilisationdesudo)• Desvariablesspécifiquesquinesontpasreliéà

l’inventaire.

Page 11: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Exemple:• hosts:file_slow

tasks:-name:Installapacheyum:name:httpdstate:present tags: -install_httpd

L’exécutionduplaybookinstall_apache.ymlsefaitgrâceàlacommandeansible-playbook:

$ansible-playbookinstall_apache.yml

Pardéfaut,unplaybooks’exécutesurtousleshôtesconcernés.Ilestpossiblededeciblercesactionsgrâceauxoptions:• Tags:cetteoptionsedéfiniedansleplaybooket

onl’appelle--tagsnom_du_tagou–skiptags• L’option–lquipermetdeciblerunemachineen

particulier

Exemple:

$ansible-playbookinstall_apache.yml--tagsinstall_httpd-lnlame1.example.com

LasyntaxeYAML(YetAnotherMarkupLanguage)C’estunlangagefacileàlireetàécrire.OnpeutyinclureunesyntaxeJSON.Onpeutymanipulerdutexte,deslistesetdesdictionnaires.L’indentationesttrèsstrict(2espaces/indentation).Ondémarreunplaybooktoujoursavec---puisonvaàlaligne.Enfinlescommentairessontdéfinigrâceau#

Page 12: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Exemple:

---#Listedescommutateursjuniperprésentàl’IBMPcommutateurs:-ex3300-ex4200-ex2200-ex4300...Lestâches:Chaquetâcheestdéfinieparunnom(rubriquename)pourcommenterl’actionetd’unmoduleàappeler.Desattributssupplémentairespermettentderendrelesplaybooksplusinteractifs:

• notify:définiunHandleràappeler• register:sauvelerésultatd’uneactiondans

unevariable• include:inclusiond’unfichierexterne• when:exécuteuneactionsouscertaines

conditions• …

Notificationethandlers:Leshandlerspermettentdedéfinirdesactionsquineserontexécutéesqu’audéclenchementd’unenotification.Leshandlersnesontprisencomptequ’aprèslafindetouteslestâchesprésentesdansleplaybook.

Page 13: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Exemple:

• hosts:file_slowbecome:notasks:-name:Actionquifaitunemodificationfile:path:/tmp/totostate:touchmode:0644notify:-handler1

Attentionl’argumentdenotifyetlenomduhandlerdoiventêtrerigoureusementidentique.

5. Structuresdecontrôle• Définition:

Lesstructuresdecontrôlesontprobablementlapartielaplusutile.Eneffetgrâceauxstructuresdecontrôleonpeutmanipulerlesdonnéesprovenantdeshôtesdefaçontrèsflexibleetpuissante.

• Facts/Conditions/boucles/inclusions:

• Lesfacts:Lapremièreactioneffectuéelorsdel’exécutiond’unplaybookestderécolterdesinformationsdechacundeshôtesdistants.Cesfactsalimententdesvariables(préfixéesparAnsible).Cesvariablesserontutilisablesdanslesfiltresdestestsetdesbouclesduplaybook.Pouravoirunelistedetouslesfactsqu’Ansiblemetàvotredispositionilfaututiliserlemodulesetup

Exemple:ansible–msetuphostname

Page 14: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

• Lesconditions:Ilestutilequecertainestâchesduplaybooksoienteffectuablesseulementsiuneconditionspécifiqueestremplieounon.Ladirectivewhenpermetd’effectuercetest

Exemple:-name:Installationapache(Debian)apt:name:apache2path:/tmp/totostate:presentwhen:ansible_os_family==‘Debian’-name:Installationapache(REHL)yum:name:httpdstate:presentwhen:ansible_os_family==‘RedHat’

• Lesboucles:Lesbouclespermettentd’itérersurlesvariablesdetypelisteetdictionnaire.Cettetechniquepermetd’exécuterplusieursfoislamêmeactionsurunnombred’élémentsindéfinilorsdel’écrituredurôleouplaybook.Lalistecomplètedesbouclesestdisponibledansladocumentationansible.

Exemple:with_itemspermetdebouclersuruneliste.Achaqueitérationunevariableitemprendlavaleursuivantedelaliste:

-name:Installationd’éditeursyum:name:“{{item}}”with_items:

-vim-emacs-nano

Page 15: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

• Lesinclusions : Ladirectiveincludepermetd’importerunelistedetâchesoudehandlers.Cettetechniquepermetderendregénériquescertainesactions.

Exemple:hosts:alltasks:-include:common-setup.yml-name:somethingelse…

6. Templates/Rôles

1. DéfinitiondesTemplates:Ansiblefonctionnesurunsystèmedemodèles(templates).Ilss’appuientsurJinja2etpermettentdegérerdesboucles,destestslogiques,deslistesoudesvariables.• Unevariablesedéclareenlamettantaumilieude

deuxaccolades:variable:{{variable}}• Lesinstructionssontdélimitéesparaccoladeset

pourcentage:{%instruction%}

• Lescommentairessontdélimitésparaccoladeetdièse.

Page 16: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Exemple:

{#Définitiondenotreliste#}{%setmyList=[1,2,3]%}{#Parcoursdelaliste#}{#Pourafficherl'ensembledesvaleursprésentes#}{%forvalueinmyList%}Valeur:{{value}}{%endfor%}

2. Définitiondesrôles:

Lesrôlessontdesplaybooksgénériques,quipeuventêtreintégrésdansd’autresplaybooks.Cettenotionestessentielleafindecréerdestâchescomplexes.Eneffetafinderendredesplaybookslisiblesilvautmieuxconstruiredesrôlesquel’onpeutcombinerensembleplutôtquecréerunrôlecomplexequiseradifficileàmainteniretcomplexeàutiliseretpeulisible.Pourchaqueélémentd’unrôle(tâche,handlers,…)unfichiernommémain.ymlsertdepointd’entrée.Exempled’arborescence:Danslerépertoireplaybooks,oùsetrouventansible.cfg,hostsetdeploy.yml,onvacréerundossier«roles»etonlanceralacommande:

$ansible-galaxyinit-proles/test

L’argumentinitpermetd’initierlacréationd’unrôleetilestsuividel’option–ppourindiquerlecheminoùl’ondésirecréerlerôle.Sil’optionpn’estpasdéfinielerôleseracréédanslerépertoirecourant.Icioncréeunrôletest.

- testwascreatedsuccessfully

Page 17: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

Notrerôleestbiencrééetilcontientlesrépertoiressuivants:

Grâceàcettearborescenceilneserapasnécessairedenommerlesdirectivesvars,tasksouhandlersdanslesfichiersvars/main.yml,tasks/main.ymlethandlers.yml.Cetteinformationseraobtenueàpartirdunomdurépertoire.Delamêmefaçonlesmodulescopyettemplateirontchercherlesfichierssourcesdirectementdanslesrépertoiresfilesettemplates,sansavoirbesoindepréciserlepath.

Obtenirdesrôles:

Ansiblefournitunebibliothèquederôlesenligne:Galaxy.LesrôlesdisponiblessurGalaxysontsoumisparlacommunautéAnsible,etleurqualitévarie.Unsystèmedenotationpermetdetrouverlesmeilleursrôles.Exemple:

Installation$ansible–galaxyinstallgeerlingguy.apache

Suppression$ansible–galaxyremovegeerlingguy.apache

Page 18: ANF 2018 Lyon Francois Disdier › event › 123 › session › 4 › material › ...1. Introduction • Ansible ? Ansible est un projet récent (2012) qui a été développé entièrement

7. Pourallerplusloin

Voiciquelquesliensquipourrontvouspermettred’approfondirlesnotionsansibledispenséesdanscecours:• Docansible(https://docs.ansible.com)• PrésentationSupinfo• Ancel1• Sogilis(base,module,roles)• IntroductionYAML