web-dev-qa-db-ja.com

Ansible:ディレクトリとファイルのパーミッションを再帰的に設定する方法

当然のことながら、私はこれを行うことができます。

file: dest=/foo/bar/somedir owner=root group=Apache mode=0775 recurse=yes

そして、そのパス内のすべてのディレクトリとファイルの所有者、グループ、およびアクセス権を再帰的に0775に設定します。しかし、私はディレクトリを0775に、ファイルを0664に設定したいと思います。これを実行可能にする方法はありますか?

48
file: dest=/foo/bar/somedir owner=root group=Apache mode=u=rwX,g=rX,o=rX recurse=yes

ディレクトリを755に、ファイルを644に設定します。

29
Adam Chance

Ansibleファイル/コピーモジュールでは、ファイルの種類に基づいてアクセス許可を指定する細分性が得​​られないため、次のような方法で手動でこれを行う必要があります。

- name: Ensure directories are 0755
  command: find {{ path }} -type d -exec chmod 0755 {} \;

- name: Ensure files are 0644
  command: find {{ path }} -type f -exec chmod 0644 {} \;

これらは{{ path }}を通して再帰し、すべてのファイルまたはディレクトリの権限を指定された権限に変更する効果があります。

出典: https://stackoverflow.com/a/28782805/1306186

21
Zulakis

あなたがモジュールファイルをansibleで使用したい場合は、次のことができます。

file:dest =/foo/bar/somedir owner =ルートグループ= Apacheモード= 0644 recurse = yes

file:dest =/foo/bar/somedir owner =ルートグループ= Apacheモード= 0775

この方法では、最初にすべてのファイル(recurse = yes)を '644'に設定し、次に/ foo/bar/somedirを '775'に設定します。

プレイブックを再生するたびにディレクトリのアクセス権が変わるため、これは完璧ではありません。しかし、少なくともそれはべき乗であり、moduleコマンドとは異なります。

あなたが '変更された'ステータスを持ちたくない場合は、モジュールstatを使うことができます。/foo/bar/somedirにあるすべてのファイルとディレクトリを一覧表示するので、回答を登録してからそれらのファイルのみをループします。

8
gmangin

ディレクトリを0775(rwxrwxr-x)に、ファイルを0644(rw-r--r--)に設定することがどれほど意味があるのか​​わかりません。

ファイルが0664(rw-rw-r--)に設定されていて、ディレクトリがトラバース可能である間にファイルが実行不可能であることを確実にするためには、chmodコマンドを1つだけ含む洗練された解決策があります。

chmod -c -R ug=rw,o=r,a-x+X "{{top_dir}}"

これがAnsibleでどのように使われることができるかです:

- name: recursive chmod example
  command: |
    chmod -c -R ug=rw,o=r,a-x+X "{{item}}"
  register: chmod_status
  changed_when: chmod_status.stdout != ""
  with_items:
    - "/home/user/sample/dir"

chmod -cは、Ansibleに「変更された」ステータスを設定するために便利に使用できるすべての変更を出力します。私はそれが理にかなっていると思います。

5
Onlyjob

必要なときだけmodを変更するには:

- name: make dirs 0755   
  command: find {{ your_path }} -type d ! -perm 0755 -exec chmod 0755 {} \;

- name: make files 0644   
  command: find {{ your_path }} -type f ! -perm 0644 -exec chmod 0644 {} \;
3
sjas