超ansible入門　/ ansible for beginer

# 超ansible入門　/ ansible for beginer

## ansibleの概要と、本項目の目的

ansibleはサーバー構成自動化ツールです。（デプロイ利用も）
今回はansibleへの導入と、以降の展開に対しての示唆を目的として構成しています。

--------------------------
## INDEX

- 1 公式リンク
- 2 とりあえず触ってみるためのHOW TO ～ httpdをインストール 
- 3 さらなる理解のためのさわり
- 4 TOPIC
- 5 ansible commands
- 6 どの程度理解してるかを図るために・・・


--------------------------
## 1 公式リンク

[公式サイト](https://www.ansible.com/)
[ドキュメント](http://docs.ansible.com/ansible/)

--------------------------
## 2 とりあえず触ってみるためのHOW TO ～ httpdをインストール

	簡単なansibleの使い方をhttpdをインストールする事で
	確認してみます。


### 2-1 [ 前提条件として ]
step 1

	(A) クライアント(centos6)側には　ansible + sshクライアント
	(B) ホストサーバー側(centos6)には　python + sshサーバー
	が揃ってればＯＫ

	-ansible　インストール(A)
	yum install -y epel-release
	yum install -y ansible

	-openssh-server (B)

	-openssh-client (A)

	-python　＋　必要に応じてのモジュールの追加（yum install MySQL-pythonでmysqlドライバーのインストとか）

	一応今回は両方ともdocker hubからオフィシャルのcentosイメージで、ローカルに起動しています。 
	host側のip,portは 192.168.99.100:32786　になってます。



### 2-2 ansible実行

	/etc/ansible内で作業します。
	
	dockerクライアントとの共有をしているフォルダ（ここではhome)内で実行でも構わないと言いたいが、docker経由だと
	ファイルの権限がftpでrootに変えたりできないので素直にetc/ansible内で
	やる方がいいみたい。 (cp ../../home/***.yml /)
	＊ansibleはhostsの権限次第でエラーになるので以下を参照
	http://www.lnc.jp/2015/03/23/2317.html
	

step 2-2-1 /etc/ansible/hostsファイルを編集

cd /etc/ansible/
vi hosts

```hosts
[test-servers]
192.168.99.100:32786
```

ip,portは環境に合わせて。


step 2-2-2 windows側ymlファイルを作成(そのままcentos側でやっても問題ないですが）

とりあえずhttpをインストールするファイルを作成します


```simple.yml
- hosts: test-server
  tasks:
    - name: install httpd
      yum: name=httpd disable_gpg_check=no state=installed

```
	※ yum install -y httpdの -yオプションの代わりに　disable_gpg_check=no

	※ yml形式なのでインデントには注意しましょう。

	※そのまま /etc/ansible/ の中で作る場合は
	vi simple.yml　ではじめてください。



step 3 ansibleの実行


step 3-1 同期フォルダのhomeにあるymlファイルをコピー
cp ../../home/simple-playbook.yml /etc/ansible/


step 3-2 ansibleの実行
ansible-playbook -i hosts simple.yml --ask-pass

	※ --ask-pass　はホスト側に鍵登録されてる場合は必要ありません。




--------------------------
## 3 さらなる理解のためのさわり

- [Ansible勉強会youtube](https://www.youtube.com/watch?v=9Kg6qf-XJuE)

	動画での紹介。前半部分だけでも概要がつかめます。


- [Qiita Ansible advent-calendar](http://qiita.com/advent-calendar/2015/ansible)

	一通り読んでみるのも


★おススメ
- [Ansible 初心者なら、まずは Ansible Galaxy から始めてみよう](http://akiyoko.hatenablog.jp/entry/2015/12/06/000100)

	ansibleはymlファイル単体で動きますが、ベストプラクティスというおススメの構成があって

	- inventory(hostsファイル)
	- ansible-playbook(ymlファイル)
	- Role
	- handler
	・・・
	などの理解、利用をすると、サーバー構成を自動化したり、大量のサーバーに処理する助けとなります。

--------------------------
## 4 TOPIC

### TOPIC INDEX
- 4-1 やってはいけない・・・・？　shellでごり押し
- 4-2 centos6に　php5.5をインストールするplaybookサンプル
- 4-3 Playbook 実行時に任意の値を指定する
- 4-4 ansibleでホスト側にユーザー登録、鍵登録
- 4-5 ansiblenのツボ
- 4-6 CentOSにRedmineを自動インストールするためのAnsibleプレイブック

### 4-1 やってはいけない・・・・？　shellでごり押し

	なにげに
	name: shellでごり押し gitインストール
	shell: yum install -y git

	などshellでごり押しで書けます。


### 4-2 centos6に　php5.5をインストールするplaybookサンプル


```php55inst.yml

- hosts: test-server
  tasks:
    - name: remove php
      yum: name=php state=removed
    - name: set epel repository
      shell: rpm -Uvh --force http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
    - name: set remi repository
      shell: rpm -Uvh --force http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

    - name: install php5
      yum: name=php disable_gpg_check=no enablerepo=remi-php55 state=installed

```

	centos6の場合、そのまま　yum install -y php をするとphp5.3あたりがインストされます。
	5.5以上をインストするために　rpmを追加しています。



### 4-3 Playbook 実行時に任意の値を指定する
http://d.hatena.ne.jp/akishin999/20130818/1376824640

	! Point
	cliオプションで --extra-vars "var1=***" を設定する事で可能に

	さらに　vars_promptという物を設定しておくと対話方式で引数を設定する事が可能に
	var_prompt:
	 - name : **変数名になる{{変数名}}で使用できる*
	   prompt: "質問を入れる"
	   default: デフォルト値も設定可能



### 4-4 ansibleでホスト側にユーザー登録、鍵登録
https://youtu.be/k7pw7z00CeU

### 4-5 ansiblenのツボ
http://inforno.net/articles/2013/10/15/ansible-tips

英語でつらい場合の補助に

### 4-6 CentOSにRedmineを自動インストールするためのAnsibleプレイブック
https://github.com/farend/redmine-centos7-mariadb-ansible

日本語はいいな

--------------------------
## 5 ansible commands

ansibleのコマンド（モジュール）の全リストです。
[All Modules](http://docs.ansible.com/ansible/list_of_all_modules.html)

モジュールをpythonなどで自作する事もできるそうなので、ここに載っていない便利なものも世の中に出回ってるはずです。


--------------------------
## 6 どの程度理解してるかを図るために・・・

ansible入門pdf本関係

http://www.bbreak.co.jp/technique/doc/ansible/Ansible.pdf


----------------------------

[入門ansible](http://www.amazon.co.jp/%E5%85%A5%E9%96%80Ansible-%E8%8B%A5%E5%B1%B1%E5%8F%B2%E9%83%8E-ebook/dp/B00MALTGDY)

サンプル版
http://tdoc.info/ansible-book/ansible-sample.pdf

英語だけでこころもとない場合はやはり書籍で・・・

	■ 目次

	1章. はじめに

	- Ansibleの特徴

	- Ansibleはシンプル

	- ChefやPuppetとの違い

	- Ansibleは "Better Shell Script"

	2章. Ansibleを使ってみよう

	- インストール

	- inventoryファイル

	- モジュール (module)

	3章. playbookを作ってみよう

	- YAMLの文法

	- playbookを書いてみる

	- playbookの解説

	- task

	- handler

	- よく使うモジュール

	4章. 複雑なplaybookを作ってみよう

	- 繰り返し -- with_items

	- 出力を保存してあとで使う -- register

	- 条件付き実行 -- when

	- 成功するまで繰り返す -- until

	- 外部情報の参照 -- lookup

	- 変数を処理する -- filter

	- キーボードから入力する -- vars_prompt

	- 管理ホストで実行する -- local_action

	- 実行するモジュールを変数で変更する -- action

	- 環境変数を設定する - environment

	- 失敗しても無視する - ignore_errors

	- 非同期でtaskを実行する -- async

	5章. 大規模なplaybookを構築してみよう

	- 他のplaybookを読み込む -- include

	- 推奨ディレクトリ構成 -- ベストプラクティス

	- まとめて再利用 -- role

	- 並列実行 -- fork

	- 順々に実行する -- serial

	- AWS EC2との連携

	- ホストのリストを動的に作成 -- dynamic inventory

	6章. コマンドラインオプションを使ってみよう

	- ssh認証

	- 対象ホストを制限する -- limit

	- 実行するtaskを制限する -- tag

	- dry-run実行 -- check

	- taskを確認しながら実行 -- step

	- 差分表示 -- diff

	7章. 変数ファイルの暗号化 -- ansible-vault

	- ansible-vaultの使い方

	- 暗号化されたファイルの使い方

	8章. 公開されているroleを使ってみよう -- Ansible Galaxy

	- Ansible Galaxyとは

	- roleの検索方法

	- roleを手に入れる

	- roleの使い方

	9章. よくあるご質問

	- 接続できない

	- ControlPath too longというエラーが出る

	- 実行しても途中で止まる

	- inventory ファイルがなくても接続したい

	- 一つのplaybookが複雑になってしまった

	- python not foundというエラーが出る

	- Windowsで使いたい

	- ansible-playbookに変な絵が表示される

	- ansibleが収集する変数を知りたい

	- invalid type type 'list'と出る

	- 変数を使った時に "Syntax Error" が出る

	- "---" はどういう意味？

	- Ansibleという名前の由来は？

	10章. おわりに

	付録: モジュールを自作する

	- モジュールの動作

	- モジュールの形式

	- モジュールのサンプル

	- Pythonでの便利関数

	- モジュールのデバッグ

	付録: Ansible plugin

	- pluginの種類

	- lookup plugin

	- filter plugin

	- callback plugin

	- action plugin

	- connection type plugin

	- vars plugin

	付録: ansible configファイル

	- defaultセクション

	- paramiko セクション

	- ssh_connection セクション

	- accelerateセクション

	付録: Windows対応

	- 前提環境

	- 準備

	- inventoryファイル

	- モジュール

	- 制限事項