notebook

都内でWEB系エンジニアやってます。

ansibleを使ってみる

ansible 使ってみる

最近会社でもはやっていたのでとりあえず使ってみました。

python2.6以上があればクライアントに特別に何かインストールする必要もないみたいだし、記述はYAMLファイルだし、結構とっつきやすいのかなという印象だったので試してみます。

インストール

epelのインストール

epelリポジトリからyumでインストールできるようなのでepelを使えるようにします。

wget http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6-8.noarch.rpm
sed -i "s/enabled=1/enabled=0/" /etc/yum.repos.d/epel.repo

ansibleのインストール

yumでインストールします

yum install -y ansible

おわり

使ってみる

下記を参考にいくつかplaybookを作って試してみました

ansible tutorial

hosts

テスト用にvagrantでサーバを立てました。

  • 192.168.70.11
    • ansible実行用
  • 192.168.70.11
  • 192.168.70.11

    • リモートサーバ
  • 実行時のチェック(--dry-run)

ansible-playbook -i hosts ***.yml --check
  • 実行
ansible-playbook -i hosts ***.yml
  • hosts
[test-servers]
192.168.70.12
192.168.70.13

mysqlrpmからインストールするplaybook

---
- hosts: test-servers
  sudo: yes
  vars:
    version: 5.5
    revision: 38
    mysql_shared_compat: http://dev.mysql.com/get/Downloads/MySQL-{{ version }}/MySQL-shared-compat-{{ version }}.{{ revision }}-1.rhel5.x86_64.rpm
    mysql_shared: http://dev.mysql.com/get/Downloads/MySQL-{{ version }}/MySQL-shared-{{ version }}.{{ revision }}-1.rhel5.x86_64.rpm
    mysql_client: http://dev.mysql.com/get/Downloads/MySQL-{{ version }}/MySQL-client-{{ version }}.{{ revision }}-1.rhel5.x86_64.rpm
    mysql_devel: http://dev.mysql.com/get/Downloads/MySQL-{{ version }}/MySQL-devel-{{ version }}.{{ revision }}-1.rhel5.x86_64.rpm
    mysql_server: http://dev.mysql.com/get/Downloads/MySQL-{{ version }}/MySQL-server-{{ version }}.{{ revision }}-1.rhel5.x86_64.rpm
  tasks:
    - name: be sure mysql installed
      action: yum name={{item}} state=installed
      with_items:
        - "{{mysql_shared_compat}}"
        - "{{mysql_shared}}"
        - "{{mysql_client}}"
        - "{{mysql_devel}}"
        - "{{mysql_server}}"
  • hosts:
    • test-serversは、hostsファイルで定義
  • vars:
    • 変数を定義
    • mysqlrpmファイルのバージョンを指定してそれぞれのrpmを定義
  • with_items:
    • 複数指定した値を{{item}}で定義した回数だけ実行する
  • action:
    • yum:でもOKだと思う、nameで指定したパッケージをstateで指定した状態にする
    • yumはURLも指定できるよう

fluentdをインストールするplaybook

---
- hosts: test-servers
  sodu: yes
  tasks:
    - name: be sure fluentd install
      shell: curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh
  • shell:
    • シェルコマンドを実行できる
    • 簡単

nginxをインストール、起動するplaybook

---
- hosts: test-servers
  sudo: yes
  vars:
    - centos_ver: 6
    - rpm: http://nginx.org/packages/centos/{{centos_ver}}/noarch/RPMS/nginx-release-centos-{{centos_ver}}-0.el{{centos_ver}}.ngx.noarch.rpm
  tasks:
    - name: repo
      yum: name={{rpm}} state=installed
    - name: install
      yum: name=nginx state=installed
    - name: nginx start
      service: name=nginx state=running enabled=yes
  • service:
    • サービスコマンド、state=runningで起動している状態にさせる 今回はリポジトリの追加、yumでのインストール、nginxの起動の順で起動まで ただ、インストールしてない状態だと、--checkでserviceの項目が失敗するが実行は問題ない、svnの--dry-runみたいなものかな

ローカルのシェルスクリプトをリモートで実行する

---
- hosts: test-servers
  sudo: yes
  tasks:
    - name: setup.sh
      script: /path/to/setup.sh
  • script:
    • ローカルのスクリプトを実行させることもできる
    • これは今まで使ってたスクリプトなども使えるので便利かも

感想

とりあえず触ってみた感じだと導入に関してはそんなに難しくないよう

実運用だとどうなんだろう。。。

とりあえず、ファイルのコピーとかコマンドも簡単にできるようなので小さなところから使ってみたい

サーバ構築用のシェルスクリプトは作ってあるのでansibleで書き直してみるのも勉強になりそう

設定ファイルを作ったり、includeとかroleとかは次回やってみる

playbooks