LoginSignup
9
13

More than 5 years have passed since last update.

Ansible初心者がvim,zsh設定の自動化ができるようになるまで

Last updated at Posted at 2017-01-26

やること

OSS(オープンソースソフトウェア)のAnsibleを学習すると同時に、仮想環境上にホストOSのvim,zshの設定を自動で反映できるようにする。

※この記事はVagrantによるホスト環境ができていることを前提として書いています。興味がある方は以下の記事を参考にしてみてください!
http://qiita.com/nl0_blu/items/97d54e78789335b415fb

開発環境

  • OS Ⅹ EL Capitan
  • Vitualbox(5.1.0)
  • Vagrant(1.9.1)
  • Ansible(2.2.1.0)

1.Ansibleのインストール

Ansibleのインストール

$ brew install ansible

インストールの確認

$ ansible --version

2.Inventoryファイルの作成とansibleコマンド実行

Inventoryファイル:ansible処理対象のホスト情報を記述する

$ vi hosts
----- 編集開始-----
[A]
192.168.33.10

[B]
192.168.33.11
----- 編集終了-----

Ansibleの実行例

ansible [グループ名] -m [モジュール名] -a ["アクション"]

--Inventoryファイルに書かれた対象全てにpingモジュール実行--
$ ansible all -i hosts -m ping

--Aにpingモジュール実行--
$ ansible A -i hosts -m ping

実行時にhostの入力を省略するには?→ansible.cfg編集

ansible.cfg

[defaults]
hostfile = ./hosts

$ ansible all -m ping

3.playbookを使う

playbook:実行したい処理をまとめて記述したファイル

例として、対象ホストにアカウントを追加するplaybookの作成を行う

①普通に書いた場合

playbook.yml

- hosts: all  #対象ホスト
  sudo: yes  #管理者権限
  tasks:  #実行する処理
    - name: add a client user   #処理内容(任意)
      user: name=client  #"client"をアカウント名として作成

②"client"を変数名で管理する場合

playbook.yml

- hosts: all
  sudo: yes
  vars:
    username: client
  tasks:
    - name: add a client user
      user: name={{username}}

③実行時に入力する場合

playbook.yml

- hosts: all
  sudo: yes
  vars_prompt:
    username: "Enter username"
  tasks:
    - name: add a client user
      user: name={{username}}

実行してみる。。
ansible-playbook [playbookファイル名]

$ ansible-playbook playbook.yml



完了ならchanged=1とか出る

4.その他playbookの作成例

公式ドキュメントから必要なモジュールの情報を探す
http://docs.ansible.com/ansible/modules_by_category.html

①Inventoryファイルに記述したホストAにapacheのインストールと自動起動を行うplaybook

playbook.yml

- hosts: A
  sudo: yes
  tasks:
    - name: install apache
      yum: name=httpd state=latest  #yumモジュールからapacheの最新版(latest)をインストール
    - name: start apache and enabled
      service: name=httpd state=started enabled=yes  #apacheの有効化

② ローカルファイルをホストBにコピーするplaybook

playbook.yml

- hosts: B
  sudo: yes
  tasks:
    - name: copy index.html
      copy: src=./test.html dest=./test.html owner=root group=vagrant mode="u=rw,g=r,o=r"

③必要なパッケージを全てのホストに一括してインストールするplaybook

playbook.yml

- hosts: all
  sudo: yes
  tasks:
   - name: need all package install
     yum: name="{{item}}" state=latest
     with_items:
      - php
      - php-mysql
      - httpd
      - mariadb
      - mariadb-server
      - MySQL-python

5(本題).VagrantホストにホストOSのzsh,vimの設定を反映するplaybookの作成

[やってみてわかったこと]

  • .ymlは書き方に癖あり。("-"の位置はズレないようする、スペースもフォーマットがある)
  • libselinux-pythonインストールしなきゃ色々事故る

Inventoryファイルの作成

$ vi hosts
----- 編集開始-----
[server]
192.168.33.10

[client]
192.168.33.11
----- 編集終了-----

[playbookの作成]
順番に(task:から下)...
①依存パッケージ(libselinux-pythonを含む。不要なの混じってそう。。)のインストール
②vimのインストール
③ホストOSの.vimrcをゲストOSにコピー
④zshのインストール
⑤ログインシェルをzshにする
⑥ホストOSの.zshrcをゲストOSにコピー


playbook.yml

- hosts: all
  user: vagrant
  sudo: yes
  tasks: 
    - name: requires install #①
      sudo: true
      yum: name={{ item }} state=present
      with_items:
    - gcc
    - git
    - mercurial
    - ncurses-devel
    - lua
    - lua-devel
    - perl
    - perl-devel
    - perl-ExtUtils-Embed
    - python
    - python-devel
    - libselinux-python

- name: install vim #②
  yum: name=vim state=present

- name: copy .vimrc file to vagrant home #③
  copy: src=~/.vimrc dest=~vagrant/.vimrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"


- name: install zsh #④
  yum: name=zsh state=installed

- name: set zsh as default shell for vagrant user #⑤
  command: chsh -s '/bin/zsh' vagrant

- name: copy .zshrc file to vagrant home #⑥
  copy: src=~/.zshrc dest=~vagrant/.zshrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"


このplaybookはディレクトリで以下のようにまとめることもできる
(vimのplaybookとzshnoplaybookの切り分け)

├Vagrantfile
└provisioning
 ├ hosts
 ├ main.yml
 └ roles
   ├ vim
   └ tasks
    └ main.yml
  ├ zsh
   └ tasks
    └ main.yml     

    
各ファイルの中身は以下の通り

provisioning/main.yml
---
 # main.yml

- hosts: all
  user: vagrant
  sudo: yes
  roles:
    - vim
    - zsh
provisioning/roles/vim/tasks/main.yml
- name: requires install
  yum: name={{ item }} state=present
  with_items:
    - gcc
    - git
    - mercurial
    - ncurses-devel
    - lua
    - lua-devel
    - perl
    - perl-devel
    - perl-ExtUtils-Embed
    - python
    - python-devel  
    - libselinux-python

- name: install vim
  yum: name=vim state=installed

- name: copy .vimrc file to vagrant home
  copy: src=~/.vimrc dest=~vagrant/.vimrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"
provisioning/roles/zsh/tasks/main.yml
- name: install zsh
  yum: name=zsh state=installed

- name: set zsh as default shell for vagrant user
  command: chsh -s '/bin/zsh' vagrant

- name: copy .zshrc file to vagrant home
  copy: src=~/.zshrc dest=~vagrant/.zshrc owner=vagrant group=vagrant mode="u=rw,g=r,o=r"

以降、Vagrantホストに対してansibleを実行する方法は幾つかある

①(一般的)Vagrantfileに以下を追記

config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/main.yml"
    ansible.inventory_path = "provisioning/hosts"
    ansible.limit = 'all'
end

$ vagrant provisionで作成したplaybookの実行

②ansible-playbook main.yml から実行

ansible関連コマンド

  • ansible-playbook (playbook名) --syntax-check playbookの文法の確認
  • ansible-playbook (playbook名) --list-task playbookのタスクの一覧確認
  • ansible-playbook (playbook名) --check playbook実行確認(実際に実行はしない)

参考

http://shifumin.hatenablog.com/entry/2015/08/26/215000
https://www.tcmobile.jp/dev_blog/devtool/ansibleのplaybookをいい感じに管理したい/
http://qiita.com/snaka/items/d5a8004afbfe665e1d3a

9
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
13