Commit 09fe4308 by e0d

Merge pull request #165 from edx/e0d/forum-rework

DO NOT MERGE: initial commit of forum related roles
parents eca9c708 f93cbd03
...@@ -2,3 +2,6 @@ ...@@ -2,3 +2,6 @@
*.pyc *.pyc
.idea/ .idea/
.vagrant .vagrant
\#*\#
*~
.#*
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
\ No newline at end of file
- name: elasticsearch | check for elasticsearch
command: test -f /var/tmp/elasticsearch-${elasticsearch_version}.deb
ignore_errors: true
register: elasticsearch_present
- name: elasticsearch | download elasticsearch
get_url: url={{ elasticsearch_url }} dest=/var/tmp/{{ elasticsearch_file }}
when: elasticsearch_present|failed
tags:
- elasticsearch
- install
- name: elasticsearch | check elasticsearch version
shell: test -n "$(dpkg --list elasticsearch | grep {{ elasticsearch_version }})"
ignore_errors: true
register: elasticsearch_installed
- name: elasticsearch | install elasticsearch from local package
shell: executable=/bin/bash dpkg -i /var/tmp/elasticsearch-${elasticsearch_version}.deb
when: elasticsearch_installed|failed
tags:
- elasticsearch
- install
---
elasticsearch_version: "0.90.2"
elasticsearch_sha: "397227ce37f616734f39f6e93539c9eaa82bec9"
elasticsearch_file: "elasticsearch-${elastic_search_version}.deb"
elasticsearch_url: "https://download.elasticsearch.org/elasticsearch/elasticsearch/{{ elastic_search_file }}"
\ No newline at end of file
- name: forum | restart the forum service
service: name=cs_comments_service state=restarted
\ No newline at end of file
- name: forum | git checkout forum repo into {{ forum_code_dir }}
git: dest={{ forum_code_dir }} repo={{ forum_source_repo }} version={{ forum_version }}
sudo: yes
sudo_user: "{{ forum_user }} "
notify:
- forum | restart the forum service
tags:
- forum
- deploy
- name: forum | install comments service bundle
shell: executable=/bin/bash {{ forum_home }}/.rbenv/shims/bundle install chdir={{ forum_code_dir }}
sudo: yes
sudo_user: "{{ forum_user }}"
notify:
- forum | restart the forum service
tags:
- forum
- deploy
\ No newline at end of file
---
#
# This role depends upon the rbenv role which needs to
# be included in the same playbook prior to this role.
#
- name: forum | setup the forum env
template: src=forum_env.j2 dest={{ forum_home }}/forum_env owner={{ forum_user }} group={{ forum_user }}
notify:
- forum | restart the forum service
tags:
- forum
- update
- name: forum | ensure .bashrc exists
shell: touch {{ forum_home }}/.bashrc
sudo: true
sudo_user: "{{ forum_user }}"
tags:
- forum
- update
- name: forum | add source of ruby_env to .bashrc
lineinfile:
dest="{{ forum_home }}/.bashrc"
regexp='. {{ forum_home }}/forum_env'
line='. {{ forum_home }}/forum_env'
notify:
- forum | restart the forum service
tags:
- forum
- update
- name: forum | copy cs_comments_service SysVunit script
template: src=cs_comments_service.j2 dest=/etc/init.d/cs_comments_service owner=root group=root mode=750
notify:
- forum | restart the forum service
tags:
- forum
- install
only_if: "'${ansible_distribution}' == 'Debian'"
- name: forum | copy cs_comments_service upstart script
template: src=cs_comments_service.conf.j2 dest=/etc/init/cs_comments_service.conf owner=root group=root mode=750
notify:
- forum | restart the forum service
tags:
- forum
- install
only_if: "'${ansible_distribution}' == 'Ubuntu'"
- include: deploy.yml
- include: test.yml
\ No newline at end of file
---
- name: forum | test that the required service are listening
wait_for: port={{ item.port }} timeout=1
with_items: "{{ forum_services }}"
tags:
- forum
- test
\ No newline at end of file
# {{ ansible_managed }}
description "Comments Service"
start on runlevel [2345]
stop on runlevel [!2345]
env PID=/var/tmp/comments_service.pid
chdir {{ forum_code_dir }}
exec {{forum_home}}/.rbenv/shims/ruby app.rb
\ No newline at end of file
#!/bin/sh
# {{ ansible_managed }}
### BEGIN INIT INFO
# Provides: cs_comments_service
# Required-Start: $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Sinatra process for cs_comments_service
### END INIT INFO
USER={{ forum_user }}
NAME="cs_comments_service"
RETVAL=0
APP_ROOT={{ forum_code_dir }}
DAEMON={{ forum_home }}/.rbenv/shims/ruby
PID=/var/tmp/cs_comments_service.pid
OPTIONS="app.rb"
# source function library
. /lib/lsb/init-functions
start()
{
echo "Starting $NAME."
start-stop-daemon -b --start --pidfile ${PID} -m -c ${USER} -d ${APP_ROOT} --exec ${DAEMON} -- ${OPTIONS}
}
stop()
{
if [ -f ${PID} ]; then
echo "Stopping $NAME"
kill $(cat ${PID})
fi
}
reload()
{
echo "Reloading $NAME:"
if [ -f ${PID} ]
then kill -HUP `cat ${PID}` && echo "OK" || echo "failed";
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
reload
;;
reload)
reload
;;
force-reload)
stop && start
;;
*)
echo "Usage: $0 {start|stop|restart}"
RETVAL=1
esac
exit $RETVAL
# {{ ansible_managed }}
#
# This file is sourced in .bashrc.
# The environment variables are used by the cs_comments_service
# to configure itself at start-time.
#
export MONGOHQ_USER="{{ forum_mongo_user }}"
export MONGOHQ_PASS="{{ forum_mongo_password }}"
export RACK_ENV="{{ forum_rack_env }}"
export SINATRA_ENV="{{ forum_sinatra_env }}"
export API_KEY="{{ forum_api_key }}"
export SEARCH_SERVER="{{ forum_elasticsearch_url }}"
export MONGOHQ_URL="{{ forum_mongo_url }}"
\ No newline at end of file
# {{ ansible_managed }}
export JAVA_HOME="{{ java_home }}"
export PATH=$JAVA_HOME/bin:$PATH
\ No newline at end of file
---
forum_user: "forum"
forum_home: "/opt/forum"
forum_ruby_version: "1.9.3-p448"
forum_code_dir: "{{ forum_home }}/cs_comments_service"
forum_source_repo: "https://github.com/edx/cs_comments_service.git"
forum_version: "HEAD"
forum_mongo_user: "cs_comments_service"
forum_mongo_password: "password"
forum_mongo_host: "localhost"
forum_mongo_port: "27010"
forum_mongo_url: "mongodb://{{ forum_mongo_user }}:{{ forum_mongo_password }}@{{ formum_mongo_host }}:{{ forum_mongo_port }}/{{ forum_mongo_database }}"
forum_rack_env: "development"
forum_sinatra_env: "development"
forum_api_id: "tX5Dslg1y3OsCpFzRq"
forum_elasticsearch_host: "localhost"
forum_elasticsearch_port: "9200"
forum_elasticsearch_url: "http://{{ forum_elasticsearch_host }}:{{ forum_elasticsearch_port }}"
#
# test config
#
#
# The following services should be listening on the associated
# ports when the role has been successfully created.
#
forum_services:
- {service: "sinatra", host: "localhost", port: "4567"}
- {service: "mongo", host: "{{ forum_mongo_host }}", port: "27017"}
- {service: "mongo", host: "{{ forum_mongo_host }}", port: "28017"}
- {service: "elasticsearch", host: "{{ forum_elasticsearch_host }}", port: "9200"}
- {service: "elasticsearch", host: "{{ forum_elasticsearch_host }}", port: "9300"}
\ No newline at end of file
---
- name: install python-pymongo (req for ansible)
pip: name=pymongo
- name: install mongo server and recommends
apt: pkg=mongodb-server state=present install_recommends=yes
- name: stop mongo service
service: name=mongodb state=stopped
- name: move mongodb to /mnt
command: mv /var/lib/mongodb /mnt/. creates=/mnt/mongodb
- name: create mongodb symlink
file: src=/mnt/mongodb dest=/var/lib/mongodb state=link
- name: start mongo service
service: name=mongodb state=started
- name: wait for mongo server to start
wait_for: port=27017 delay=2
- name: create a mongodb user
mongodb_user: >
database=cs_comments_service
name=cs_comments_service
password=password
state=present
\ No newline at end of file
- name: oraclejdk | check for Oracle Java version {{ oraclejdk_base }}
command: test -d /usr/lib/jvm/{{ oraclejdk_base }}
ignore_errors: true
register: oraclejdk_present
tags:
- oraclejdk
- install
- name: oraclejdk | download Oracle Java
shell: executable="/bin/bash curl -b gpw_e24=http%3A%2F%2Fwww.oracle.com -O -L {{ oraclejdk_url }} chdir=/var/tmp" creates="/var/tmp/{ oraclejdk_file }"
when: oraclejdk_present|failed
- name: oraclejdk | install Oracle Java
shell: exectuable=/bin/bash mkdir -p /usr/lib/jvm && tar -C /usr/lib/jvm -zxvf /var/tmp/{{ oraclejdk_file }} creates="/usr/lib/jvm/{{ oraclejdk_base }}"
sudo: true
when: oraclejdk_present|failed
tags:
- oraclejdk
- install
- name: oraclejdk | create symlink expected by elasticsearch
file: src=/usr/lib/jvm/{{ oraclejdk_base }} dest={{ oraclejdk_link }} state=link
when: oraclejdk_present|failed
tags:
- oraclejdk
- install
- name: oraclejdk | add JAVA_HOME for Oracle Java
template: src=java.sh.j2 dest=/etc/profile.d/java.sh owner=root group=root mode=0755
when: oraclejdk_present|failed
tags:
- oraclejdk
- install
\ No newline at end of file
export JAVA_HOME="{{ java_link }}"
export PATH=$JAVA_HOME/bin:$PATH
---
oraclejdk_version: "7u25"
# what the archive unpacks to
oraclejdk_base: "jdk1.7.0_25"
oraclejdk_build: "b15"
oraclejdk_platform: "linux"
oraclejdk_arch: "x64"
oraclejdk_file: "jdk-{{ oraclejdk_version }}-{{ oraclejdk_platform }}-{{ oraclejdk_arch }}.tar.gz"
oraclejdk_url: "http://download.oracle.com/otn-pub/java/jdk/{{ oraclejdk_version }}-{{ oraclejdk_build }}/{{ oraclejdk_file }}"
oraclejdk_link: "/usr/lib/jvm/java-7-oracle"
#
# cribbed from https://github.com/mmoya/ansible-playbooks/blob/master/rbenv/main.yml
# with a number of changes.
#
- fail: rbenv_user required for role
when: rbenv_user is not defined
- fail: rbenv_user_home required for role
when: rbenv_user_home is not defined
- fail: rbenv_ruby_version required for role
when: rbenv_ruby_version is not defined
#
# It's unfortunate that this needs to happen here,
# but the rbenv needs to exist when the service
# that relies on it is provisioned and the service
# user and it's home needs to exist for rbenv to
# install into.
#
- name: rbenv | create rbenv owner $forum_user
user: name=$forum_user state=present shell=/bin/bash home=$forum_home
tags:
- forum
- update
- name: rbenv | install build depends
apt: pkg=$item state=present install_recommends=no
with_items:
- build-essential
- git
- libcurl4-openssl-dev
- libmysqlclient-dev
- libreadline-dev
- libssl-dev
- libxml2-dev
- libxslt1-dev
- zlib1g-dev
tags:
- ruby
- install
- name: rbenv | update rbenv repo
git: repo=https://github.com/sstephenson/rbenv.git dest={{ rbenv_user_home }}/.rbenv version={{ rbenv_version }}
sudo: true
sudo_user: "{{ rbenv_user }}"
tags:
- ruby
- install
- name: rbenv | ensure .bashrc exists
shell: touch {{ rbenv_user_home }}/.bashrc
sudo: true
sudo_user: "{{ rbenv_user }}"
tags:
- ruby
- update
- name: rbenv | drop a bash_profile
copy: src=../../common/files/bash_profile dest={{ rbenv_user_home }}/.bash_profile owner={{ rbenv_user }} group={{ rbenv_user }}
- name: rbenv | ensure ruby_env exists
template: src=ruby_env.j2 dest={{ rbenv_user_home }}/ruby_env owner={{ rbenv_user }} group={{ rbenv_user }}
tags:
- ruby
- update
- name: rebenv | add source of ruby_env to .bashrc
lineinfile:
dest="{{ rbenv_user_home }}/.bashrc"
regexp='. {{ rbenv_user_home }}/ruby_env'
line='. {{ rbenv_user_home }}/ruby_env'
- name: rbenv | drop a bash_profile
copy: src=../../common/files/bash_profile dest={{ rbenv_user_home }}/.bash_profile owner={{ rbenv_user }} group={{ rbenv_user }}
- name: rbenv | check ruby-build installed
command: test -x /usr/local/bin/ruby-build
register: rbuild_present
ignore_errors: yes
tags:
- ruby
- install
- name: rbenv | create temporary directory
command: mktemp -d
register: tempdir
sudo: true
sudo_user: "{{ rbenv_user }}"
when: rbuild_present|failed
tags:
- ruby
- install
- name: rbenv | clone ruby-build repo
git: repo=https://github.com/sstephenson/ruby-build.git dest=${tempdir.stdout}/ruby-build
when: rbuild_present|failed
sudo: true
sudo_user: "{{ rbenv_user }}"
tags:
- ruby
- install
- name: rbenv | install ruby-build
command: ./install.sh chdir={{ tempdir.stdout }}/ruby-build
when: rbuild_present|failed
tags:
- ruby
- install
- name: rbenv | remove temporary directory
file: path={{ tempdir.stdout }} state=absent
when: rbuild_present|failed
tags:
- ruby
- install
- name: rbenv | check ruby {{ rbenv_ruby_version }} installed
shell: "{{ rbenv_user_home }}/.rbenv/bin/rbenv versions | grep {{ rbenv_ruby_version }}"
register: ruby_installed
sudo: true
sudo_user: "{{ rbenv_user }}"
ignore_errors: yes
tags:
- ruby
- install
- name: rbenv | install ruby {{ rbenv_ruby_version }}
shell: "{{ rbenv_user_home }}/.rbenv/bin/rbenv install {{ rbenv_ruby_version }}"
when: ruby_installed|failed
sudo: true
sudo_user: "{{ rbenv_user }}"
tags:
- ruby
- install
- name: rbenv | set global ruby {{ rbenv_ruby_version }}
shell: "{{rbenv_user_home }}/.rbenv/bin/rbenv global {{ rbenv_ruby_version }}"
sudo: true
sudo_user: "{{ rbenv_user }}"
when: ruby_installed|failed
tags:
- ruby
- install
- name: rbenv | install bundler
shell: "{{ rbenv_user_home }}/.rbenv/shims/gem install bundler -v {{ rbenv_bundler_version }}"
sudo: true
sudo_user: "{{ rbenv_user }}"
tags:
- ruby
- install
- name: rbenv | rehash
shell: "{{rbenv_user_home}}/.rbenv/bin/rbenv rehash"
sudo: true
sudo_user: "{{ rbenv_user }}"
when: ruby_installed|failed
tags:
- ruby
- install
\ No newline at end of file
##
## Managed by Ansible, do not edit.
##
export RBENV_ROOT="{{ rbenv_root }}"
export PATH=$RBENV_ROOT/bin/:$PATH
eval "$(rbenv init -)"
---
rbenv_version: 'v0.4.0'
rbenv_bundler_version: '1.3.2'
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment