UUUM攻殻機動隊

UUUMのエンジニアによる技術ブログです

Ansibleでリモートのdebパッケージをインストールする

おはこんばんちは!! 尾藤 a.k.a. BTO です。

cronはもうオワコンにしたいな〜と思いつつ、じゃあ何がいいんだよと思って Rundeck を試しています。 UUUM のサーバは基本 Ubuntu を使っているんですが、Rundeck 用のパッケージは用意されていないので、Rundeck のサイトから deb パッケージをダウンロードしてインストールします。 それ用に ansible の設定を書いたので、今日はそのお話です。

Rundeckがインストールされているかチェックする

-   name: check if rundeck is installed
    command: dpkg-query -W rundeck
    register: rundeck_check
    failed_when: rundeck_check.rc > 1
    changed_when: rundeck_check.rc == 1

まずは何がともあれ、Rundeck がインストールされているかどうかチェックしましょう。 パッケージがインストールされているかどうかは、dpkg-query -W で判定できます。 コマンドの実行結果は、rundeck_check に格納しています。

このコマンドは、指定されたパッケージが存在しないと、リターンコード 1 を返します。 このままではエラーで ansible が終了してしまいますので、リターンコードが 1 の場合は、failed ではなく changed になるように、changed_when で指定します。

failed_when は念のため入れてみましたが、なくてもいいと思います。

-   include: install.yml
    when: rundeck_check.changed

rundeck_checkchanged の場合に、インストールします。 そのために when で指定して、install.yml をインクルードしています。

別ファイルの yaml にしているのは、毎回 when を指定するのを防ぐためです。

Rundeck をインストールする

-   name: download rundeck
    get_url:
        url={{ rundeck_url }}
        dest=/tmp/{{ rundeck_package_name }}

-   name: install rundeck
    sudo: true
    apt: deb=/tmp/{{ rundeck_package_name }}

Rundeck をインストールします。

get_url モジュールで deb パッケージを /tmp にダウンロードします。

次に apt モジュールで、ダウンロードした deb パッケージを指定して、インストールします。

ToDo

パッケージのアップグレードとかに対応してませんが、とりあえずはこれで動かしてみる。

結論

バルバッコアの肉はうまい!!

お約束

UUUMではエンジニアを募集しています。 興味のある方は、採用ページからご連絡ください。