Mackerelのようにインストール方法がコマンドにまとまっていたりすると、手動で実行する分には楽なんだけど、Ansibleで冪等性を担保しつつ自動させるのには少し苦労する。
重い腰を上げてAnsibleでインストール出来るようにしたのでメモ。
ちなみにDebianで実行したけど、Ubuntuでもいけるはず。

依存パッケージのインストール

いきなり肝なんだけど、wgetcurl両方いる。
最初curlが入っていなくて地味にハマった。
Ubuntuなら両方デフォルトでインストール済みかもしれない。

- name: install dependency packages
  apt: pkg={{ item }} state=present update_cache=yes
  with_items:
    - curl
    - wget

既にインストールしているかのチェック

いろいろやり方はあると思うけど、今回はdpkg-queryを使ってみた。
終了ステータスを見てゴニョゴニョしている。

- name: installed check of mackerel-agent
  command: dpkg-query -W mackerel-agent
  register: mackerel_installed_check_result
  failed_when: mackerel_installed_check_result.rc > 1
  changed_when: mackerel_installed_check_result.rc == 1

インストールコマンド

get_urlを使えと警告が出るけども、Ansibleの流儀に従うよりMackerelの公式サイトにかかれているやり方にしておいたほうが分りやすいかなと思って、そのまま実行している。
実行するかどうかは上のタスクで確認済み。
便利なプラグインもインストールしてしまう。

- name: install packages
  shell: wget -q -O - https://mackerel.io/file/script/setup-all-apt-v2.sh | MACKEREL_APIKEY='{{ apikey }}' sh
  when: mackerel_installed_check_result.changed

- name: install plugin package
  apt: pkg={{ item }} state=present update_cache=yes
  with_items:
    - mackerel-check-plugins

設定ファイルを別ファイルで読み込めるように

設定ファイル/etc/mackerel-agent/mackerel-agent.confを直接編集するよりも、用途別に別ファイルに切り出している方が好きなので。
これで/etc/mackerel-agent/conf.d/*.conf配下に存在するファイルは、自動で読み込んでくれるようになる。
/etc/mackerel-agent/conf.d/配下セットしたいファイルは、予めAnsible側に用意しておきコピーする感じに。

- name: enable include conf files
  lineinfile:
    path: /etc/mackerel-agent/mackerel-agent.conf
    line: 'include = "/etc/mackerel-agent/conf.d/*.conf"'
    insertafter: "EOF"
    backup: yes

- name: make configuration file directory
  file:
    path: /etc/mackerel-agent/conf.d
    state: directory

- name: setup configuration files
  copy:
    src: path/to/{{ item }}.conf
    dest: /etc/mackerel-agent/conf.d/{{ item }}.conf
    backup: yes
  with_items:
    - foo
    - bar
  register: setup_configuration_files_result

mackerel-agentを再起動

設定ファイルを修正したので再起動する。
一応設定ファイルに変更があったら再起動するという感じのお手軽なルールにしてある。

- name: restarted systemd
  systemd:
    name: mackerel-agent
    state: restarted
    enabled: yes
  when: setup_configuration_files_result.changed

まとめ

全部まとめるとこんな感じ。

- name: install dependency packages
  apt: pkg={{ item }} state=present update_cache=yes
  with_items:
    - curl
    - wget

- name: installed check of mackerel-agent
  command: dpkg-query -W mackerel-agent
  register: mackerel_installed_check_result
  failed_when: mackerel_installed_check_result.rc > 1
  changed_when: mackerel_installed_check_result.rc == 1

- name: install packages
  shell: wget -q -O - https://mackerel.io/file/script/setup-all-apt-v2.sh | MACKEREL_APIKEY='{{ apikey }}' sh
  when: mackerel_installed_check_result.changed

- name: install plugin package
  apt: pkg={{ item }} state=present update_cache=yes
  with_items:
    - mackerel-check-plugins

- name: enable include conf files
  lineinfile:
    path: /etc/mackerel-agent/mackerel-agent.conf
    line: 'include = "/etc/mackerel-agent/conf.d/*.conf"'
    insertafter: "EOF"
    backup: yes

- name: make configuration file directory
  file:
    path: /etc/mackerel-agent/conf.d
    state: directory

- name: setup configuration files
  copy:
    src: path/to/{{ item }}.conf
    dest: /etc/mackerel-agent/conf.d/{{ item }}.conf
    backup: yes
  with_items:
    - foo
    - bar
  register: setup_configuration_files_result

- name: restarted systemd
  systemd:
    name: mackerel-agent
    state: restarted
    enabled: yes
  when: setup_configuration_files_result.changed

書き出してみると、色々拘りがあるもんだなぁ。