Afin de rendre la tâche idempotente, ajoutez une autre tâche pour vérifier d'abord les partitions non développées. Par exemple, si vous souhaitez que la partition racine fasse au moins 10 Go :
- name: Assert root partition is expanded
assert: { that: item.mount != '/' or item.size_total > 10737418240 } # 10 GB
with_items: '{{ ansible_mounts }}'
ignore_errors: yes
register: expanded
REMARQUE : Cette tâche échoue si la partition /
est inférieure à 10 Go.
Ensuite, rendez la tâche d'expansion conditionnelle à expanded|failed
:
- name: Expand partition
command: parted /dev/mmcblk0 resizepart 2 15.5GB # NOTE: Assumes 16GB card
when: expanded|failed
notify: Expand filesystem
Dans mon cas, j'étends la partition 2 sur le périphérique bloc /dev/mmcblk0
(pour le Raspberry Pi). Vous devez bien sûr remplacer par les noms d'appareils sur votre système.
Enfin, notify
déclenche l'expansion du système de fichiers :
handlers:
- name: Expand filesystem
command: resize2fs /dev/mmcblk0p2
Si vous regardez la source du module de système de fichiers tel qu'il se présente actuellement, vous pouvez voir qu'il ne semble y avoir rien que vous puissiez utiliser pour redimensionner un système de fichiers.
Heureusement, vous disposez d'options :le module de commande et le module shell.
Le module de commande est préféré au module shell car il n'est pas affecté par l'environnement utilisateur, je vais donc vous montrer comment le faire en utilisant l'approche :
- name: "resize my ext4 filesystem, please"
command: resize2fs /dev/sda1
sudo: True
où sda1
est votre système de fichiers. Si vous devez d'abord agrandir votre système de fichiers, utilisez la même approche, mais appelez fdisk
(avec les bons commutateurs de ligne de commande) à la place.
Vérifiez man resize2fs
pour les options spécifiques de cette commande et la documentation ansible pour plus d'informations, y compris le paramétrage de votre commande.
Je ne sais pas si cela pourrait aider. Mais depuis Ansible 2.0
il y a resizefs
option dans le filesystem
module qui est false
par défaut et qui prennent en charge ext4
.
Si oui, si le périphérique de bloc et la taille du système de fichiers diffèrent, développez le système de fichiers dans l'espace.Pris en charge pour les systèmes de fichiers ext2, ext3, ext4, ext4dev, f2fs, lvm, xfs, vfat, swap.
https://docs.ansible.com/ansible/latest/modules/filesystem_module.html
- name: 'Extend the FS'
filesystem:
fstype: 'ext4'
dev: '/dev/sda1'
resizefs: yes