diff --git a/README.rst b/README.rst
index 1e57d460a3..994a44a98f 100644
--- a/README.rst
+++ b/README.rst
@@ -80,6 +80,7 @@ Kolla provides images to deploy the following OpenStack projects:
- `Cinder `__
- `CloudKitty `__
- `Congress `__
+- `Cyborg `__
- `Designate `__
- `Dragonflow `__
- `EC2-API `__
diff --git a/docker/cyborg/cyborg-agent/Dockerfile.j2 b/docker/cyborg/cyborg-agent/Dockerfile.j2
new file mode 100644
index 0000000000..398e6b2983
--- /dev/null
+++ b/docker/cyborg/cyborg-agent/Dockerfile.j2
@@ -0,0 +1,46 @@
+FROM {{ namespace }}/{{ image_prefix }}cyborg-base:{{ tag }}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+
+{% block cyborg_agent_header %}{% endblock %}
+{% import "macros.j2" as macros with context %}
+
+{% if install_type == 'binary' %}
+
+RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \
+ && /bin/false
+
+{% elif install_type == 'source' %}
+
+{% set cyborg_agent_pip_packages = [
+ 'cursive'
+] %}
+
+{% endif %}
+
+RUN {{ macros.install_pip(cyborg_agent_pip_packages | customizable("pip_packages")) }}
+
+{% if base_package_type == 'rpm' %}
+
+ENV opae_libs_rpm_url=https://github.com/OPAE/opae-sdk/releases/download/1.1.0-2/opae-libs-1.1.0-2.x86_64.rpm
+ENV opae_libs_rpm_sha1sum=3a10f80d64be46bb8d99ba88548646d0e368a06e
+
+ENV opae_devel_rpm_url=https://github.com/OPAE/opae-sdk/releases/download/1.1.0-2/opae-devel-1.1.0-2.x86_64.rpm
+ENV opae_devel_rpm_sha1sum=461356b987b41843f60123d66195620bf1e4e28e
+
+RUN curl -sSL -o /tmp/opae-libs.rpm ${opae_libs_rpm_url} \
+ && echo "${opae_libs_rpm_sha1sum} /tmp/opae-libs.rpm" | sha1sum -c \
+ && curl -sSL -o /tmp/opae-devel.rpm ${opae_devel_rpm_url} \
+ && echo "${opae_devel_rpm_sha1sum} /tmp/opae-devel.rpm" | sha1sum -c \
+ && yum -y install /tmp/opae-libs.rpm /tmp/opae-devel.rpm \
+ && rm -f /tmp/opae-libs.rpm /tmp/opae-devel.rpm
+
+# NOTE(Bai Yongjun) Required packages are only supported Ubuntu16.04
+# Please check the details:https://github.com/OPAE/opae-sdk/releases/tag/1.1.0-2
+{% elif base_package_type == 'deb' %}
+
+RUN echo 'No supported packages' \
+ && /bin/false
+
+{% endif %}
+{% block cyborg_agent_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/docker/cyborg/cyborg-api/Dockerfile.j2 b/docker/cyborg/cyborg-api/Dockerfile.j2
new file mode 100644
index 0000000000..0d18572205
--- /dev/null
+++ b/docker/cyborg/cyborg-api/Dockerfile.j2
@@ -0,0 +1,42 @@
+FROM {{ namespace }}/{{ image_prefix }}cyborg-base:{{ tag }}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+
+{% block cyborg_api_header %}{% endblock %}
+{% import "macros.j2" as macros with context %}
+
+{% if install_type == 'binary' %}
+
+RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \
+ && /bin/false
+
+{% elif install_type == 'source' %}
+ {% if base_distro in ['centos', 'oraclelinux', 'rhel'] %}
+ {% set cyborg_api_packages = [
+ 'mod_ssl',
+ 'mod_wsgi'
+ ] %}
+ {% elif base_distro in ['debian', 'ubuntu'] %}
+ {% set cyborg_api_packages = [
+ 'apache2',
+ 'libapache2-mod-wsgi'
+ ] %}
+ {% endif %}
+
+{% endif %}
+
+{{ macros.install_packages(cyborg_api_packages | customizable("packages")) }}
+
+{% if base_distro in ['centos', 'oraclelinux', 'rhel'] %}
+RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf \
+ && sed -i -r 's,^(Listen 443),#\1,' /etc/httpd/conf.d/ssl.conf
+
+{% elif base_distro in ['debian', 'ubuntu'] %}
+RUN echo > /etc/apache2/ports.conf
+
+{% endif %}
+
+COPY extend_start.sh /usr/local/bin/kolla_cyborg_extend_start
+RUN chmod 755 /usr/local/bin/kolla_cyborg_extend_start
+
+{% block cyborg_api_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/docker/cyborg/cyborg-api/extend_start.sh b/docker/cyborg/cyborg-api/extend_start.sh
new file mode 100644
index 0000000000..a96619d932
--- /dev/null
+++ b/docker/cyborg/cyborg-api/extend_start.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+# Bootstrap and exit if KOLLA_BOOTSTRAP variable is set. This catches all cases
+# of the KOLLA_BOOTSTRAP variable being set, including empty.
+if [[ "${!KOLLA_BOOTSTRAP[@]}" ]]; then
+ cyborg-dbsync
+ exit 0
+fi
+
+if [[ "${KOLLA_BASE_DISTRO}" =~ debian|ubuntu ]]; then
+ # Loading Apache2 ENV variables
+ . /etc/apache2/envvars
+ rm -rf /var/run/apache2/*
+else
+ rm -rf /var/run/httpd/* /run/httpd/* /tmp/httpd*
+fi
diff --git a/docker/cyborg/cyborg-base/Dockerfile.j2 b/docker/cyborg/cyborg-base/Dockerfile.j2
new file mode 100644
index 0000000000..7e411b535d
--- /dev/null
+++ b/docker/cyborg/cyborg-base/Dockerfile.j2
@@ -0,0 +1,36 @@
+FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+
+{% block cyborg_header %}{% endblock %}
+
+{% import "macros.j2" as macros with context %}
+
+{{ macros.configure_user(name='cyborg') }}
+
+{% if install_type == 'binary' %}
+
+RUN echo '{{ install_type }} not yet available for {{ base_distro }}' \
+ && /bin/false
+
+{% elif install_type == 'source' %}
+
+ADD cyborg-base-archive /cyborg-base-source
+
+{% set cyborg_base_pip_packages = [
+ '/cyborg'
+] %}
+
+RUN ln -s cyborg-base-source/* cyborg \
+ && {{ macros.install_pip(cyborg_base_pip_packages | customizable("pip_packages")) }}
+
+{% endif %}
+
+COPY extend_start.sh /usr/local/bin/kolla_extend_start
+COPY cyborg_sudoers /etc/sudoers.d/kolla_cyborg_sudoers
+
+RUN chmod 750 /etc/sudoers.d \
+ && touch /usr/local/bin/kolla_cyborg_extend_start \
+ && chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_cyborg_extend_start
+
+{% block cyborg_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/docker/cyborg/cyborg-base/cyborg_sudoers b/docker/cyborg/cyborg-base/cyborg_sudoers
new file mode 100644
index 0000000000..63440026de
--- /dev/null
+++ b/docker/cyborg/cyborg-base/cyborg_sudoers
@@ -0,0 +1 @@
+%kolla ALL=(root) NOPASSWD: /usr/bin/chown -R cyborg\: /var/lib/cyborg/, /bin/chown -R cyborg\: /var/lib/cyborg/
diff --git a/docker/cyborg/cyborg-base/extend_start.sh b/docker/cyborg/cyborg-base/extend_start.sh
new file mode 100755
index 0000000000..10a58c626b
--- /dev/null
+++ b/docker/cyborg/cyborg-base/extend_start.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+# Create log dir for Cyborg logs
+CYBORG_LOG_DIR="/var/log/kolla/cyborg"
+if [[ ! -d "${CYBORG_LOG_DIR}" ]]; then
+ mkdir -p ${CYBORG_LOG_DIR}
+fi
+if [[ $(stat -c %U:%G ${CYBORG_LOG_DIR}) != "cyborg:kolla" ]]; then
+ chown cyborg:kolla ${CYBORG_LOG_DIR}
+fi
+if [[ $(stat -c %a ${CYBORG_LOG_DIR}) != "755" ]]; then
+ chmod 755 ${CYBORG_LOG_DIR}
+fi
+
+. /usr/local/bin/kolla_cyborg_extend_start
diff --git a/docker/cyborg/cyborg-conductor/Dockerfile.j2 b/docker/cyborg/cyborg-conductor/Dockerfile.j2
new file mode 100644
index 0000000000..de0211bda5
--- /dev/null
+++ b/docker/cyborg/cyborg-conductor/Dockerfile.j2
@@ -0,0 +1,7 @@
+FROM {{ namespace }}/{{ image_prefix }}cyborg-base:{{ tag }}
+LABEL maintainer="{{ maintainer }}" name="{{ image_name }}" build-date="{{ build_date }}"
+
+{% block cyborg_conductor_header %}{% endblock %}
+
+{% block cyborg_conductor_footer %}{% endblock %}
+{% block footer %}{% endblock %}
diff --git a/kolla/common/config.py b/kolla/common/config.py
index 4f2f250d68..4946e80bae 100755
--- a/kolla/common/config.py
+++ b/kolla/common/config.py
@@ -338,6 +338,10 @@ SOURCES = {
'type': 'git',
'reference': 'master',
'location': ('https://github.com/pulp/crane.git')},
+ 'cyborg-base': {
+ 'type': 'url',
+ 'location': ('$tarballs_base/cyborg/'
+ 'cyborg-master.tar.gz')},
'designate-base': {
'type': 'url',
'location': ('$tarballs_base/designate/'
@@ -1177,6 +1181,10 @@ USERS = {
'placement-user': {
'uid': 42482,
'gid': 42482,
+ },
+ 'cyborg-user': {
+ 'uid': 42483,
+ 'gid': 42483,
}
}
diff --git a/kolla/image/build.py b/kolla/image/build.py
index 6fbe58408c..7683d7904b 100755
--- a/kolla/image/build.py
+++ b/kolla/image/build.py
@@ -82,6 +82,7 @@ SKIPPED_IMAGES = {
"almanach-base",
"bifrost-base",
"blazar-base",
+ "cyborg-base",
"dragonflow-base",
"freezer-base",
"karbor-base",
@@ -109,6 +110,7 @@ SKIPPED_IMAGES = {
"cloudkitty-base",
"congress-base",
"crane",
+ "cyborg-base",
"dragonflow-base",
"ec2-api",
"freezer-base",
@@ -136,6 +138,7 @@ SKIPPED_IMAGES = {
],
'ubuntu+source': [
"crane",
+ "cyborg-base",
# There is no qdrouterd package for ubuntu bionic
"qdrouterd",
"tripleoclient",
@@ -150,6 +153,7 @@ SKIPPED_IMAGES = {
"cloudkitty-base",
"congress-base",
"crane",
+ "cyborg-base",
"dragonflow-base",
"ec2-api",
"freezer-base",
@@ -176,6 +180,7 @@ SKIPPED_IMAGES = {
],
'debian+source': [
"crane",
+ "cyborg-base",
"sensu-base",
"tripleoclient",
"tripleo-ui"
@@ -185,6 +190,7 @@ SKIPPED_IMAGES = {
"bifrost-base",
"blazar-base",
"crane",
+ "cyborg-base",
"dragonflow-base",
"freezer-base",
"karbor-base",
diff --git a/releasenotes/notes/add-cyborg-images-cab2b3a24a071c38.yaml b/releasenotes/notes/add-cyborg-images-cab2b3a24a071c38.yaml
new file mode 100644
index 0000000000..a1e68103fe
--- /dev/null
+++ b/releasenotes/notes/add-cyborg-images-cab2b3a24a071c38.yaml
@@ -0,0 +1,3 @@
+---
+features:
+ - Cyborg Docker images are available in Kolla