Outils pour utilisateurs

Outils du site


ansible

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

ansible [2018/06/11 12:18] (Version actuelle)
Ligne 1: Ligne 1:
 +{{tag>​infra modop}}
 +
 +===== Ansible =====
 +
 +==== Installer une nouvelle machine ====
 +
 +Prérequis: la machine doit être accessible en root via ssh
 +
 +Principe: on la met dans le rôle //​bootstrap//​
 +
 +Comment:
 +  - dans /​etc/​ansible/​hosts,​ rajouter une entrée dans [bootstrap] sans oublier le port :22
 +  - lancer
 +<​code>​
 +ansible-playbook ​ /​etc/​ansible/​Playbooks/​0bootstrap.yml ​ --ask-pass
 +</​code>​
 +  - utiliser ensuite le fichier /​etc/​ansible/​Playbooks/​0role.yml pour mettre la machine dans les rôle voulus
 +
 +//​Straighten up linux server configuration in parallell//
 +
 +
 +  * se base sur [[:ss|ssh]] pour communiquer avec les [[:​clients|clients]].
 +  * Ces derniers sont rassemblés dans un fichier //hosts// et peuvent constituer des //groupes//
 +  * les actions réalisables sur les [[:​clients|clients]] sont diverses (copie de fichier, exécution de commandes, vérification de services, installation de packages, ...)
 +  * ces actions peuvent se faire manuellement en ligne de commande
 +  * ou être rassemblées dans des //​playbooks//​ relativement simple à mettre au point.
 +
 +Référence:​
 +  * http://​bitfieldconsulting.com/​puppet-tutorial
 +  * http://​docs.puppetlabs.com/​references/​latest/​type.html
 +
 +Objectifs: ​
 +  * automatiser les tâches de post-installation d'une machine (paquet supplémentaires,​ configuration,​ monitoring, etc...)
 +  * uniformiser la configuration des machines
 +
 +==== Les logiciels et la configuration indispensables ====
 +  * <​del>​authentification ldap</​del>​
 +  * <​del>​désactiver iptables</​del>​
 +  * <​del>​vim</​del>​
 +  * <​del>​sudo</​del>​
 +  * [[:​bash|bash]] + completion + alias + prompt en couleur
 +  * <​del>​nagios et monitoring de base</​del> ​
 +  * option [[:​noyau|noyau]] pour console [[:​kvm|kvm]]
 +  * postfix
 +  * <​del>​[[:​www:​etckeeper|etckeeper]]</​del>​
 +  *[[:​ntpdate| ]]
 +  * [[:ss|ssh]] et clé
 +  *[[:rsync| ]]
 +  * less
 +  * <​del>​screen</​del>​ [[:​tmux|tmux]]
 +  * <​del>​désactivation selinux</​del>​
 +  * activation sysrq
 +  * logs accessibles en groupe adm (y compris logrotate)
 +
 +**remarques:​**
 +
 +Certaines opérations nécessitent une intervention //​ailleurs//​ ou non automatisée:​
 +  * [[:​nagios|nagios]] - il faut rajouter un //host// dans la configuration du serveur
 +  * [[:​www:​etckeeper|etckeeper]] - il faut créer un répertoire associé à l'​hôte sur le dépôt central
 +  * [[:​bash|bash]] - il faut régler la couleur <​del>​manuellement</​del>​ (ou alors génération aléatoire ????)
 +
 +Dans l'​idéal,​ la configuration [[:ss|ssh]] (notamment le n° de port et la clé publique) devrait être réalisée via le script de post installation [[:​kickstart|kickstart]].
 +
 +Si [[:​www:​etckeeper|etckeeper]] est déjà installé, le déploiement peut être problématique s'il y a des modifications non commitées.
 +
 +==== Cas d'​utilisation ====
 +  * Déploiement d'une nouvelle vm
 +  * Reconfiguration d'un service ou d'un logiciel, propagation des modifications
 +
 +==== Installation ====
 +
 +yum | apt-get install[[:​ansible| ]]
 +
 +configuration:​ mettre //​host_key_checking//​ à FALSE dans /​etc/​ansible/​ansible.cfg
 +
 +=== Sur le client ===
 +
 +  * python-simplejson
 +  * libselinux-python si [[:​selinux|selinux]] est activé ou //"​permissive"//​
 +  * authentification [[:ss|ssh]] par clé
 +  * accès [[:ss|ssh]] en root ou [[:​sudo|sudo]] préconfiguré
 +
 +==== Playbooks ====
 +
 +<​code>​
 +  ---
 +- hosts: lenine
 +  user: root
 +
 +  tasks:
 +  - name: configure ldap authentication 1
 +    action: yum pkg=nss-pam-ldapd state=latest
 +  - name: configure ldap authentication 2
 +    action: command authconfig --update --enableshadow --enableldap --enableldapauth --ldapserver="​ldap://​lettrine.opendoor.fr"​ --ldapbasedn="​dc=opendoor,​dc=fr"​ --disableldaptls --enablecache --enablemkhomedir --enablelocauthorize
 +
 +  - name: ensure vim is installed with proper config
 +    action: yum pkg=vim state=latest
 +    action: copy src="/​etc/​ansible/​Srv/​vimrc"​ dest="/​etc/​vimrc"​ owner=root group=root mode=644
 +
 +</​code>​
 +
 +**attention** contrairement à ce que laisse croire l'​exemple ci-dessus, on ne peut avoir plusieurs action, seule la dernière est prise en compte.
 +
 +==== Exécuter rapidement une commande sur un ensemble de machine ====
 +<​code>​
 +ansible centos -a "yum update -y" -f 10 -vv --sudo --ask-sudo-pass
 +</​code>​
 +( la commande s'​exécute avec l'​identifiant du compte appelant)
 +
 +==== Auth sudo par clé ssh ====
 +
 +Pour utiliser ansible avec [[ssh_key_for_sudo_auth|l'​auth sudo par clé ssh]]
 +
 +Il faut modifier les options avec lesquelles sudo est appelé:
 +<​code>​
 +[defaults]
 +sudo_flags=-H -S
 +</​code>​
 +
 +Cela peut se faire par machine
 +
 +==== roles ====
 +
 +l'​idée est de partir de l'​objectif final, et de ne plus s'​attarder sur les tâches.
 +
 +=== sql ===
 +
 +  - installation
 +  - configuration
 +  - collectd-mysql
 +  - nagios-plugins-mysql
 +  - script de sauvegarde
 +  - outils percona
 +
 +Il faut créer une arborescence spécifiques:​ (https://​docs.ansible.com/​ansible/​playbooks_roles.html)
 +<​code>​
 +site.yml
 +webservers.yml
 +fooservers.yml
 +roles/
 +   ​common/​
 +     ​files/​
 +     ​templates/​
 +     ​tasks/​
 +     ​handlers/​
 +     vars/
 +     ​defaults/​
 +     meta/
 +   ​webservers/​
 +     ​files/​
 +     ​templates/​
 +     ​tasks/​
 +     ​handlers/​
 +     vars/
 +     ​defaults/​
 +     meta/
 +</​code>​
 +
 +Si dans l'un de ces répertoires un fichier main.yml existe, il sera interprété
 +
 +Il faut ensuite lier un (groupe de) host(s) à un rôle:
 +<​code>​
 +- hosts: webservers
 +  roles:
 +    - common
 +    - { role: foo_app_instance,​ dir: '/​opt/​a', ​ app_port: 5000 }
 +    - { role: foo_app_instance,​ dir: '/​opt/​b', ​ app_port: 5001 }
 +</​code>​
 +# vim: set filetype=dokuwiki:​
 +
 +==== debug ====
 +
 +ansible "SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh": il faut activer l'​option //​scp_if_ssh//​ dans la conf d'​ansible
 +
 +
 +
 +
 +==== Variables ====
 +
 +Obtenir la liste des variables disponibles:​
 +<​code>​
 +ansible host -m setup
 +</​code>​
 +
 +=== Information de version ===
 +  * "​ansible_os_family":​ "​RedHat"​
 +  * "​ansible_distribution":​ "​CentOS", ​
 +  * "​ansible_distribution_major_version":​ "​7", ​
 +  * "​ansible_distribution_release":​ "​Core", ​
 +  * "​ansible_distribution_version":​ "​7.3.1611", ​
 +
 +=== Utiliser une variable ===
 +
 +utiliser la syntaxe <​code>​ {{ variable_name }} </​code>​
 +
 +ça marche aussi dans une fichier template
 +
 +==== Bonne pratiques ====
 +
 +Utiliser les variables
 +
 +=== Être indépendant de l'OS ===
 +
 +Concerne en général le nom des paquets à installer, et éventuellement le déploiement de certains fichiers de configuration.
 +
 +1ère approche: conditionner l'​exécution d'une action en fonction d'une condition:
 +<​code>​
 +-- name: vim installation - CentOS
 +-  yum: name=vim-enhanced state=present
 +  when: ansible_distribution=='​CentOS'​
 +</​code>​
 +
 +2ème approche: Utiliser des variables
 +
 +Dans le fichier de tâches principal:
 +<​code>​
 +- name: Include OS specific vars
 +  tags: etckeeper
 +include_vars:​ "{{ ansible_os_family }}.yml"​
 +</​code>​
 +
 +Dans le répertoire //var// créer des fichiers Debian.yml, CentOS.yml, ...
 +<​code>​
 +---
 +etckeeper_package_list:​
 +- etckeeper
 +</​code>​
 +
 +
 +=== Vérifier certains préco ===
 +
 +Par exemple, vérification de la plateforme
 +
 +Dans le fichier // /​var/​main.yml//​ contrôler les plateformes supportées:​
 +<​code>​
 +etckeeper_supported_platforms:​
 +  - Debian
 +  - RedHat
 +</​code>​
 +
 +dans tasks/​main.yml:​
 +<​code>​
 +- name: Assert platform is supported
 +  tags: etckeeper
 +  assert:
 +    that:
 +    - ansible_os_family in etckeeper_supported_platforms
 +</​code>​
 +
  
ansible.txt · Dernière modification: 2018/06/11 12:18 (modification externe)