sakemoto-san

ITエンジニアがWebサービス全般について書いていきます。

ryu/lagopus環境設定用ansible playbook

大量のマシンにlagopusとryuをぶち込む必要が出てきたので,ansibleの勉強を兼ねて,ryu, lagopusの環境設定を行うplaybookを書いてみた. このplaybookでインストールされるものは下記の通り.

  • ryu
  • lagopus v0.2
  • dpdk-1.8.0

以下,そのコード

- hosts: lagopus
  vars:
    homedir: /home/lagopus
    DPDK_ver: dpdk-1.8.0
    lagopus_ver: lagopus
  user: shd
  sudo: yes
  tasks:
  - name: install basic tools
    apt: name={{ item }} update_cache=yes
    with_items:
      - build-essential
      - git
      - unzip
      - python-pip
      - python-dev
  
  - name: install python modules
    pip: name={{ item }} state=latest
    with_items:
      - six
      - pbr

  - name: install ryu
    pip:  name=ryu state=latest
  
  - name: install pkgs for DPDK compile
    apt: name={{ item }}
    with_items:
      - make
      - coreutils
      - gcc
      - binutils

  - name: install kernel header
    shell: "apt-get install -y linux-headers-$(uname -r)"
  
  - name: download DPDK
    command: wget http://dpdk.org/browse/dpdk/snapshot/{{ DPDK_ver }}.zip
    args:
      chdir: "{{ homedir }}"
      creates: "{{ homedir }}/{{ DPDK_ver }}.zip"

  - name: unzip DPDK
    command: unzip {{ DPDK_ver }}.zip
    args:
      chdir: "{{ homedir }}"
      creates: "{{ homedir }}/{{ DPDK_ver }}"
  
  - name: compile DPDK
    shell: "make config T=${RTE_TARGET} && make"
    args:
      chdir: "{{ homedir }}/{{ DPDK_ver }}"
      creates: "/home/shd/dpdk-1.8.0/build/app/cmdline_test"
    environment:
      RTE_SDK: "{{ homedir }}/{{ DPDK_ver }}"
      RTE_TARGET: "x86_64-native-linuxapp-gcc"

  - name: clone lagopus src from github
    git:  repo=https://github.com/lagopus/lagopus.git
          dest={{ homedir }}/{{lagopus_ver}}
          version=HEAD

  - name: install pkgs for lagopus compile
    apt: name={{ item }}
    with_items:
      - libexpat-dev
      - libgmp-dev
      - libssl-dev
      - libpcap-dev
      - byacc
      - flex
      - python-dev
      - python-pastedeploy
      - python-paste
      - python-twisted


  - name: build and install lagopus
    shell: "./configure --with-dpdk-dir=${RTE_SDK} && make OPT_CFLAGS=\"-O3 -fomit-frame-pointer\" && make install"
    args:
      chdir: "{{ homedir }}/{{ lagopus_ver }}"
      creates: "/usr/local/sbin/lagopus"
    environment:
      RTE_SDK: "{{ homedir }}/{{ DPDK_ver }}"

  - name: rebooting!
    shell: reboot

でも,パフォーマンスの問題もあって,v0.1.1を使う場面もあるからそのバージョン切り替えもすんなり行くようなplaybookを作る必要がありそう.