ansible centos

Ansible is free software that allows the deployment and the automation of administration tasks on multiple remote servers at the same time, regardless of their operating system. What is interesting with Ansible, no need to install an agent on the servers, only the deployment of the public key of Ansible server is necessary, because the connections are via ssh.

Installation of Ansible on Debian 9

Nothing very complicated for the installation of Ansible on Debian, because the package is available in the repositories in version 2.2 under Stretch.

apt install ansible

Configuring Ansible

The Ansible configuration files are located in the / etc / ansible directory.

In this article, I would not go into the details of the ansible.cfg configuration file, it will be a subject of a future article.

The first filled file is / etc / ansible / hosts. In this file will be all the servers that will be managed by Ansible. In this file, it is possible to create groups of hosts, which facilitates multiple management.

Several ways to inform the hosts managed by Ansible, either fill in the IP addresses, the FQDN or a hostname. If the choice is the hostname, it must be known from the system, so it will also inform the / etc / hosts file.

 

  • Example of the filled file :
    nano /etc/ansible/hosts
  • Creating server groups

Generation of private / public keys on the Ansible server:

ssh-keygen

 

  • Copy the public key to the target servers :

 

ssh-copy-id -i ~/.ssh/id_rsa.pub root@serveur-cible

From now on, Ansible is ready to perform actions on target servers.

Mes premiers test avec Ansible

    • ping test on the poller-center group :
ansible -m ping poller-centreon --one-line

    • Iinstallation of the debian-goodies package on my Proxmox of the pve_v5 group
ansible -m apt -a 'name=debian-goodies' pve_v5

Playbooks

In the previous example, only the ping command was executed. If you want to run a command or script set, you have to go through playbooks. These playbooks are in format YAML. Playbboks can be placed in a subdirectory, which was not created during the installation of Ansible.

    • Creating a subdirectory for playbooks :
mkdir /etc/ansible/playbooks
  • Creating a playbooks :
    nano  /etc/ansible/playbooks/mon_premier_playbooks.yml
  • To resume an example of ping :
    - hosts: all
      tasks:
        - action: ping
    

Exécution du playbook :

ansible-playbook  /etc/ansible/playbooks/mon_premier_playbooks.yml

Example of a playbook a little more complex, dedicated to the update of my pollen Centreon :

- hosts: poller-center
  tasks:
    - name: centengine engine version
      shell: centengine -V | awk '{print $ 5}' | head -n 1
      register: release

    - name: Update packages
      yum: name = * state = latest

    - name: Checking the Centengine version after update
      shell: centengine -V | awk '{print $ 5}' | head -n 1
      register: new_release

    - name: Display of the Centengine version
      debug: msg = "Centengine version {{new_release.stdout_lines}}"

    - name: Notification of the upgrade of the Centengine version
      debug: msg = "PVE changed version {{release.stdout}} to {{new_release.stdout}}"
      when: release.stdout! = new_release.stdout

    - name: verification of services to restart
      shell: needs-restarting | awk '{print $ 3}'
      register: services

    - name: List of services to restart
      debug: msg = "{{services.stdout_lines | count}} services to restart ({{services.stdout_lines | join (',')}})"

Running a playbook:

ansible-playbook monplaybook.yml

This playbook will only run on servers that are members of the poller-center group. Namely, the operating system of my poller is CentOS.