Resources attached to the Road To DevOps tutorial
https://blog.noobtoroot.xyz/road-to-devops/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
7.8 KiB
7.8 KiB
TP Ansible
Les commandes ad-hoc
Exécuter rapidement des commandes simples.
Execution de commandes à l'aide de modules
$ ansible <host-pattern> -m <module> [-a <params>]
-
-m
nom du module -
-a <params>
paramètres du module (optionnel) -
Exécuter sur toutes les machines la commande
uname -a
via le modulecommand
.
$ ansible all -i inventories/formation/hosts -m command -a "uname -a"
ansible-3 | SUCCESS | rc=0 >>
Linux ansible-3 4.9.0-8-amd64 #1 SMP Debian
4.9.110-3+deb9u4 (2018-08-21) x86_64 GNU/Linux
ansible-2 | SUCCESS | rc=0 >>
Linux ansible-2 3.10.0-862.11.6.el7.x86_64 #1
SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ansible-1 | SUCCESS | rc=0 >>
Linux ansible-1 3.10.0-862.11.6.el7.x86_64 #1
SMP Tue Aug 14 21:49:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
-
Copier le fichier
/etc/passwd
de la machine maître à l'emplacement~/passwd
sur les machinescentos
en utilisant le modulecopy
. -
Vérifier la présence du fichier à l'aide du module
command
. -
Copie du fichier :
$ ansible centos -i inventories/formation/hosts -m copy \
-a "src=/etc/passwd dest=~/passwd"
ansible-2 | SUCCESS => {
"changed": true,
"checksum": "1e9317514c0769f49ec9439f9811675ac19d89ee",
"dest": "/home/ansible/passwd",
"gid": 1001,
"group": "ansible",
"md5sum": "b8bbe17a63c7bb500c89dc5e29351fc5",
"mode": "0664",
"owner": "ansible",
"size": 1574,
"src": "/home/ansible/.ansible/tmp/ansible-tmp-1537539186.68-18012403191...",
"state": "file",
"uid": 1001
}
ansible-1 | SUCCESS => {
"changed": true,
"checksum": "1e9317514c0769f49ec9439f9811675ac19d89ee",
"dest": "/home/ansible/passwd",
"gid": 1001,
"group": "ansible",
"md5sum": "b8bbe17a63c7bb500c89dc5e29351fc5",
"mode": "0664",
"owner": "ansible",
"size": 1574,
"src": "/home/ansible/.ansible/tmp/ansible-tmp-1537539186.66-20188089735...",
"state": "file",
"uid": 1001
}
- Vérification à l'aide du module
command
:
$ ansible centos7 -i inventories/formation/hosts -m command \
-a "ls -l ~"
ansible-2 | SUCCESS | rc=0 >>
total 4
-rw-rw-r-- 1 ansible ansible 1574 21 sept. 16:13 passwd
ansible-1 | SUCCESS | rc=0 >>
total 4
-rw-rw-r-- 1 ansible ansible 1574 21 sept. 16:13 passwd
Variables dans l'inventaire
inventories/formation/hosts
$ cat inventories/formation/hosts
ansible-1 ansible_host=192.168.56.102
ansible-2 ansible_host=192.168.56.103
ansible-3 ansible_host=192.168.56.104 tata=tutu # variable
# de machine
[centos7]
ansible-1
ansible-2
[debian9]
ansible-3
[centos7:vars] # variable
titi=toto # de groupe
[all:vars]
ansible_become=yes
ansible_become_pass=ansible
$ ansible-inventory -i inventories/formation/hosts --list --yaml
all:
children:
centos7:
hosts:
ansible-1:
ansible_become: 'yes'
ansible_become_pass: ansible
ansible_host: 192.168.56.102
titi: toto
ansible-2:
ansible_become: 'yes'
ansible_become_pass: ansible
ansible_host: 192.168.56.103
titi: toto
debian9:
hosts:
ansible-3:
ansible_become: 'yes'
ansible_become_pass: ansible
ansible_host: 192.168.56.104
tata: tutu
ungrouped: {}
Obtenir les droits root
- Essayer de créer sur chaque machine un fichier dans le homedir de l'utilisateur
root
.
$ ansible all -i inventories/formation/hosts -m command -a "touch /root/pas-le-droit"
ansible-3 | FAILED | rc=1 >>
touch: impossible de faire un touch '/root/pas-le-droit':
Permission non accordéenon-zero return code
ansible-2 | FAILED | rc=1 >>
touch: impossible de faire un touch « /root/pas-le-droit »:
Permission non accordéenon-zero return code
ansible-1 | FAILED | rc=1 >>
touch: impossible de faire un touch « /root/pas-le-droit »:
Permission non accordéenon-zero return code
- Ajouter des variables
ansible_become
dans l'inventaire pour permettre l'exécution viasudo
ousu
.
...
# Par défaut sudo est utilisé, il faut donc que
# l'utilisateur soit déclaré dans les sudoers
[all:vars]
ansible_become=yes
ansible_become_pass=ansible
-
Essayer de nouveau de créer sur chaque machine un fichier dans le homedir de l'utilisateur
root
. -
Vérifier la bonne création du fichier à l'aide de la commande
ls
.
$ ansible all -i inventories/formation/hosts -m command -a "touch /root/fichier"
ansible-3 | SUCCESS | rc=0 >>
ansible-2 | SUCCESS | rc=0 >>
ansible-1 | SUCCESS | rc=0 >>
$ ansible all -i inventories/formation/hosts -m command -a "ls -l /root/fichier"
ansible-3 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 0 sept. 20 16:20 /root/fichier
ansible-2 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 0 20 sept. 16:20 /root/fichier
ansible-1 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 0 20 sept. 16:20 /root/fichier
Récupérer des informations sur les machines
- Utiliser le module
setup
pour lister les "facts" de chaque machine.
$ ansible all -i inventories/formation/hosts -m setup
ansible-3 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"10.0.2.15",
"192.168.56.5"
],
"ansible_all_ipv6_addresses": [
"fe80::a00:27ff:fe51:f40c",
"fe80::a00:27ff:fe38:cf21"
],
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "12/01/2006",
"ansible_bios_version": "VirtualBox",
"ansible_cmdline": {
"BOOT_IMAGE": "/boot/vmlinuz-4.9.0-8-amd64",
- Appliquer un filtre pour n'afficher que
les adresses IP v4 de chaque machine
en ajoutant l'option-a 'filter=<field>'
.
$ ansible all -i inventories/formation/hosts -m setup \
-a 'filter=ansible_all_ipv4_addresses' --one-line
ansible-3 | SUCCESS => {"ansible_facts": {"ansible_all_ipv4_addresses":
["10.0.2.15", "192.168.56.104"]}, "changed": false}
ansible-2 | SUCCESS => {"ansible_facts": {"ansible_all_ipv4_addresses":
["192.168.56.103", "10.0.2.15"]}, "changed": false}
ansible-1 | SUCCESS => {"ansible_facts": {"ansible_all_ipv4_addresses":
["192.168.56.102", "10.0.2.15"]}, "changed": false}
- Appliquer un filtre pour n'afficher que la famille d'OS.
$ ansible all -i inventories/formation/hosts -m setup \
-a 'filter=ansible_os_family' --one-line
ansible-3 | SUCCESS => {"ansible_facts": {"ansible_os_family":
"Debian"}, "changed": false}
ansible-1 | SUCCESS => {"ansible_facts": {"ansible_os_family":
"RedHat"}, "changed": false}
ansible-2 | SUCCESS => {"ansible_facts": {"ansible_os_family":
"RedHat"}, "changed": false}