当然のことながら、私はこれを行うことができます。
file: dest=/foo/bar/somedir owner=root group=Apache mode=0775 recurse=yes
そして、そのパス内のすべてのディレクトリとファイルの所有者、グループ、およびアクセス権を再帰的に0775に設定します。しかし、私はディレクトリを0775に、ファイルを0664に設定したいと思います。これを実行可能にする方法はありますか?
file: dest=/foo/bar/somedir owner=root group=Apache mode=u=rwX,g=rX,o=rX recurse=yes
ディレクトリを755に、ファイルを644に設定します。
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 }}
を通して再帰し、すべてのファイルまたはディレクトリの権限を指定された権限に変更する効果があります。
あなたがモジュールファイルを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にあるすべてのファイルとディレクトリを一覧表示するので、回答を登録してからそれらのファイルのみをループします。
ディレクトリを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に「変更された」ステータスを設定するために便利に使用できるすべての変更を出力します。私はそれが理にかなっていると思います。
必要なときだけ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 {} \;