- name: Create test
file:
path: /srv/test
state: directory
mode: 2770
owner: root
group: admin
Output of -v
{“changed”: true, “gid”: 6003, “group”: “admin”, “mode”: “05322”, “owner”: “root”, “path”: “/srv/test”, “size”: 4096, “state”: “directory”, “uid”: 0}
So the mode of 2770 somehow gets converted to 05322
So any mode with SetGID, SetUID or SetSticky, gets mangled.
Tried in 1.6 and 1.7
1770 → 03352
2770 → 05322
4770 → 01242
I should convert the end permissions to octal and see if there is a pattern. Will do later. Just want to post this for now and see if someone knows anything about this.
Thanks
Deon
There’s no leading “0” on your mode number 2770. In Perl, the run-time parses numbers as decimal unless they have certain hint prefixes, like “0x” for hexadecimal and “0” for octal.
I don’t know how Python parses numbers, but 2770 decimal = 5322 octal, so it looks like that may be the source of the confusion. The ansible.com docs for the file module don’t address this explicitly, but both the examples have a leading “0” in the mode number. It looks to me like a mode number of “02770” is what you need.
-Greg
Ansible contains some fuzzy logic for this.
Basically, if the number is a string, it will assume octal.
If you pass in a decimal, as you have done above, it will assume you know what you are doing. (Most people use short-form arguments in Ansible, here you’ve split to another line and passed a decimal - which is fine).
So yes, this would be it.
Alternatively, this would also fit:
mode: “777”
Thank you Greg and Michael.
That was the whole solution to the problem.