LoginSignup
1
2

More than 5 years have passed since last update.

AnsibleをインストールしてからVagrantの仮想環境にPython環境を構築するまで

Last updated at Posted at 2016-09-25

MacからVagrantの仮想マシンにAnsibleを使ってPython環境を設定するまでの流れを記録しておきます。

前提

環境

  • ホスト
    • MacBookAir(2011) OS X 10
    • virtualenv, virtualenvwrappeが入ってること
  • 仮想環境
    • Vagrant 1.8.5
    • VirtualBox 5.0.14
    • ubuntu/trusty64 (14.04)

私の実力

  • プログラミング歴1年
  • Vagrant歴1ヶ月
  • Ansible歴2日
  • こんなぺーぺーでも遊べました。

手順

  1. 仮想マシンの準備

    1. 仮想マシンの設定ファイルを置いておきたいフォルダ(AnsTest)に移動する。
    2. vagrant init ubuntu/trusty64
    3. Vagrantfileというファイルが作成されるので好きなエディタで開く。
    4. config.vm.network "private_network", ip: "192.168.33.10"のコメントアウトを外す。
  2. ホスト上にPython仮想環境の作成

    1. mkvirtualenv ans --no-site-packages --python=(Pythonのパス)
    2. Python 2.x系を指定すること。Python 3.x系は将来的に対応する予定らしい。
  3. Ansibleのインストール

    1. pip install ansible
  4. インベントリファイルの作成、配置

    1. /etc/ansiblehostsという名前(任意)で配置する。
    2. 以下の内容を書き込む。[]の中はあとでplaybookのなかでhostとして指定する名前、IPアドレスはVagrantfileでコメントアウトした行にあるものを記入。
    [AnsTest]
    192.168.33.10
    
  5. プレイブックの作成

  • 中身についてはのちほど。
provision_vagrant.yml
   - hosts: AnsTest
     become: yes
     user: vagrant
     tasks:
         - name: Install essentials
           apt: pkg={{ item }} update_cache=yes state=present
           with_items:
               - vim
               - git
               - build-essential
               - libssl-dev
               - zlib1g-dev
               - libbz2-dev
               - libreadline-dev
               - libsqlite3-dev
               - wget
               - curl
               - llvm
               - libncurses5-dev
               - libncursesw5-dev
               - xz-utils

         - name: Clone pyenv 
           become: yes
           become_user: vagrant
           git: 
              repo: https://github.com/yyuu/pyenv.git 
              dest: /home/vagrant/.pyenv
         - name: Edit bash
           become: yes
           become_user: vagrant
           blockinfile: 
              create: yes
              dest: /home/vagrant/.bash_profile
              content: |
                # pyenv
                export PYENV_ROOT=/home/vagrant/.pyenv
                export PATH=$PYENV_ROOT/bin:$PATH
                eval "$(pyenv init -)"
         - name: Install Pythons
           become: yes
           become_user: vagrant
           shell: . /home/vagrant/.bash_profile && pyenv install -s 2.7.11 && pyenv install -s 3.5.1
  1. Ansibleの実行
    1. ansible-playbook provision_vagrant.yml -k
    2. -kオプションをつけるとパスワードを求められます。ないと認証失敗的なエラーが出るかも。デフォルトのままならvagrantです。

プレイブックの中身について

基本的な書き方やモジュールの使い方については他にたくさん良い記事があるので、自分がはまったところについてのみ書いておきます。

  • 基本的なタスクの書き方
- name: 処理のなまえ
  (モジュール名):(...)
  (モジュールの実行詳細):(...)
- name: 処理のなまえ
  (モジュール名):(...)
  (モジュールの実行詳細):(...)

(...)

しかし場合によって属性=値をモジュール名の横にならべて書いたり、{{変数}}はダブルクオートしろと言われたり言われなかったり、文法がまだ把握できません。

  • 実行時のユーザー
    最初はユーザを指定せず、二行目のbecome: yesだけで実行したのですが、あとでvagrant sshでSSH接続してpyenv uninstallしようとしたところ、権限がないということで削除できませんでした。

  • 環境変数について

    • これが一番時間をとられました。最初はパス周りを.bashrcに書き込んでいたのですが、blockinfileなどで書き込んで次のタスクに行くと別シェルで起動するのか 、.bashrcに書き込んだ設定が反映されていない状態でpyenv install x.x.xしようとしてエラーになります。
    • じゃあその場で読み込めば良いと思い、. /home/vagrant/.bashrcで無理やり読み込ませてもだめで、試行錯誤の結果書き込み先を.bash_profileにすることで動くようになりました。
    • 私のAnsible歴の半分はこの環境変数まわりの格闘でした...これをみて無理やり動くところまで持って行きました。.bashrc、.bash_profileなどの違いについてはこちらが参考になるかと思います。

 今後の目標

  • Webサーバの設定をする。
  • プレイブックがそこらじゅうに散らかっているのはどう考えても良くないので、このあたり を参考に構成をもっとスマートにする。
  • 仮想マシンでなくクラウド環境に対して実行する。

参考

Ansible コトハジメ

Ansible 入門

1
2
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
1
2