Fixes the Mistral Docker image
Refactored to make the docker stuff self contained and removed the unnecessary files from the root directory. Also created a readme file to concretize how this feature works. Also added an example script to set up Mistral with MySQL. Closes-Bug: #1585911 Change-Id: I7fbcccb9d7ad168c5391e71326b205d074ab01ab Signed-off-by: Andras Kovi <akovi@nokia.com>
This commit is contained in:
parent
a50dcfce4e
commit
7b6d76659a
38
Dockerfile
38
Dockerfile
@ -1,38 +0,0 @@
|
|||||||
FROM ubuntu:14.04
|
|
||||||
MAINTAINER hardik.parekh@nectechnologies.in
|
|
||||||
|
|
||||||
#Set Up RabbitMQ.
|
|
||||||
RUN sudo apt-get update && apt-get install -y rabbitmq-server
|
|
||||||
|
|
||||||
#Mistral Installation.
|
|
||||||
RUN sudo apt-get update && apt-get install -y python-dev python-setuptools libffi-dev libxslt1-dev libxml2-dev libyaml-dev libssl-dev git python-pip
|
|
||||||
RUN sudo pip install tox==1.6.1
|
|
||||||
RUN mkdir -p /opt/stack/mistral
|
|
||||||
ADD . /opt/stack/mistral
|
|
||||||
WORKDIR /opt/stack/mistral
|
|
||||||
RUN pip install -r requirements.txt
|
|
||||||
RUN pip install .
|
|
||||||
RUN mkdir /etc/mistral
|
|
||||||
RUN oslo-config-generator --config-file tools/config/config-generator.mistral.conf --output-file /etc/mistral/mistral.conf
|
|
||||||
RUN python tools/sync_db.py --config-file /etc/mistral/mistral.conf
|
|
||||||
|
|
||||||
#python-mistralclient Installation.
|
|
||||||
RUN pip install python-mistralclient
|
|
||||||
|
|
||||||
#Configure Mistral.
|
|
||||||
RUN sed -ri '/\[oslo_messaging_rabbit\]\//rabbit_userid/a rabbit_userid = $RABBIT_USERID' /etc/mistral/mistral.conf
|
|
||||||
RUN sed -ri '/\[oslo_messaging_rabbit\]\//rabbit_password/a rabbit_password = $RABBIT_PASSWORD' /etc/mistral/mistral.conf
|
|
||||||
RUN sed -ri '$a\auth_enable = false' /etc/mistral/mistral.conf
|
|
||||||
VOLUME ["/home/mistral"]
|
|
||||||
WORKDIR /home/mistral
|
|
||||||
|
|
||||||
#Configure post launch script.
|
|
||||||
RUN sudo apt-get install -y screen
|
|
||||||
RUN echo "#!/bin/bash" > /root/postlaunch.sh
|
|
||||||
RUN echo "sudo cp -n /etc/mistral/mistral.conf /home/mistral/" >> /root/postlaunch.sh
|
|
||||||
RUN echo "sudo cp -n /opt/stack/mistral/mistral.sqlite /home/mistral" >> /root/postlaunch.sh
|
|
||||||
RUN echo "sudo service rabbitmq-server start" >> /root/postlaunch.sh
|
|
||||||
RUN echo "screen -d -m mistral-server --server all --config-file /home/mistral/mistral.conf" >> /root/postlaunch.sh
|
|
||||||
RUN chmod 755 /root/postlaunch.sh
|
|
||||||
RUN echo "/root/postlaunch.sh" >>~/.bashrc
|
|
||||||
ENTRYPOINT /bin/bash
|
|
@ -1,12 +1,16 @@
|
|||||||
#!/bin/bash -xe
|
#!/bin/bash -xe
|
||||||
if [ -x "/usr/bin/apt-get" ]; then
|
|
||||||
sudo -E apt-get update
|
# TODO (akovi): This script is needed practically only for the CI builds.
|
||||||
sudo -E apt-get install -y docker.io apparmor cgroup-lite
|
# Should be moved to some other place
|
||||||
elif [ -x "/usr/bin/yum" ]; then
|
|
||||||
sudo -E yum install -y docker-io gpg
|
# install docker
|
||||||
else
|
curl -fsSL https://get.docker.com/ | sh
|
||||||
echo "No supported package manager installed on system. Supported: apt, yum"
|
|
||||||
exit 1
|
sudo service docker restart
|
||||||
fi
|
|
||||||
sudo docker build -t mistral-docker .
|
sudo -E docker pull ubuntu:14.04
|
||||||
sudo docker save mistral-docker | gzip > mistral-docker.tar.gz
|
|
||||||
|
# build image
|
||||||
|
sudo -E tools/docker/build.sh
|
||||||
|
|
||||||
|
sudo -E docker save mistral-all | gzip > mistral-docker.tar.gz
|
||||||
|
60
tools/docker/DOCKER_README.rst
Normal file
60
tools/docker/DOCKER_README.rst
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
Using Mistral with docker
|
||||||
|
=========================
|
||||||
|
|
||||||
|
In order to minimize the work needed to the current Mistral code, or be able
|
||||||
|
to spin up independent or networked Mistral instances in seconds, docker
|
||||||
|
containers are a very good option. This guide describes the process to
|
||||||
|
launch an all-in-one Mistral container.
|
||||||
|
|
||||||
|
|
||||||
|
Docker installation
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
In order to install the latest docker engine, run::
|
||||||
|
|
||||||
|
curl -fsSL https://get.docker.com/ | sh
|
||||||
|
|
||||||
|
If you are behind a proxy, additional configuration may be needed to be
|
||||||
|
able to execute further steps in the setup process. For detailed information
|
||||||
|
on this process, check out `the official guide at
|
||||||
|
<http://www.sqlite.org/omitted.html>`_.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Build the Mistral image
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
The `build.sh` script takes care of creating the `mistral-all` image locally.
|
||||||
|
|
||||||
|
|
||||||
|
Running Mistral
|
||||||
|
---------------
|
||||||
|
|
||||||
|
Start a RabbitMQ container::
|
||||||
|
|
||||||
|
docker run -d --name rabbitmq rabbitmq
|
||||||
|
|
||||||
|
Start Mistral::
|
||||||
|
|
||||||
|
docker run -d -p 8989:8989 --name mistral mistral-all
|
||||||
|
|
||||||
|
To execute commands inside the container::
|
||||||
|
|
||||||
|
docker exec -it mistral bash
|
||||||
|
|
||||||
|
E.g. to list workflows, issue::
|
||||||
|
|
||||||
|
mistral workflow-list
|
||||||
|
|
||||||
|
|
||||||
|
Running Mistral with MySQL
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Other than the simplest use cases will very probably fail with various errors
|
||||||
|
due to the default Sqlight database. It is highly recommended that, for
|
||||||
|
example, MySQL is used as database backend.
|
||||||
|
|
||||||
|
The `start_mistral_rabbit_mysql.sh` script sets up a rabbitmq container, a
|
||||||
|
mysql container and a mistral container to work together.
|
||||||
|
|
||||||
|
Check out the script for more detail.
|
22
tools/docker/Dockerfile
Normal file
22
tools/docker/Dockerfile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
FROM ubuntu:14.04
|
||||||
|
MAINTAINER hardik.parekh@nectechnologies.in
|
||||||
|
|
||||||
|
ADD . /opt/stack/mistral
|
||||||
|
|
||||||
|
RUN /opt/stack/mistral/tools/docker/Dockerfile_script.sh
|
||||||
|
|
||||||
|
EXPOSE 8989
|
||||||
|
|
||||||
|
VOLUME ["/opt/stack/mistral"]
|
||||||
|
VOLUME ["/home/mistral"]
|
||||||
|
WORKDIR /home/mistral
|
||||||
|
CMD mistral-server --server all --config-file /home/mistral/mistral.conf
|
||||||
|
|
||||||
|
ENV TINI_SHA 066ad710107dc7ee05d3aa6e4974f01dc98f3888
|
||||||
|
|
||||||
|
# Use tini as subreaper in Docker container to adopt zombie processes
|
||||||
|
RUN curl -fsSL https://github.com/krallin/tini/releases/download/v0.5.0/tini-static -o /bin/tini \
|
||||||
|
&& chmod +x /bin/tini \
|
||||||
|
&& echo "$TINI_SHA /bin/tini" | sha1sum -c -
|
||||||
|
|
||||||
|
ENTRYPOINT ["/bin/tini", "--"]
|
39
tools/docker/Dockerfile_script.sh
Executable file
39
tools/docker/Dockerfile_script.sh
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#! /bin/bash -xe
|
||||||
|
#Mistral Installation.
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
apt-get -qq update
|
||||||
|
apt-get install -y \
|
||||||
|
curl \
|
||||||
|
git \
|
||||||
|
libffi-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
libxslt1-dev \
|
||||||
|
libyaml-dev \
|
||||||
|
mc \
|
||||||
|
python-dev \
|
||||||
|
python-pip \
|
||||||
|
python-setuptools \
|
||||||
|
|
||||||
|
sudo pip install tox==1.6.1 python-mistralclient
|
||||||
|
|
||||||
|
cd /opt/stack/mistral
|
||||||
|
pip install -r requirements.txt
|
||||||
|
pip install .
|
||||||
|
|
||||||
|
mkdir -p /home/mistral
|
||||||
|
cd /home/mistral
|
||||||
|
oslo-config-generator --config-file /opt/stack/mistral/tools/config/config-generator.mistral.conf --output-file /home/mistral/mistral.conf
|
||||||
|
python /opt/stack/mistral/tools/sync_db.py --config-file /home/mistral/mistral.conf
|
||||||
|
|
||||||
|
#Configure Mistral.
|
||||||
|
sed -i 's/\[database\]/\[database\]\nconnection = sqlite:\/\/\/\/home\/mistral\/mistral.sqlite/' /home/mistral/mistral.conf
|
||||||
|
sed -i 's/\[oslo_messaging_rabbit\]/\[oslo_messaging_rabbit\]\nrabbit_host = rabbitmq/' /home/mistral/mistral.conf
|
||||||
|
sed -i 's/\[pecan\]/\[pecan\]\nauth_enable = false/' /home/mistral/mistral.conf
|
||||||
|
|
||||||
|
# install pyv8 to be able to run javscript actions (note that this breaks
|
||||||
|
# portability because of architecture dependent binaries)
|
||||||
|
|
||||||
|
curl -k "https://raw.githubusercontent.com/emmetio/pyv8-binaries/master/pyv8-linux64.zip" > /tmp/pyv8.zip
|
||||||
|
unzip /tmp/pyv8.zip -d /tmp/
|
||||||
|
cp /tmp/*PyV8* /usr/lib/python2.7/dist-packages/
|
9
tools/docker/build.sh
Executable file
9
tools/docker/build.sh
Executable file
@ -0,0 +1,9 @@
|
|||||||
|
#!/bin/bash -xe
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(dirname "$(readlink -e "${BASH_SOURCE[0]}")")"
|
||||||
|
|
||||||
|
(
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
docker build -t mistral-all -f Dockerfile ../..
|
||||||
|
)
|
38
tools/docker/start_mistral_rabbit_mysql.sh
Executable file
38
tools/docker/start_mistral_rabbit_mysql.sh
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#! /bin/bash -xe
|
||||||
|
|
||||||
|
docker rm -f mistral-mysql mistral-rabbitmq mistral | true
|
||||||
|
|
||||||
|
docker run -d --name mistral-mysql -e MYSQL_ROOT_PASSWORD=strangehat mysql
|
||||||
|
docker run -d --name mistral-rabbitmq rabbitmq
|
||||||
|
docker run -d --link mistral-mysql:mysql --link mistral-rabbitmq:rabbitmq --name mistral mistral-all
|
||||||
|
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
docker exec mistral-mysql mysql -u root -pstrangehat -e "CREATE DATABASE mistral; USE mistral; GRANT ALL ON mistral.* TO 'root'@'%' IDENTIFIED BY 'strangehat'"
|
||||||
|
|
||||||
|
docker exec mistral apt-get install -y libmysqlclient-dev
|
||||||
|
docker exec mistral pip install mysql-python
|
||||||
|
docker exec mistral cp mistral.conf mistral.conf.orig
|
||||||
|
docker exec mistral python -c "
|
||||||
|
import ConfigParser
|
||||||
|
c = ConfigParser.ConfigParser()
|
||||||
|
c.read('/home/mistral/mistral.conf')
|
||||||
|
c.set('database','connection','mysql://root:strangehat@mysql:3306/mistral')
|
||||||
|
c.set('oslo_messaging_rabbit', 'rabbit_host', 'rabbitmq')
|
||||||
|
c.set('pecan', 'auth_enable', 'false')
|
||||||
|
with open('/home/mistral/mistral.conf', 'w') as f:
|
||||||
|
c.write(f)
|
||||||
|
"
|
||||||
|
|
||||||
|
docker exec mistral python /opt/stack/mistral/tools/sync_db.py --config-file /home/mistral/mistral.conf
|
||||||
|
|
||||||
|
docker restart mistral
|
||||||
|
|
||||||
|
echo "
|
||||||
|
Enter the container:
|
||||||
|
docker exec -it mistral bash
|
||||||
|
|
||||||
|
List workflows
|
||||||
|
docker exec mistral mistral workflow-list
|
||||||
|
|
||||||
|
"
|
Loading…
Reference in New Issue
Block a user