Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
ANF2018–Lyon
FrancoisDisdier
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
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.
• ContexteIBMP
Plateformebioimage
ClusterIBMPdédiéàla
Bioinformatique
Maintenance,installationAdministrationniveau1
• Sauvegardedesprocessusd’installationetmiseàjourdesoutilsbioinformatique
• Etablissementetmaintientdeworkflowutileàl’administrationducluster
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
• 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
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
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
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
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.
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#
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.
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
• 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
• 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.
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
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
7. Pourallerplusloin
Voiciquelquesliensquipourrontvouspermettred’approfondirlesnotionsansibledispenséesdanscecours:• Docansible(https://docs.ansible.com)• PrésentationSupinfo• Ancel1• Sogilis(base,module,roles)• IntroductionYAML