----name:Configurer les serveurs webhosts:webserversbecome:truegather_facts:truevars:nginx_port:80app_user:www-datapre_tasks:-name:Mettre à jour le cache APTapt:update_cache:truecache_valid_time:3600tasks:-name:Installer nginxapt:name:nginxstate:present-name:Déployer la configurationtemplate:src:nginx.conf.j2dest:/etc/nginx/nginx.confmode:'0644'notify:Redémarrer nginx-name:S'assurer que nginx est démarréservice:name:nginxstate:startedenabled:truehandlers:-name:Redémarrer nginxservice:name:nginxstate:restartedpost_tasks:-name:Vérifier que nginx réponduri:url:http://localhoststatus_code:200
# Condition when-name:Installer sur Debian uniquementapt:name:vimstate:presentwhen:ansible_os_family == "Debian"-name:Redémarrer si le noyau a changéreboot:when:kernel_update.changed# Boucles-name:Créer plusieurs utilisateursuser:name:"{{item.name}}"groups:"{{item.groups}}"state:presentloop:-{ name:alice, groups:sudo}-{ name:bob, groups:docker}-name:Installer des paquetsapt:name:"{{item}}"state:presentloop:-nginx-curl-git# with_items (ancien style, toujours supporté)-name:Créer des répertoiresfile:path:"{{item}}"state:directorywith_items:-/opt/app-/opt/app/logs-/opt/app/data
-name:Vérifier si un fichier existestat:path:/etc/myapp/config.ymlregister:config_file-name:Créer la config si absentecopy:src:config.ymldest:/etc/myapp/config.ymlwhen:not config_file.stat.exists-name:Afficher le résultatdebug:msg:"Lefichierexiste:{{config_file.stat.exists}}"-name:Afficher une variabledebug:var:ansible_default_ipv4.address-name:Afficher un message formatédebug:msg:"OS:{{ansible_distribution}}{{ansible_distribution_version}}"
# file — créer, supprimer, définir les permissions-file:path:/opt/appstate:directory# directory | file | link | absentowner:appusergroup:appusermode:'0755'recurse:true# pour les répertoires# copy — copier depuis le contrôleur-copy:src:fichier.confdest:/etc/app/fichier.confowner:rootmode:'0644'backup:true# sauvegarder l'ancienne version# template — fichier Jinja2-template:src:app.conf.j2dest:/etc/app/app.confmode:'0644'# fetch — récupérer depuis l'hôte distant-fetch:src:/var/log/app.logdest:./logs/{{ inventory_hostname }}/flat:false# lineinfile — modifier une ligne dans un fichier-lineinfile:path:/etc/ssh/sshd_configregexp:'^PasswordAuthentication'line:'PasswordAuthenticationno'backup:true# blockinfile — insérer un bloc-blockinfile:path:/etc/hostsblock:|10.0.0.10 lxc-nginx nginx.mkhome.internal10.0.0.11 lxc-db db.mkhome.internal
-service:name:nginxstate:started# started | stopped | restarted | reloadedenabled:true-systemd:name:nginxstate:restarteddaemon_reload:true# équivalent systemctl daemon-reloadenabled:true-systemd:daemon_reload:true# juste recharger les units sans toucher au service
-user:name:aliceuid:1001groups:-sudo-dockerappend:true# ajouter aux groupes sans retirer les autresshell:/bin/bashhome:/home/alicecreate_home:truestate:present-group:name:devsgid:2000state:present-authorized_key:user:alicekey:"{{lookup('file','~/.ssh/id_ed25519.pub')}}"state:present
# command — pas de shell (pas de pipes, redirections)-command:/usr/bin/myapp --initargs:chdir:/opt/myapp# shell — avec shell complet (pipes, etc.)-shell:"psaux|grepnginx|grep-vgrep"register:nginx_procs# script — exécuter un script local-script:scripts/init.shargs:chdir:/opt/app
# Dans un playbook-hosts:webserversroles:-nginx-{ role:nginx, nginx_port:8080}# avec variables-role:nginxvars:nginx_port:8080when:deploy_nginx | default(true)
# Chiffrer un fichieransible-vaultencryptgroup_vars/all/vault.yml
# Déchiffreransible-vaultdecryptgroup_vars/all/vault.yml
# Modifier un fichier chiffréansible-vaulteditgroup_vars/all/vault.yml
# Chiffrer une valeur (inline)ansible-vaultencrypt_string'MonSecret'--name'db_password'# Voir sans déchiffreransible-vaultviewgroup_vars/all/vault.yml
# Changer le mot de passe du vaultansible-vaultrekeygroup_vars/all/vault.yml
# Utiliser le vault dans un playbookansible-playbooksite.yml--ask-vault-pass
ansible-playbooksite.yml--vault-password-file~/.vault_pass
ansible-playbooksite.yml# exécuteransible-playbooksite.yml-iinventory/hosts.yml# inventaire expliciteansible-playbooksite.yml--check# dry-run (simulation)ansible-playbooksite.yml--diff# voir les différencesansible-playbooksite.yml--check--diff# simulation + diffansible-playbooksite.yml-lwebservers# limiter aux webserversansible-playbooksite.yml-lweb01,web02# hôtes spécifiquesansible-playbooksite.yml-tnginx# seulement le tag nginxansible-playbooksite.yml--skip-tagsdeploy# exclure un tagansible-playbooksite.yml--start-at-task"Déployer la config"ansible-playbooksite.yml-v# verbeuxansible-playbooksite.yml-vvv# très verbeux (debug)ansible-playbooksite.yml-e"env=production"# variable extraansible-playbooksite.yml-e@vars/prod.yml# variables depuis fichieransible-playbooksite.yml--become# sudoansible-playbooksite.yml--become-user=root
ansible-playbooksite.yml-ualice# utilisateur SSH