私はAnsibleスクリプトのEBSロールを作成しようとしています。私はEBSボリュームを作成して、今はコンソール経由でそれを自分自身に付けるつもりです。私はこの役割がコマンドを実行し、ドライブがまだマウントされていない場合はドライブをマウントし、マウントされている場合はこれをスキップします。不可能 - ドライブがマウントされているかどうかを確認してください
私は、ディスクのリストを与え、マウントポイントを特定VARSをホストしている:
ebs_vols:
- drive: /dev/sdb
mount_point: /mnt/ebs1
directory: /var/lib/mysql
- drive: /dev/sdc
mount_point: /mnt/ebs2
directory: /var/backups
は、私は私の仕事はdf
コマンドを使用して各ドライブをチェックし、それがマウントされていますかどうかを確認したいです。ドライブがマウントされている場合は、コマンドをスキップ:私はそれを実行すると
- name: Check if drives are already mounted
shell: df | grep "{{item.drive}}" | wc -l
with_items: "{{ebs_vols}}"
register: ebs_checked
- name: output debug
debug: var=ebs_checked
- name: Make filesystem
filesystem:
fstype: xfs
dev: "{{item.item.drive}}"
when: "{{item.stdout}} == 0"
with_items: ebs_checked.results
は、debug
の出力が正しいドライブとstdoutを持つオブジェクトですので、うまく各ディスクをチェックしているようです。問題はMake filesystem
タスクにあります。次のエラーでエラーアウト:
The conditional check '{{item.stdout}} == 0' failed. The error was: error while evaluating conditional ({{item.stdout}} == 0): 'ansible.vars.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'stdout'\n\n
は、私はここに行方不明ですし、ドライブがすでにマウントされている場合、コマンドをスキップするための最良の方法は何ですか?
ああ、そうです。ルーキーミス。私はAnipalには新しく、実際にそれを実行しようとするのではなく、何らかの構文エラーが予想されていたと思います。ありがとう! – gkrizek
構文エラーはありません。 'item'には' ebs_checked.results'の文字列値が割り当てられ、使用しようとした 'stdout'キーが含まれていないというエラーが発生しました。 – techraf
'with_'ループでのこのベア変数の使用は、Anipal 2.0では廃止され、2.2では削除されました。 - [Anipal 2.0 porting guide](https://docs.ansible.com/ansible/porting_guide_2.0.html#deprecated )。 – RichVel