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
This commit is contained in:
Xicheng Chang 2014-12-12 10:59:51 -08:00
parent 294d29998a
commit 51ac20929b
11 changed files with 360 additions and 0 deletions

23
README.md Normal file
View File

@ -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`

View File

@ -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

View File

@ -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"

View File

@ -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

View File

@ -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

13
examples/Dockerfile Normal file
View File

@ -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

View File

@ -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-----

View File

@ -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': []
}

View File

@ -0,0 +1,9 @@
NAME = 'cobbler'
INSTANCE_NAME = 'cobbler'
SETTINGS = {
'cobbler_url': 'http://10.145.89.140/cobbler_api',
'credentials': {
'username': 'cobbler',
'password': 'cobbler'
}
}

View File

@ -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'

36
examples/scripts/start Normal file
View File

@ -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