ansible.builtin.fileのmodeパラメータは頭に0が必要

· 1 min read
ansible.builtin.fileのmodeパラメータは頭に0が必要

多分ほとんどのケースでは気にすることもなく0755とか0644とか書くと思うんですが、特殊な属性を付ける必要があるときに困るよ、という話。

世の中にはSUIDとかSGIDとかスティッキービットとかいう、特殊な属性がありまして、例えば基本のファイルパーミッションが0755でSUIDを指定したいという場合はchmodで言うとchmod 4755 path/to/fileといった感じになるんですけれども、ansible.builtin.fileのmodeパラメータでは以下の様に書くとパーサが10進数として解釈して訳の分からんことになってしまいます。

ansible.builtin.file:
  path: path/to/file
  mode: 4755

これはこう書く必要があります:

ansible.builtin.file:
  path: path/to/file
  mode: 04755

もしくはこう:

ansible.builtin.file:
  path: path/to/file
  mode: '4755'

これは例えば、結構古いAnsible playbookなんかで、

file: path=path/to/file mode=4755

とか書いていたやつを書き直したりしたときに注意が必要です。

まぁ、公式ドキュメントに書いてあるんですけど、そうは言ってもみんなそんなに細かいところまで読んでないでしょ、という。

You must either add a leading zero so that Ansible's YAML parser knows it is an octal number (like 0644 or 01777) or quote it (like '644' or '1777') so Ansible receives a string and can do its own conversion from string into number.