Outils pour utilisateurs

Outils du site


ansible

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:

  1. dans /etc/ansible/hosts, rajouter une entrée dans [bootstrap] sans oublier le port :22
  2. lancer
ansible-playbook  /etc/ansible/Playbooks/0bootstrap.yml  --ask-pass
  1. 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 ssh pour communiquer avec les clients.
  • Ces derniers sont rassemblés dans un fichier hosts et peuvent constituer des groupes
  • les actions réalisables sur les 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:

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

  • authentification ldap
  • désactiver iptables
  • vim
  • sudo
  • bash + completion + alias + prompt en couleur
  • nagios et monitoring de base
  • option noyau pour console kvm
  • postfix
  • ssh et clé
  • less
  • screen tmux
  • désactivation selinux
  • activation sysrq
  • logs accessibles en groupe adm (y compris logrotate)

remarques:

Certaines opérations nécessitent une intervention ailleurs ou non automatisée:

  • nagios - il faut rajouter un host dans la configuration du serveur
  • etckeeper - il faut créer un répertoire associé à l'hôte sur le dépôt central
  • bash - il faut régler la couleur manuellement (ou alors génération aléatoire ????)

Dans l'idéal, la configuration ssh (notamment le n° de port et la clé publique) devrait être réalisée via le script de post installation kickstart.

Si 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 installansible

configuration: mettre host_key_checking à FALSE dans /etc/ansible/ansible.cfg

Sur le client

  • python-simplejson
  • libselinux-python si selinux est activé ou “permissive”
  • authentification ssh par clé
  • accès ssh en root ou sudo préconfiguré

Playbooks

  ---
- 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

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

ansible centos -a "yum update -y" -f 10 -vv --sudo --ask-sudo-pass

( la commande s'exécute avec l'identifiant du compte appelant)

Auth sudo par clé ssh

Pour utiliser ansible avec l'auth sudo par clé ssh

Il faut modifier les options avec lesquelles sudo est appelé:

[defaults]
sudo_flags=-H -S

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

  1. installation
  2. configuration
  3. collectd-mysql
  4. nagios-plugins-mysql
  5. script de sauvegarde
  6. outils percona

Il faut créer une arborescence spécifiques: (https://docs.ansible.com/ansible/playbooks_roles.html)

site.yml
webservers.yml
fooservers.yml
roles/
   common/
     files/
     templates/
     tasks/
     handlers/
     vars/
     defaults/
     meta/
   webservers/
     files/
     templates/
     tasks/
     handlers/
     vars/
     defaults/
     meta/

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:

- hosts: webservers
  roles:
    - common
    - { role: foo_app_instance, dir: '/opt/a',  app_port: 5000 }
    - { role: foo_app_instance, dir: '/opt/b',  app_port: 5001 }

# 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:

ansible host -m setup

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

 {{ variable_name }} 

ç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:

-- name: vim installation - CentOS
-  yum: name=vim-enhanced state=present
  when: ansible_distribution=='CentOS'

2ème approche: Utiliser des variables

Dans le fichier de tâches principal:

- name: Include OS specific vars
  tags: etckeeper
include_vars: "{{ ansible_os_family }}.yml"

Dans le répertoire var créer des fichiers Debian.yml, CentOS.yml, …

---
etckeeper_package_list:
- etckeeper

Vérifier certains préco

Par exemple, vérification de la plateforme

Dans le fichier /var/main.yml contrôler les plateformes supportées:

etckeeper_supported_platforms:
  - Debian
  - RedHat

dans tasks/main.yml:

- name: Assert platform is supported
  tags: etckeeper
  assert:
    that:
    - ansible_os_family in etckeeper_supported_platforms
ansible.txt · Dernière modification: 2018/06/11 12:18 (modification externe)