gluster_volume module

Greetings, Ansiblites!

I’m attempting to write a role that uses the gluster_volume module. All is well right up until I try to specify an ‘options’ parameter. According to the documentation, I’m to use “a dictionary/hash with options/settings for the volume”. The example given is as follows:

gluster_volume: state=present name=test1 options=‘{performance.cache-size: 256MB}’

I’ve matched that syntax in my playbook, and all I get is a complaint from Ansible about quoting. I’ve tried just about every variation of quoting I can think of: single, double, double-double, escaped, etc… The closest I (think) have gotten is by specifying the options as a variable, then single-quoting the expansion:

file: group_vars/gluster_hosts


options: { group: virt, storage.owner_uid: 36, storage.owner_gui: 36 }

file: roles/gluster/tasks/main.yml


gluster_volume: name={{ name }} options=‘{{ options }}’ state=present

Even then, the result is:

msg: unable to evaluate dictionary for options

Can anyone shed some light on this? I’m at my wit’s end.

Well, apparently I hadn’t tried everything yet. I was able to get a successful run by including the options parameter in the creation task, rather than keeping them separate. I also had to double-quote the expansion in my playbook, and single-quote the integers in my variable dictionary:

file: group_vars/gluster_hosts


options: { group: virt, storage.owner-uid: ‘36’, storage.owner-gid: ‘36’ }

(Note the corrections to owner-uid and owner-gid.)

file: roles/gluster/tasks/main.yml

  • name: Create gluster volumes
    sudo: true
    gluster_volume:
    name={{ item.name }}
    brick=“{% for brick in item.bricks %}{{ brick.mount }}/{{ item.name }}{% if not loop.last %},{% endif %}{% endfor %}”
    cluster=“{{ groups.gluster_hosts|join(‘,’) }}”
    options=“{{ item.options }}”
    state=present
    with_items: gluster_volumes
    tags: gluster

Seems like there’s a bug in the module, and the documentation is definitely incorrect. I’ll experiment more and see if I can offer a fix.

Thank you for sharing this information, I had come across the exact same problem - use case: gluster storage backends for oVirt clusters.

My role includes the following:

  • name: Gluster volume exists - {{gvol_name}}
    gluster_volume: >
    state=present
    name={{gvol_name}}
    brick={{gvol_brick}}
    options=“{ group: virt, storage.owner-uid: ‘36’, storage.owner-gid: ‘36’ }”

Unfortunately, that syntax still fails with msg: unable to evaluate dictionary for options.

Do you have any tips on the fix or are you able to send a working role/playbook that I can use as an example?

Either way, I appreciate you posting your fault and some success online! :slight_smile:

Michael,
Here is an example that I did some time ago using Ansible to setup GlusterFS. It may help you out.
http://everythingshouldbevirtual.com/ansible-playbook-glusterfs-apache

And also here is a role for GlusterFS that I put out on GitHub.
https://github.com/mrlesmithjr/Ansible/tree/master/roles/glusterfs

Maybe this will get you going in the right direction.

I’m afraid I can’t offer much in the way of advice, Chris. I decided not to continue my oVirt/GlusterFS experiment, and deleted the roles & playbooks I had written. Your syntax certainly seems to match what worked for me. You might want to try it without “folding-style” (>), though. Knowing how cranky the gluster_volume module is about formatting, I wouldn’t be surprised if that’s causing a problem.

Sorry I can’t be of more assistance. Good luck! Let us know when you get it sorted.

Just for the record, removing quotes from your example like this:

options={ group: virt, storage.owner-uid: ‘36’, storage.owner-gid: ‘36’ }

works for me on 1.9.4.