From 51ac20929b8c9852edb34fecf14b6dfd4e56976e Mon Sep 17 00:00:00 2001 From: Xicheng Chang Date: Fri, 12 Dec 2014 10:59:51 -0800 Subject: [PATCH] Initial commmit docker/build/compass is for building compass docker image, which should be triggered automatically by CI(or other periodic jobs). under docker/build/scripts there is a sample start that can be included in Dockerfile(uncomment CMD["/root/sample_start"] when testing this image build. Change-Id: I05dbbde67bd82803971cf3f90a8dbea6d57b0776 --- README.md | 23 ++++ docker/build/compass/Dockerfile | 137 ++++++++++++++++++++++ docker/build/compass/conf/setup.conf | 5 + docker/build/compass/scripts/refresh.sh | 9 ++ docker/build/compass/scripts/sample_start | 56 +++++++++ examples/Dockerfile | 13 ++ examples/conf/chef-client.pem | 28 +++++ examples/conf/chef-icehouse.conf | 11 ++ examples/conf/cobbler.conf | 9 ++ examples/conf/compass.setting | 33 ++++++ examples/scripts/start | 36 ++++++ 11 files changed, 360 insertions(+) create mode 100644 README.md create mode 100644 docker/build/compass/Dockerfile create mode 100644 docker/build/compass/conf/setup.conf create mode 100644 docker/build/compass/scripts/refresh.sh create mode 100644 docker/build/compass/scripts/sample_start create mode 100644 examples/Dockerfile create mode 100644 examples/conf/chef-client.pem create mode 100644 examples/conf/chef-icehouse.conf create mode 100644 examples/conf/cobbler.conf create mode 100644 examples/conf/compass.setting create mode 100644 examples/scripts/start diff --git a/README.md b/README.md new file mode 100644 index 0000000..acca6f1 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +Compass Install +=============== + +How to use examples/compass? +--------------------------------------------- +1. Make sure you have docker installed. +2. Make sure you have working cobbler and chef servers, where all adapter related code has been updated to the latest. +3. Go to your chef server's web UI and create a client with admin privileges, name it as docker-controller. +4. You will have ONE CHANCE to copy the private key, copy it and paste it to replace `conf/chef-client.pem` +5. Go to `examples/compass/conf` directory +6. Edit chef-icehouse.conf, change '10.145.89.140' to your chef server's IP. +7. Edit cobbler.conf and change the IP to your cobbler server's IP. +8. Edit compass.setting + - COMPASS\_SUPPORTED\_PROXY: this is not supported in containerized compass, use the default value + - COMPASS\_SUPPORTED\_DEFAULT_NOPROXY: default value + - COMPASS\_SUPPORTED\_NTP\_SERVER: I am planning to move ntpd to cobbler container, so for now just point this value to any working compass server. + - COMPASS\_DNS\_SERVERS: cobbler server takes care of dns, use cobbler server IP + - COMPASS\_SUPPROTED\_DOMAINS: default + - COMPASS\_SUPPORTED\_DEFAULT_GATEWAY: default + - COMPASS\_SUPPORTED\_LOCAL\_REPO: use `http://$your\_host\_for\_docker:8080` +9. Go to `examples/compass` and run `docker build -t {image_name} .` +10. Once build finishes, run `docker run -d -p 8080:80 -i -t {image_name}` +11. celery log will be displayed on terminal, once the start script finishes running, open your web browser and go to `http://$your\_host\_for\_docker:8080` diff --git a/docker/build/compass/Dockerfile b/docker/build/compass/Dockerfile new file mode 100644 index 0000000..d31f11d --- /dev/null +++ b/docker/build/compass/Dockerfile @@ -0,0 +1,137 @@ +FROM centos:centos7 + +ADD conf/setup.conf /root/setup.conf +RUN chmod +x /root/setup.conf +## install yum repos and then packages +RUN source /root/setup.conf && \ + rpm -Uvh $EPEL7 >& /dev/null && \ + sed -i 's/^mirrorlist=https/mirrorlist=http/g' /etc/yum.repos.d/epel.repo && \ + rpm -Uvh $ATOMIC >& /dev/null && \ + sed -i 's/^mirrorlist=https/mirrorlist=http/g' /etc/yum.repos.d/atomic.repo +RUN yum clean all >& /dev/null && \ + yum update -y --skip-broken >&/dev/null && \ + yum install -y rsyslog logrotate ntp iproute openssh-clients python python-devel git wget rabbitmq-server mod_wsgi httpd squid yum-utils gcc net-snmp-utils net-snmp net-snmp-python openssl openssl098e ca-certificates redis mariadb mariadb-server mariadb-devel python-virtualenv python-setuptools MySQL-python + +# set up pip and install python virtual environment +RUN easy_install --upgrade pip +RUN pip install virtualenvwrapper + +# get compass-core code +WORKDIR /root +RUN source /root/setup.conf && \ + git clone $COMPASS_CORE +WORKDIR /root/compass-core +RUN mkdir /root/backup + +# update rsyslog conf +RUN cp -rn /etc/rsyslog.conf /root/backup +RUN rm -rf /etc/rsyslog.conf +RUN cp -rf misc/rsyslog/rsyslog.conf /etc/rsyslog.conf +RUN chmod 644 /etc/rsyslog.conf + +# update logrotate.d +RUN cp -rn /etc/logrotate.d /root/backup +RUN rm -rf /etc/logrotate.d/* +RUN cp -rf misc/logrotate.d/* /etc/logrotate.d/ +RUN chmod 644 /etc/logrotate.d/* + +# grant permission to httpd and mysqld log dirs +RUN mkdir /var/log/mysql +RUN chmod 777 /var/log/httpd +RUN chmod 777 /var/log/mysql + +# clone compass web +WORKDIR /root +RUN source /root/setup.conf && \ + git clone $COMPASS_WEB + +# setup python requirements +# remove 'mysql-python' from requirements as centos 7 supports the yum package +WORKDIR /root/compass-core +RUN sed -i 's/MySQL-python/#MySQL-python/g' requirements.txt +RUN source `which virtualenvwrapper.sh` && \ + mkvirtualenv --system-site-packages compass-core && \ + workon compass-core && \ + pip install -U -r requirements.txt + +# download local repo +WORKDIR /tmp +RUN source /root/setup.conf && \ + wget $LOCAL_REPO + +# snmp +# instead of moving mibs to /usr/local/share/snmp/mibs, centos7 puts mibs file at /usr/share/snmp/mibs/ + +WORKDIR /root/compass-core +RUN yes|cp -rf mibs/* /usr/share/snmp/mibs/ +RUN cp -rf misc/snmp/snmp.conf /etc/snmp/snmp.conf +RUN chmod 644 /etc/snmp/snmp.conf +RUN mkdir -p /var/lib/net-snmp/mib_indexes +RUN chmod 755 /var/lib/net-snmp/mib_indexes + +# install compass-core +WORKDIR /root/compass-core +RUN mkdir -p /etc/compass +RUN mkdir -p /opt/compass/bin +RUN mkdir -p /var/log/compass +RUN mkdir -p /var/log/chef +RUN mkdir -p /var/www/compass + +RUN cp -rf misc/apache/ods-server.conf /etc/httpd/conf.d/ods-server.conf +RUN cp -rf conf/* /etc/compass/ +RUN cp -rf bin/*.py /opt/compass/bin/ +RUN cp -rf bin/*.sh /opt/compass/bin/ +RUN cp -rf bin/compassd /usr/bin/ +RUN cp -rf bin/switch_virtualenv.py.template /opt/compass/bin/switch_virtualenv.py +RUN ln -s -f /opt/compass/bin/compass_check.py /usr/bin/compass +RUN ln -s -f /opt/compass/bin/compass_wsgi.py /var/www/compass/compass.wsgi +RUN cp -rf bin/chef/* /opt/compass/bin/ +RUN cp -rf bin/cobbler/* /opt/compass/bin/ +RUN cp -rf /usr/lib64/libcrypto.so.10 /usr/lib64/libcrypto.so + +# setup compass-core and related confs +RUN mkdir -p /opt/compass/db && \ + chmod -R 777 /opt/compass/db +RUN chmod -R 777 /var/log/compass +RUN chmod -R 777 /var/log/chef +RUN echo "export C_FORCE_ROOT=1" > /etc/profile.d/celery_env.sh +RUN chmod +x /etc/profile.d/celery_env.sh +WORKDIR /root/compass-core +RUN source `which virtualenvwrapper.sh` && \ + workon compass-core && \ + python setup.py install + +# compass web +WORKDIR /root/compass-web +RUN yum -y install tar +RUN mkdir -p /var/www/compass_web +RUN cp -rf v2 /var/www/compass_web/ +WORKDIR /tmp +RUN tar -xzvf local_repo.tar.gz +RUN mv -f local_repo/* /var/www/compass_web/v2/ + +# enable start-up script +ADD scripts/sample_start /root/sample_start +RUN chmod +x /root/sample_start + +# start: perform some post-installation tasks +# modify compass refresh to make it work in containers +ADD scripts/refresh.sh /opt/compass/bin/refresh.sh +RUN chmod +x /opt/compass/bin/refresh.sh + +# set python home for virtualenv +RUN sed -i "s|\$PythonHome|\/root\/\.virtualenvs\/compass-core|g" /opt/compass/bin/switch_virtualenv.py + +# add apache to root group +RUN usermod -a -G `groups root|awk '{print$3}'` apache + +# configure mysql +RUN /usr/bin/mysql_install_db && \ + chown -R mysql:mysql /var/lib/mysql + +# CMD ["/root/sample_start"] + +EXPOSE 80 +EXPOSE 22 +EXPOSE 123 +EXPOSE 3306 diff --git a/docker/build/compass/conf/setup.conf b/docker/build/compass/conf/setup.conf new file mode 100644 index 0000000..429eaab --- /dev/null +++ b/docker/build/compass/conf/setup.conf @@ -0,0 +1,5 @@ +LOCAL_REPO="https://s3-us-west-1.amazonaws.com/compass-local-repo/local_repo.tar.gz" +EPEL7="http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm" +ATOMIC="http://www6.atomicorp.com/channels/atomic/centos/7/x86_64/RPMS/atomic-release-1.0-19.el7.art.noarch.rpm" +COMPASS_CORE="https://git.openstack.org/stackforge/compass-core.git" +COMPASS_WEB="https://git.openstack.org/stackforge/compass-web.git" diff --git a/docker/build/compass/scripts/refresh.sh b/docker/build/compass/scripts/refresh.sh new file mode 100644 index 0000000..8da8788 --- /dev/null +++ b/docker/build/compass/scripts/refresh.sh @@ -0,0 +1,9 @@ +#/bin/bash +set -e +/opt/compass/bin/manage_db.py createdb +# /opt/compass/bin/clean_installers.py +# /opt/compass/bin/clean_installation_logs.py +/usr/sbin/apachectl -D NO_DETACH -D FOREGROUND +/usr/bin/redis-server & +CELERY_CONFIG_MODULE=compass.utils.celeryconfig_wrapper C_FORCE_ROOT=1 /opt/compass/bin/celery worker &> /tmp/celery-worker.log & +/opt/compass/bin/progress_update.py &> /tmp/progress_update.log diff --git a/docker/build/compass/scripts/sample_start b/docker/build/compass/scripts/sample_start new file mode 100644 index 0000000..71d0159 --- /dev/null +++ b/docker/build/compass/scripts/sample_start @@ -0,0 +1,56 @@ +#!/bin/bash + +# set python home +# sed -i "s|\$PythonHome|\/root\/\.virtualenvs\/compass-core|g" /opt/compass/bin/switch_virtualenv.py + +# add apache to root user group +# usermod -a -G `groups root|awk '{print$3}'` apache + +# activate virtualenv +source `which virtualenvwrapper.sh` +workon compass-core + +## mysql +# install db +# grant permission to mysql data dir +# /usr/bin/mysql_install_db +# chown mysql:mysql /var/lib/mysql +# chown mysql:mysql /var/lib/mysql/* +# chown mysql:mysql /var/lib/mysql/mysql/* +# chown mysql:mysql /var/lib/mysql/performance_schema/* + +# start mysqld service, push it to bg +/usr/bin/mysqld_safe > /dev/null 2>&1 & + +RET=1 +while [[ RET -ne 0 ]]; do + echo "waiting for mariadb to startup" + sleep 5 + mysql -uroot -e "status" > /dev/null 2>&1 + RET=$? +done + +echo "mariadb started" + +# set mysql with default username and password +mysqladmin -h127.0.0.1 --port=3306 -u root password root + +# create db 'compass' +mysql -h127.0.0.1 --port=3306 -uroot -proot -e "create database compass" + +## virtualenv +# create virtualenv +# source `which virtualenvwrapper.sh` +# mkvirtualenv --system-site-packages compass-core + +# install compass requirements + +# start compass services +/opt/compass/bin/manage_db.py createdb +/usr/sbin/apachectl -k start +/usr/sbin/rabbitmq-server & +/usr/bin/redis-server & +ln -s /root/.virtualenvs/compass-core/bin/celery /opt/compass/bin/celery +CELERY_CONFIG_MODULE=compass.utils.celeryconfig_wrapper C_FORCE_ROOT=1 /opt/compass/bin/celery worker &> /tmp/celery-worker.log & +/opt/compass/bin/progress_update.py &> /tmp/progress_update.log & +tail -f /dev/null diff --git a/examples/Dockerfile b/examples/Dockerfile new file mode 100644 index 0000000..d13c631 --- /dev/null +++ b/examples/Dockerfile @@ -0,0 +1,13 @@ +FROM compassindocker/compass:test + +ADD scripts/start /root/start +ADD conf/compass.setting /etc/compass/setting +ADD conf/cobbler.conf /etc/compass/os_installer/cobbler.conf +ADD conf/chef-icehouse.conf /etc/compass/package_installer/chef-icehouse.conf +ADD conf/chef-client.pem /etc/chef-client.pem + +RUN chmod +x /root/start + +CMD ["/root/start"] +EXPOSE 80 +EXPOSE 123 diff --git a/examples/conf/chef-client.pem b/examples/conf/chef-client.pem new file mode 100644 index 0000000..aaf83ec --- /dev/null +++ b/examples/conf/chef-client.pem @@ -0,0 +1,28 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEA16JNckh4jk4B/yuw42OkHTix7cFWr7DLvpUOFHecmw6IcfP2 +mLvY2FI+RFFtM91/hWy648TtNzK5/iUJeTNLjGAuthzGeTfGS9SR8rSfVjDd6zHt +gbHBTPPCeAydy9TfJpOhXWy8DHNiGjQKQd/RM8Sgzbp0JW1yMqSg+o64MgR8VFLL +VMG6kA1VFzLs+/3W14vaHZqF0y8N0ZQeAXnsx51zNQL2rlEpF3PMMAhgyJIZ+UZk +vDPu+i6wcabrq7yfmYg5B9OzAHkccAacCLjMz/2KCxHysuxkiElZ5g6qpHAlBQCw +yt/GY6+UYBWtKd7UrHCN9+k5a4hXom1VbSYmGQIDAQABAoIBAQDQtT7QhmRpGAfG +ursS27ZUsjNFNAR7OFt7szlVhhAF5CMcaE0dt3NCrReneEiCErkCoyKgolIXQvnS +inaI4KUW0WFk0qUnXlyHuM8qYrh17AZfRovjI/E8UhK/rzZruzXhWLKugjfgtS0W +v5fN+pu5x278sKMKNsx5R+6nlMujW/ztk6zFh4XQPH4WjbpEwNbGWtwktUu1ogTu +AKLUZUvjNej+qBo/rxaTvKnUw9YW7KRNmD97CJwiyATEMW3uCs/K+S1gMIW/pkOt +Nl3cokF94FwPxcSuJZMc6ZuGJrdjuUiwExO5Q9x5pxskbwYfK6Sq/cLy9ssqV8aL +Mam7xkKBAoGBAPR2Q+br5TXZHYv3y4FCKo6tcALloIdHAoVLrfSXeKe81b70j/Za +hGE9Wm5F0hbMK70l+NgDJnSbUUKmwDeU4eJbhrW68xuu8XP1jblwWLZ/RrqX4w8F +WqNbN4LokEu285xTZc2/MGyI4E7IB0LzCh7YvNyD8Mw5hoQeZqne76yNAoGBAOHP +uHOgu2lFokW8hvYg1tG1WqDAxNEThz+F6K1AhCh/rrKFqsns5baAr0A0nBOzfF52 +hnuQwjivoQ4LxapwDyYmbs0qmPSgOnKUAKuAlGYgiPzoqqAu7rPU6IsmbIa6Jex0 +JgbNNlFflvogQ7Ws1MJkVflBXtCRmIEC+dUeX0q9AoGBAM1H1oM+Sc6rEDWuEnTr +lAMVvz6fhuqyBXrbbys6WvY4CyF8CrvrjMh/FcYN2XqNXplKHql+E7fNiTI4Bqdl +3T0QcJGAeI8hm94tMCKtJcGyJTmhO+ksLM2KVpYWJr191xnJqm5YgxhQ5FMjg32D +y1bV19ow7W8BS2T8hmdVLtwtAoGAdf/9THcW2EkqJjUBdcbtWwLhDBYQA42n5HsO +ftKy/RLT8LhG6mQgGkGe0vdrBCSL/jUDy7h2tfaZO+TM82bBk9cLma0D5vl/8XYD +75sucTvZOgg/eZts446DwotetPy7ape7c1xzYQyJscWAfISHXdnez3TonicnQWuT +sFnBxCUCgYAmFe++2rfIDyTn/gYcZcTQeF9Ei9jAo8fGXuS/mqBNBwRLuctqoWsX +Qw4XZ+sMZQ2nQED9mC5skEpSKdetXZ0eMLd/JfnJhyqSlGqEbauD01mEdV/POYxG +oxpSg7bPw05mpaIzUCXw1mQpq7bZ/dQRArNs0wJwFi7sL1Pkf+/AHg== +-----END RSA PRIVATE KEY----- + diff --git a/examples/conf/chef-icehouse.conf b/examples/conf/chef-icehouse.conf new file mode 100644 index 0000000..8cb6e85 --- /dev/null +++ b/examples/conf/chef-icehouse.conf @@ -0,0 +1,11 @@ +NAME = 'chef_installer' +INSTANCE_NAME = 'chef_installer' +SETTINGS = { + 'chef_url': 'https://10.145.89.140', + 'chef_server_ip': '10.145.89.140', + 'chef_server_dns': 'compass', + 'key_dir': '/etc/chef-client.pem', + 'client_name': 'docker-controller', + 'databags': [] +} + diff --git a/examples/conf/cobbler.conf b/examples/conf/cobbler.conf new file mode 100644 index 0000000..3928d6b --- /dev/null +++ b/examples/conf/cobbler.conf @@ -0,0 +1,9 @@ +NAME = 'cobbler' +INSTANCE_NAME = 'cobbler' +SETTINGS = { + 'cobbler_url': 'http://10.145.89.140/cobbler_api', + 'credentials': { + 'username': 'cobbler', + 'password': 'cobbler' + } +} diff --git a/examples/conf/compass.setting b/examples/conf/compass.setting new file mode 100644 index 0000000..e4b2aaa --- /dev/null +++ b/examples/conf/compass.setting @@ -0,0 +1,33 @@ +CONFIG_DIR = '/etc/compass' +DATABASE_TYPE = 'mysql' +DATABASE_USER = 'root' +DATABASE_PASSWORD = 'root' +DATABASE_SERVER = '127.0.0.1:3306' +DATABASE_NAME = 'compass' +SQLALCHEMY_DATABASE_URI = '%s://%s:%s@%s/%s' % (DATABASE_TYPE, DATABASE_USER, DATABASE_PASSWORD, DATABASE_SERVER, DATABASE_NAME) +SQLALCHEMY_DATABASE_POOL_TYPE = 'instant' +INSTALLATION_LOGDIR = { + 'CobblerInstaller': '/var/log/cobbler/anamon', + 'ChefInstaller': '/var/log/chef' +} +DEFAULT_LOGLEVEL = 'info' +DEFAULT_LOGDIR = '/var/log/compass' +DEFAULT_LOGINTERVAL = 6 +DEFAULT_LOGINTERVAL_UNIT = 'h' +DEFAULT_LOGFORMAT = '%(asctime)s - %(filename)s - %(lineno)d - %(levelname)s - %(message)s' +WEB_LOGFILE = 'compass.log' +CELERY_LOGFILE = 'celery.log' +CELERYCONFIG_DIR = '/etc/compass' +CELERYCONFIG_FILE = 'celeryconfig' +PROGRESS_UPDATE_INTERVAL=30 +POLLSWITCH_INTERVAL=60 +SWITCHES = [ +] +TMPL_DIR = '/etc/compass/templates' +COMPASS_SUPPORTED_PROXY = 'http://10.145.89.140:3128' +COMPASS_SUPPORTED_DEFAULT_NOPROXY = ['127.0.0.1','10.145.89.140','comapss'] +COMPASS_SUPPORTED_NTP_SERVER = '10.145.89.140' +COMPASS_SUPPORTED_DNS_SERVERS = ['10.145.89.140'] +COMPASS_SUPPORTED_DOMAINS = ['ods.com'] +COMPASS_SUPPORTED_DEFAULT_GATEWAY = '10.145.88.1' +COMPASS_SUPPORTED_LOCAL_REPO = 'http://10.145.89.140' diff --git a/examples/scripts/start b/examples/scripts/start new file mode 100644 index 0000000..767b1ec --- /dev/null +++ b/examples/scripts/start @@ -0,0 +1,36 @@ +#!/bin/bash + +# activate virtualenv +source `which virtualenvwrapper.sh` +workon compass-core + +# start mysqld service, push it to bg +/usr/bin/mysqld_safe > /dev/null 2>&1 & + +RET=1 +while [[ RET -ne 0 ]]; do + echo "waiting for mariadb to startup" + sleep 5 + mysql -uroot -e "status" > /dev/null 2>&1 + RET=$? +done + +echo "mariadb started" + +# set mysql with default username and password +mysqladmin -h127.0.0.1 --port=3306 -u root password root + +# create db 'compass' +mysql -h127.0.0.1 --port=3306 -uroot -proot -e "create database compass" + +# start compass services +/opt/compass/bin/manage_db.py createdb +/usr/sbin/apachectl -k start +/usr/sbin/rabbitmq-server & +/usr/bin/redis-server & +/usr/sbin/ntpd & +ln -s /root/.virtualenvs/compass-core/bin/celery /opt/compass/bin/celery +CELERY_CONFIG_MODULE=compass.utils.celeryconfig_wrapper C_FORCE_ROOT=1 /opt/compass/bin/celery worker &> /tmp/celery-worker.log & +/opt/compass/bin/progress_update.py &> /tmp/progress_update.log & +touch /var/log/compass/celery.log +tail -f /var/log/compass/celery.log