2017-02-20 13 views
0

私は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

は、私はここに行方不明ですし、ドライブがすでにマウントされている場合、コマンドをスキップするための最良の方法は何ですか?

答えて

3

「裸の変数」は、もうAnsibleでは使用できません。次の行はAnsibleを文字列としてebs_checked.results値を解釈するために発生します

with_items: ebs_checked.results 

ではなく、正しい構文を使用します。

with_items: "{{ ebs_checked.results }}" 
+0

ああ、そうです。ルーキーミス。私はAnipalには新しく、実際にそれを実行しようとするのではなく、何らかの構文エラーが予想されていたと思います。ありがとう! – gkrizek

+0

構文エラーはありません。 'item'には' ebs_checked.results'の文字列値が割り当てられ、使用しようとした 'stdout'キーが含まれていないというエラーが発生しました。 – techraf

+0

'with_'ループでのこのベア変数の使用は、Anipal 2.0では廃止され、2.2では削除されました。 - [Anipal 2.0 porting guide](https://docs.ansible.com/ansible/porting_guide_2.0.html#deprecated )。 – RichVel

0

をあなたが試してみたいことがあります。ansibleさん、

- name: Check if drives are already mounted 
    command: '/bin/mountpoint -q {{item.directory}}' 
    with_items: '{{ebs_vols}}' 
    register: ebs_checked 
    changed_when: "ebs_checked.rc != 0" 

をもセットアップモジュールはansible_mounts配列に値を設定しますが、このコンテキストで役立つかどうかを確認する機会はありませんでした。

関連する問題