As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

ansibleでpyenvいれる(3日坊主)

  • この記事はsolo_advent_calender 2016年12月3のものです。

こんにちは ショート advent calender3日目です。

ansibleでDjangoの開発環境を準備するために作りました。

pyenvで指定のバージョンのpythonをインストールするところまでです。

ディレクトリ構成はこんな感じです

pyenv/
├── files
│   └── bashrc
├── handlers
│   └── main.yml
└── tasks
    └── main.yml

bashrcをコピーする方式なので開発マシンに入ってbashrcを書き換えてもう一度実行すると初期状態にもどってしまうので、ファイルの存在を確認するようにしています。

tasks/main.yml

---
- name: clone pyenv
  become: False
  git: repo=git://github.com/yyuu/pyenv.git dest=~/.pyenv accept_hostkey=yes

- name: check bashrc
  become: False
  stat: path=~/.bashrc
  register: is_bashrc
  ignore_errors: yes

- name: copy bashrc
  become: False
  copy: src=bashrc dest=~/.bashrc
  notify: source bashrc
  when: not is_bashrc.stat.exists

- name: check python version {{ python_version }}
  become: False
  shell: bash -lc "pyenv versions | grep {{ python_version }}"
  register: result
  ignore_errors: yes

- name: install {{ python_version }}
  become: False
  shell: bash -lc "pyenv install {{ python_version }}"
  when: result|failed

- name: set global {{ python_version }}
  become: False
  shell: bash -lc "pyenv global {{ python_version }}"

handlers/main.yml

---
- name: source bashrc
  shell: bash -lc "source bashrc"

files/bashrc

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

export PYENV_ROOT="${HOME}/.pyenv"
if [ -d "${PYENV_ROOT}" ]; then
    export PATH=${PYENV_ROOT}/bin:$PATH
    eval "$(pyenv init -)"
fi

# User specific aliases and functions

group_varsのall等に

# バージョンを指定する
python_version: 2.7.11

を用意すれば

pyenvが開発環境にインストールされます。 あとはpipをインストールしてDjangoをpipでインストールすればDjangoを扱えるようになります。

この部分も後ほどansibleで書こうとおもいます。