web-dev-qa-db-ja.com

ansibleを使用してディレクトリをシンボリックリンクに置き換える方法は?

/etc/nginx/sites-enabledをレポジトリへのシンボリックリンクに置き換えたいと思います。私はfileモジュールを使用してこれを実行しようとしていますが、ファイルモジュールは強制オプションでディレクトリを削除しないため、機能しません。

- name: setup nginx sites-available symlink
  file: path=/etc/nginx/sites-available src=/repo/etc/nginx/sites-available state=link force=yes
  notify: restart nginx

シェルの使用に戻ることができました。

- name: setup nginx sites-available symlink
  Shell: test -d /etc/nginx/sites-available && rm -r /etc/nginx/sites-available && ln -sT /repo/etc/nginx/sites-available /etc/nginx/sites-available
  notify: restart nginx  

シェルにフォールバックする代わりにこれを達成するより良い方法はありますか?

20

あなたが行動を起こすとき、それは実際にはものです:

  • フォルダーを削除する
  • その場所にシンボリックリンクを追加します

これはおそらく、Ansibleで表現する最もクリーンな方法でもあります。

tasks:
  - name: remove the folder
    file: path=/etc/nginx/sites-available state=absent 

  - name: setup nginx sites-available symlink
    file: path=/etc/nginx/sites-available 
          src=/repo/etc/nginx/sites-available 
          state=link 
          force=yes
    notify: restart nginx

しかし、常にシンボリックリンクを削除して追加することはそれほど良いことではないので、リンクターゲットをチェックするタスクを追加することは素晴らしい追加かもしれません:

  - name: check the current symlink
    stat: path=/etc/nginx/sites-available 
    register: sites_available

そして、削除タスクの「when」条件:

  - name: remove the folder (only if it is a folder)
    file: path=/etc/nginx/sites-available state=absent
    when: sites_available.stat.isdir is defined and sites_available.stat.isdir
43