Cuando necesitamos montar una imagen iso, también conocida como «iso9660» (CD o DVD) con ansible dependiendo de la distribución deberemos configurar la «task» de una forma u otra.
En este caso necesitaba actualizar más de 100 equipos (Ubuntu y CentOs) con la última versión de XenTools (que viene en una iso con un script y paquetes para diferentes distribuciones). Para automatizar la tarea utilicé Ansible con el módulo mount. Después de crear la task en el playbook este se ejecutó sin problemas en los equipos Ubuntu:
- name: Mount iso de xen tools mount: path: /mnt/xentools src: /tmp/xentools7-4.iso opts: ro fstype: iso9660 state: mounted
Sin embargo al ejecutarlo en equipos CentOs retorna un error:
"path": "/mnt/xentools", "src": "/tmp/xentools7-4.iso", "state": "mounted" } }, "msg": "Error mounting /mnt/xentools: mount: /tmp/xentools7-4.iso is not a block device (maybe try `-o loop'?)\n"
Entonces agregamos la opción loop:
- name: Mount iso de xen tools mount: path: /mnt/xentools src: /tmp/xentools7-4.iso opts: ro,loop fstype: iso9660 state: mounted
¡Y al ejecutar el playbook todo funciona! La iso se montó sin problemas y veo que el parámetro fue pasado por ansible correctamente:
changed: [ONEOFTHESERVERS12] => { "changed": true, "dump": "0", "fstab": "/etc/fstab", "fstype": "iso9660", "invocation": { "module_args": { "boot": "yes", "dump": null, "fstab": null, "fstype": "iso9660", "name": "/mnt/xentools", "opts": "ro,loop=", "passno": null, "path": "/mnt/xentools", "src": "/tmp/xentools7-4.iso", "state": "mounted" } }, "path": "/mnt/xentools", "opts": "ro,loop=", "passno": "0", "src": "/tmp/xentools7-4.iso" }