他のタスクを実行する前に、ディレクトリがマウントポイントであるかどうかを確認する必要があります。
私はドキュメントを見回してきましたが、マウントポイントを作成/破棄できるのは、マウントポイントが存在するかどうかを確認するだけではないようです。以下のリンクから。
http://docs.ansible.com/ansible/mount_module.html
それがansibleで存在することを確認する方法があるのか、それともansibleから呼び出される他の言語である必要があるのか疑問に思います。
mount
モジュールとstat
モジュールの両方を試してみました。どちらも要件を満たしていませんでした。
OSコマンドのみを使用して作業することができました。 Redhat、Debian、SLESファミリでテストしました。
vars:
- myvolume: /backup
tasks:
- command: mountpoint -q {{myvolume}}
register: volume_stat
failed_when: False
changed_when: False
- debug:
msg: "This is a mountpoint!"
when: volume_stat.rc == 0
問題は、パスがマウントポイントでない場合、mountpoint
コマンドがstderrを生成するため、ignore_errors
を使用する必要があることです。これは、適切な解決策ではありません。
EDIT 1:@ udondanによって言及されていますが、エラーを出力しないため、failed_when
はignore_errors
よりも優れたアプローチです。
パスがマウントポイントでない場合にプレイブックを停止する必要がある場合は、これが必要な場合があります。
誰かがこれよりも良い解決策を見つけてくれることを願っています。
[〜#〜] note [〜#〜]:Darwin(Mac OSX)とSunOS(Oracle)を知っている限り、mountpoint
コマンドがないプラットフォームがいくつかあります。 Solaris)、これらのシステムでこれを機能させる必要がある場合は、別の回避策を見つける必要があります。
しばらく試してみて、これを思いついた。
vars:
- myvolume: /backup
tasks:
- debug: msg="The dir is a mount point"
with_items: ansible_mounts
when: item.mount == myvolume
これがすべてのシステムにどのように適用されるか、および/またはansible_mounts
には、OSのすべてのマウントポイント、またはansibleで作成されたマウントポイントのみが含まれます。
同様の問題がありますが、次のようなことを試してください-
- name: testing for required mount points
fail:
msg: "{{ item }} must be a mount point"
when: not item|is_mount
with_items:
- /path/to/test
マウントポイントのsizeを確実に取得する方法がわかれば、笑
ところで、{{ ansible_mounts }}
のようなデフォルトの事実を見る価値はありますが、私の/ dev/shmはそこに表示されていません-理由はまだわかりません。 警告スクリプター、ymmv。
Ansibleの「コマンド」モジュールの「stdout」を使用して、特定のディレクトリのマウントステータスを確認できます。サンプルコードは次の場所に貼り付けられています。
- name: "check mount point {{ mount_dir }}"
command: mountpoint {{ mount_dir }}
register: mount_stat
failed_when: False
changed_when: False
- name: "debug"
when: mount_stat.stdout == "{{ mount_dir }} is a mountpoint"
debug:
msg: "{{ mount_dir }} is a mountpoint"
- name: "debug"
when: mount_stat.stdout == "{{ mount_dir }} is not a mountpoint"
debug:
msg: "{{ mount_dir }} is not a mountpoint"
多少複雑ですが、追加のコマンドを実行せずに、ansible_mounts
ファクトを使用してこれを確認できます。
- debug:
msg: "{{ mount_point }} is mounted"
when: ansible_mounts | selectattr('mount', 'equalto', mount_point) | list | length > 0
- debug:
msg: "{{ mount_point }} is not mounted"
when: ansible_mounts | selectattr('mount', 'equalto', mount_point) | list | length == 0
ここで、mount_point
はチェックするディレクトリパスです。
Ansibleファクトは自動的に更新されないため、再生中にディレクトリをマウントまたはアンマウントすると、セットアップモジュールを再実行して更新しない限り、結果は古くなります。
- name: Gather facts again to update mount points
setup: