文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

ansibleのベストプラクティスの構成を一括生成するスクリプト

ansibleには公式がベストプラクティスの構成を用意しています。その構成を一括生成しましょう。
f:id:treeapps:20160219001058p:plain

ansibleのベストプラクティスのディレクトリ構成は公式が公開しています。↓これです。
Best Practices — Ansible Documentation

このフォルダ構成をいつまでも覚えていられるわけではないので、汎用的に作成できるようシェルスクリプトを用意してみます。

シェルスクリプト

chefでいうところの「chef generate repo chef-repo」「knife cookbook create httpd」みたいなものです。

定数部分を適当に書き換えて使用します。

#!/bin/sh
PLAYBOOK_DIR="/usr/vagrant/playbook"
ENVIRONMENTS=('development' 'staging' 'production')
ROLES=('common' 'httpd')

cd $PLAYBOOK_DIR

touch site.yml webservers.yml
mkdir -p group_vars host_vars library filter_plugins roles

for environment in ${ENVIRONMENTS[@]}; do
    touch $environment
    touch group_vars/$environment.yml
done

for role in ${ROLES[@]}; do
    mkdir -p $PLAYBOOK_DIR/roles/$role && cd $_
    mkdir -p tasks handlers templates files vars defaults meta
    touch tasks/main.yml
    touch handlers/main.yml
    touch vars/main.yml
    touch defaults/main.yml
    touch meta/main.yml
done

treeで確認

tree-no-iMac:vagrant tree$ tree ./playbook/
/usr/vagrant/playbook
├── development
├── filter_plugins
├── group_vars
│   ├── development.yml
│   ├── production.yml
│   └── staging.yml
├── host_vars
├── library
├── production
├── roles
│   ├── common
│   │   ├── defaults
│   │   │   └── main.yml
│   │   ├── files
│   │   ├── handlers
│   │   │   └── main.yml
│   │   ├── meta
│   │   │   └── main.yml
│   │   ├── tasks
│   │   │   └── main.yml
│   │   ├── templates
│   │   └── vars
│   │       └── main.yml
│   └── httpd
│       ├── defaults
│       │   └── main.yml
│       ├── files
│       ├── handlers
│       │   └── main.yml
│       ├── meta
│       │   └── main.yml
│       ├── tasks
│       │   └── main.yml
│       ├── templates
│       └── vars
│           └── main.yml
├── site.yml
├── staging
└── webservers.yml

雑感

chefは最初に覚えるべき用語や仕組みが多すぎます。用語を覚えた後の初期環境構築も面倒くさいんですよね。

chef serverは学習コスト大、必要サーバ数多い、冗長、
chef zeroは学習コスト大、
itamaeはちょっと将来性等が不安かもしれない、
ansibleは学習コスト中、rubyなどで記述できない、
結局どれも何かしらの不満がありますね。悩ましいところです。

初めてのAnsible

初めてのAnsible