Ansible permet d’automatiser des déploiements de configurations, d’applications.
Ansible utilise le protocole ssh pour le déploiement.
Ansible fonctionne avec des inventaires, des roles et des playbooks.
Lancer Ansible
ansible -i inventory.inv all -m shell -a "uptime"
Vault
ansible-vault encrypt_string file_encrypted.yml --name name_variable
Playbook
--extra-vars "variable=true"
Tasks and pre tasks
- hosts: nodes
serial: 1
tasks:
- import_role:
name: role_name
tasks_from: "role1"
tasks:
- include_role:
name: role_name
tasks_from: role1
pre_tasks:
- name: Execute a script
local_action: script /path/script.bash {{ ansible_hostname }}
register: result
changed_when: True
Exemple
hosts: all
become: yes
serial: "{{ serial_number|default(1) }}"
vars:
- var1: xxxx
- var2: False
roles:
- role1
Role
Conditions
"{{ item.verify | d('yes') }}"
"{{ item.mode | default(omit) }}"
name: Check
stat:
path: "{{ file }}"
register: result
name: Do
file:
path: "{{ file }}"
state: absent
when: not result.stat.exists
Gestion des erreurs
ignore_errors: yes
Variables
roles/xxxx/defaults/main.yml
machine_file: /etc/xxxx
machine_file2: "{{ '/etc/%s/'|format(machine_file)|realpath }}"
machine_file3: "/etc/{{ ansible_hostname }}/"
machine_file4: "{{ machine_file|truncate(5) }}"
machine_file5: "{{ machine_file|replace('/', '?') }}"
repository:
- name: reponame
description: repository xxxx
baseurl: https://xxxx/pub/xxxxx
gpgcheck: yes
sslverify: yes
variable:
- name: name1
- name: name2
yum_repository:
name: "{{ item.name }}"
description: "{{ item.description }}"
baseurl: "{{ item.baseurl }}"
enabled: yes
sslverify: "{{ item.sslverify }}"
gpgcheck: "{{ item.gpgcheck }}"
with_items:
- "{{ repository }}"
yum_repository:
name: "{{ item.name }}"
file: xxxx
state: absent
with_items:
- "{{ variable }}"
Handlers
roles/xxxx/handlers/main.yml
- name: restart
systemd:
name: xxxx
state: restarted
listen: "restart xxxx"
tasks:
- name: restart xxxx
shell: ""
notify: "restart xxxx"
Copie
- name: hostname
copy:
content: "{{ inventory_hostname }}"
dest: /etc/hostname
URL
- name: url
uri:
url: http://192.168.1.1:123/status/status
register: status
- debug:
msg:
- "status: {{ status.json.status }}"
- name: version
uri:
url: http://192.168.1.1:123/
return_content: true
register: version
- debug:
msg:
- "version: {{ version.content }}"
Tags
ansible-playbook playbook.yml --list-tags
Inventaire
inventory
group_vars
host_vars
Ansible galaxy
ansible-galaxy install --force --role-file roles/requirements.yml --roles-path roles/
ansible-galaxy init
roles/xxxx/meta/main.yml
galaxy_info:
description: rolexxxxx
platforms:
- name: EL
versions:
- 8