2017-04-05 15 views
0

私は現在、AWSでsyslogサーバをスクリプト化して配備するためにAnsible 2.2を使用しています。 1つの前提条件として、S3に出荷するまで1か月間ログを保持する永続的なEBSボリュームを用意することです。したがって、もし我々がsyslogを分解してAnecess経由で再配布する必要があれば、新しく配備されたサーバにそれを再接続するだけで、以前のログが残っています。その部分は問題ありません。私はそれを処理しました。前のタスクが失敗した場合にのみ、2つのタスクを実行してください。

私の問題は、EBSボリュームがX、Y、またはZの理由で存在しない場合、新しいEBSボリュームを作成し(取得して)、添付して、 (取得)、パーティションを作成(取得)、フォーマット(取得)、マウント(取得)します。うまくいけば、次のコードはそれを理解するのに役立ちます:コードは完璧に機能していることを

- name: Create log partition 
    shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/xvdb 


- name: Format log partition 
    filesystem: 
    fstype: ext4 
    dev: "/dev/xvdb1" 


- name: Mount log drive 
    mount: 
    name: /log 
    src: "/dev/xvdb1" 
    fstype: ext4 
    state: mounted 

が、私はこれを実行すると、既存のEBSボリュームを再接続しながら、私はまだ私の過去のデータを削除、ボリュームを再分割し、フォーマットすることを実現し、スクラッチから始まり、それは非常に良くないです。

私が達成しようとしていることは、データを消去していないことを確認するために、パーティションやフォーマットを行う前にチェックすることです。ドライブのマウントを試みることが最善の方法だと思って、成功すればパーティションとフォーマットをスキップしてください。しかし、ドライブがマウントに失敗した場合は、パーティション分割、フォーマット、およびマウントを行います。

私はかなり新しくAnagersだから、私はどんなアイデアにも開いていて、どんな助けもありがたいです。ありがとう!

答えて

1

あなたは、この例の脚本でconditionalsblocks

ルックに見えるかもしれません。ここで

私たちはは/ dev/xvdb1パーティション上のFSを作成してみてください。存在しないか、別のファイルシステムを含んでいる場合(注意してください!) - レジスタ "result"には失敗したタスクに関する情報が含まれます。その後、前のタスクが失敗した場合にのみ実行されるアクションでブロックを定義します。

- name: create new fs on device 
    filesystem: 
    fstype: ext4 
    dev: /dev/xvdb1 
    register: result 
    ignore_errors: true 

- block: 
    - name: Create log partition 
    shell: /bin/echo -e "n\np\n1\n\n\nw" | sudo fdisk /dev/xvdb 


    - name: Format log partition 
    filesystem: 
     fstype: ext4 
     dev: "/dev/xvdb1" 


    - name: Mount log drive 
    mount: 
     name: /log 
     src: "/dev/xvdb1" 
     fstype: ext4 
     state: mounted 
    when: result|failed 

あなたはresult.stderrを解析することにより、他の有効なファイルシステムを拭く避けるために、これを調整することがありますが、それはまた別の話です。希望が助けてくれる!あなたはパーティションのない生のブロックデバイスを使用して気にしない場合は

1

は、コードのこの作品はかなり冪等である:ext4ファイルシステムがすでにデバイス上に存在している場合、これにより

- name: Make filesystem 
    filesystem: 
    fstype: ext4 
    dev: /dev/xvdb 

- name: Mount log drive 
    mount: 
    name: /log 
    src: /dev/xvdb 
    fstype: ext4 
    state: mounted 
+0

、それを再作成して拭くんデータ?あるいは、それは本質的に「ああ、それはすでにext4です、これをスキップしましょう」と言っていますか? – Chiggins

+0

後者です。もしext4があれば、Ansibleは何もしません。ただ「ok」と言うだけです。 –

関連する問題