Merge "Add dockerfiles for keystone fernet"
This commit is contained in:
commit
eb32318e3d
@ -1,34 +1,32 @@
|
|||||||
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
|
FROM {{ namespace }}/{{ image_prefix }}openstack-base:{{ tag }}
|
||||||
MAINTAINER {{ maintainer }}
|
MAINTAINER {{ maintainer }}
|
||||||
|
|
||||||
{% import "macros.j2" as macros with context %}
|
{% import "macros.j2" as macros with context %}
|
||||||
|
|
||||||
{% if install_type == 'binary' %}
|
{% if install_type == 'binary' %}
|
||||||
{% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
|
{% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
|
||||||
{% set keystone_packages = [
|
{% set keystone_base_packages = [
|
||||||
'openstack-keystone',
|
'openstack-keystone',
|
||||||
'python-keystoneclient',
|
'python-keystoneclient',
|
||||||
'httpd',
|
'httpd',
|
||||||
'mod_wsgi',
|
'mod_wsgi',
|
||||||
'python-ldappool'
|
'python-ldappool'
|
||||||
] %}
|
] %}
|
||||||
|
|
||||||
{{ macros.install_packages(keystone_packages | customizable("packages")) }}
|
{{ macros.install_packages(keystone_base_packages | customizable("packages")) }}
|
||||||
RUN mkdir -p /var/www/cgi-bin/keystone \
|
RUN mkdir -p /var/www/cgi-bin/keystone \
|
||||||
&& cp -a /usr/share/keystone/keystone.wsgi /var/www/cgi-bin/keystone/main \
|
&& cp -a /usr/share/keystone/keystone.wsgi /var/www/cgi-bin/keystone/main \
|
||||||
&& cp -a /usr/share/keystone/keystone.wsgi /var/www/cgi-bin/keystone/admin \
|
&& cp -a /usr/share/keystone/keystone.wsgi /var/www/cgi-bin/keystone/admin \
|
||||||
&& sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf
|
&& sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf
|
||||||
|
|
||||||
{% elif base_distro in ['ubuntu'] %}
|
{% elif base_distro in ['ubuntu'] %}
|
||||||
|
{% set keystone_base_packages = [
|
||||||
{% set keystone_packages = [
|
|
||||||
'keystone',
|
'keystone',
|
||||||
'apache2',
|
'apache2',
|
||||||
'libapache2-mod-wsgi',
|
'libapache2-mod-wsgi',
|
||||||
'python-ldappool'
|
'python-ldappool'
|
||||||
] %}
|
] %}
|
||||||
|
|
||||||
{{ macros.install_packages(keystone_packages | customizable("packages")) }}
|
{{ macros.install_packages(keystone_base_packages | customizable("packages")) }}
|
||||||
RUN mkdir -p /var/www/cgi-bin/keystone \
|
RUN mkdir -p /var/www/cgi-bin/keystone \
|
||||||
&& cp -a /usr/share/keystone/wsgi.py /var/www/cgi-bin/keystone/main \
|
&& cp -a /usr/share/keystone/wsgi.py /var/www/cgi-bin/keystone/main \
|
||||||
&& cp -a /usr/share/keystone/wsgi.py /var/www/cgi-bin/keystone/admin \
|
&& cp -a /usr/share/keystone/wsgi.py /var/www/cgi-bin/keystone/admin \
|
||||||
@ -38,28 +36,27 @@ RUN mkdir -p /var/www/cgi-bin/keystone \
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
{% elif install_type == 'source' %}
|
{% elif install_type == 'source' %}
|
||||||
{% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
|
{% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
|
||||||
|
{% set keystone_base_packages = [
|
||||||
{% set keystone_packages = [
|
|
||||||
'httpd',
|
'httpd',
|
||||||
'mod_wsgi',
|
'mod_wsgi',
|
||||||
'python-ldappool'
|
'python-ldappool'
|
||||||
] %}
|
] %}
|
||||||
{{ macros.install_packages(keystone_packages | customizable("packages")) }}
|
{{ macros.install_packages(keystone_base_packages | customizable("packages")) }}
|
||||||
RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf
|
RUN sed -i -r 's,^(Listen 80),#\1,' /etc/httpd/conf/httpd.conf
|
||||||
|
|
||||||
{% elif base_distro in ['ubuntu', 'debian'] %}
|
{% elif base_distro in ['ubuntu', 'debian'] %}
|
||||||
|
{% set keystone_base_packages = [
|
||||||
{% set keystone_packages = [
|
|
||||||
'apache2',
|
'apache2',
|
||||||
'libapache2-mod-wsgi',
|
'libapache2-mod-wsgi',
|
||||||
'python-ldappool'
|
'python-ldappool'
|
||||||
] %}
|
] %}
|
||||||
{{ macros.install_packages(keystone_packages | customizable("packages")) }}
|
{{ macros.install_packages(keystone_base_packages | customizable("packages")) }}
|
||||||
RUN echo > /etc/apache2/ports.conf
|
RUN echo > /etc/apache2/ports.conf
|
||||||
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
ADD keystone-archive /keystone-source
|
|
||||||
RUN ln -s keystone-source/* keystone \
|
ADD keystone-base-archive /keystone-base-source
|
||||||
|
RUN ln -s keystone-base-source/* keystone \
|
||||||
&& useradd --user-group keystone \
|
&& useradd --user-group keystone \
|
||||||
&& /var/lib/kolla/venv/bin/pip --no-cache-dir install --upgrade -c requirements/upper-constraints.txt /keystone \
|
&& /var/lib/kolla/venv/bin/pip --no-cache-dir install --upgrade -c requirements/upper-constraints.txt /keystone \
|
||||||
&& mkdir -p /etc/keystone /var/www/cgi-bin/keystone /var/log/apache2 /home/keystone \
|
&& mkdir -p /etc/keystone /var/www/cgi-bin/keystone /var/log/apache2 /home/keystone \
|
||||||
@ -74,11 +71,6 @@ RUN usermod -a -G kolla keystone \
|
|||||||
&& chown -R keystone: /var/www/cgi-bin/keystone \
|
&& chown -R keystone: /var/www/cgi-bin/keystone \
|
||||||
&& chmod 755 /var/www/cgi-bin/keystone/*
|
&& chmod 755 /var/www/cgi-bin/keystone/*
|
||||||
|
|
||||||
COPY keystone_bootstrap.sh /usr/local/bin/kolla_keystone_bootstrap
|
{% block keystone_base_footer %}{% endblock %}
|
||||||
COPY extend_start.sh /usr/local/bin/kolla_extend_start
|
|
||||||
RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_keystone_bootstrap
|
|
||||||
|
|
||||||
{% block keystone_footer %}{% endblock %}
|
|
||||||
{% block footer %}{% endblock %}
|
{% block footer %}{% endblock %}
|
||||||
|
{{ include_footer }}
|
||||||
{{ include_footer }}
|
|
25
docker/keystone/keystone-fernet/Dockerfile.j2
Normal file
25
docker/keystone/keystone-fernet/Dockerfile.j2
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
FROM {{ namespace }}/{{ image_prefix }}keystone-base:{{ tag }}
|
||||||
|
MAINTAINER {{ maintainer }}
|
||||||
|
{% import "macros.j2" as macros with context %}
|
||||||
|
|
||||||
|
{% if base_distro in ['fedora', 'centos', 'oraclelinux', 'rhel'] %}
|
||||||
|
{% set keystone_fernet_packages = [
|
||||||
|
'cronie',
|
||||||
|
'rsync'
|
||||||
|
] %}
|
||||||
|
{% elif base_distro in ['ubuntu', 'debian'] %}
|
||||||
|
{% set keystone_fernet_packages = [
|
||||||
|
'cron',
|
||||||
|
'rsync'
|
||||||
|
] %}
|
||||||
|
{% endif %}
|
||||||
|
{{ macros.install_packages(keystone_fernet_packages | customizable("packages")) }}
|
||||||
|
|
||||||
|
COPY fetch_fernet_tokens.py /usr/bin/
|
||||||
|
COPY keystone_bootstrap.sh /usr/local/bin/kolla_keystone_bootstrap
|
||||||
|
COPY extend_start.sh /usr/local/bin/kolla_extend_start
|
||||||
|
RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_keystone_bootstrap /usr/bin/fetch_fernet_tokens.py
|
||||||
|
|
||||||
|
{% block keystone_fernet_footer %}{% endblock %}
|
||||||
|
{% block footer %}{% endblock %}
|
||||||
|
{{ include_footer }}
|
12
docker/keystone/keystone-fernet/extend_start.sh
Normal file
12
docker/keystone/keystone-fernet/extend_start.sh
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
FERNET_SYNC=/usr/bin/fernet-node-sync.sh
|
||||||
|
FERNET_TOKEN_DIR="/etc/keystone/fernet-keys"
|
||||||
|
|
||||||
|
if [[ -f "${FERNET_SYNC}" ]]; then
|
||||||
|
${FERNET_SYNC}
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(stat -c %U:%G ${FERNET_TOKEN_DIR}) != "keystone:keystone" ]]; then
|
||||||
|
chown keystone:keystone ${FERNET_TOKEN_DIR}
|
||||||
|
fi
|
84
docker/keystone/keystone-fernet/fetch_fernet_tokens.py
Normal file
84
docker/keystone/keystone-fernet/fetch_fernet_tokens.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
# Basically this module will fetch the fernet tokens and compare them to the
|
||||||
|
# required time constrains to determine whether the host needs to resync with
|
||||||
|
# other nodes in the cluster.
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
import argparse
|
||||||
|
from datetime import datetime
|
||||||
|
from datetime import timedelta
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
TOKEN_PATH = '/etc/keystone/fernet-keys'
|
||||||
|
|
||||||
|
|
||||||
|
def json_exit(msg=None, failed=False, changed=False):
|
||||||
|
if type(msg) is not dict:
|
||||||
|
msg = {'msg': str(msg)}
|
||||||
|
msg.update({'failed': failed, 'changed': changed})
|
||||||
|
print(json.dumps(msg))
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
|
def has_file(filename_path):
|
||||||
|
if not os.path.exists(filename_path):
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def num_tokens():
|
||||||
|
_, _, files = os.walk(TOKEN_PATH).next()
|
||||||
|
return len(files)
|
||||||
|
|
||||||
|
|
||||||
|
def tokens_populated(expected):
|
||||||
|
return num_tokens() == int(expected)
|
||||||
|
|
||||||
|
|
||||||
|
def token_stale(seconds, filename='0'):
|
||||||
|
max_token_age = datetime.now() - timedelta(seconds=int(seconds))
|
||||||
|
filename_path = os.path.join(TOKEN_PATH, filename)
|
||||||
|
|
||||||
|
if not has_file(filename_path):
|
||||||
|
return True
|
||||||
|
modified_date = datetime.fromtimestamp(os.path.getmtime(filename_path))
|
||||||
|
return modified_date < max_token_age
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description='''Checks to see if a fernet
|
||||||
|
token no older than a desired time.''')
|
||||||
|
parser.add_argument('-t', '--time',
|
||||||
|
help='Time in seconds for a token rotation',
|
||||||
|
required=True)
|
||||||
|
parser.add_argument('-f', '--filename',
|
||||||
|
help='Filename of token to check',
|
||||||
|
default='0')
|
||||||
|
parser.add_argument('-n', '--number',
|
||||||
|
help='Number of tokens that should exist',
|
||||||
|
required=True)
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
json_exit({
|
||||||
|
'populated': tokens_populated(args.number),
|
||||||
|
'update_required': token_stale(args.time, args.filename),
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
43
docker/keystone/keystone-fernet/keystone_bootstrap.sh
Normal file
43
docker/keystone/keystone-fernet/keystone_bootstrap.sh
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
USERNAME=$1
|
||||||
|
GROUP=$2
|
||||||
|
|
||||||
|
function fail_json {
|
||||||
|
echo '{"failed": true, "msg": "'$1'", "changed": true}'
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function exit_json {
|
||||||
|
echo '{"failed": false, "changed": '"${changed}"'}'
|
||||||
|
}
|
||||||
|
|
||||||
|
changed="false"
|
||||||
|
keystone_bootstrap=$(keystone-manage --config-file /etc/keystone/keystone.conf fernet_setup --keystone-user ${USERNAME} --keystone-group ${GROUP} 2>&1)
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
fail_json "${keystone_bootstrap}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
changed=$(echo "${keystone_bootstrap}" | awk '
|
||||||
|
/Key repository is already initialized/ {count++}
|
||||||
|
END {
|
||||||
|
if (count == 1) changed="true"; else changed="false"
|
||||||
|
print changed
|
||||||
|
}'
|
||||||
|
)
|
||||||
|
|
||||||
|
exit_json
|
21
docker/keystone/keystone-ssh/Dockerfile.j2
Normal file
21
docker/keystone/keystone-ssh/Dockerfile.j2
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
FROM {{ namespace }}/{{ image_prefix }}keystone-base:{{ tag }}
|
||||||
|
MAINTAINER {{ maintainer }}
|
||||||
|
{% import "macros.j2" as macros with context %}
|
||||||
|
|
||||||
|
{% if base_distro in ['centos', 'fedora', 'oraclelinux', 'rhel'] %}
|
||||||
|
{% set keystone_ssh_packages = ['openssh-server'] %}
|
||||||
|
{% elif base_distro in ['ubuntu', 'debian'] %}
|
||||||
|
{% set keystone_ssh_packages = ['openssh-server'] %}
|
||||||
|
|
||||||
|
RUN mkdir -p /var/run/sshd \
|
||||||
|
&& chmod 0755 /var/run/sshd
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
{{ macros.install_packages(keystone_ssh_packages | customizable("packages")) }}
|
||||||
|
|
||||||
|
COPY extend_start.sh /usr/local/bin/kolla_extend_start
|
||||||
|
RUN chmod 755 /usr/local/bin/kolla_extend_start
|
||||||
|
|
||||||
|
{% block keystone_ssh_footer %}{% endblock %}
|
||||||
|
{% block footer %}{% endblock %}
|
||||||
|
{{ include_footer }}
|
20
docker/keystone/keystone-ssh/extend_start.sh
Normal file
20
docker/keystone/keystone-ssh/extend_start.sh
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ ! -L /dev/log ]]; then
|
||||||
|
ln -sf /var/lib/kolla/heka/log /dev/log
|
||||||
|
fi
|
||||||
|
|
||||||
|
SSH_HOST_KEY_TYPES=( "rsa" "dsa" "ecdsa" "ed25519" )
|
||||||
|
|
||||||
|
for key_type in ${SSH_HOST_KEY_TYPES[@]}; do
|
||||||
|
KEY_PATH=/etc/ssh/ssh_host_${key_type}_key
|
||||||
|
if [[ ! -f "${KEY_PATH}" ]]; then
|
||||||
|
ssh-keygen -q -t ${key_type} -f ${KEY_PATH} -N ""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
mkdir -p /var/lib/keystone/.ssh
|
||||||
|
|
||||||
|
if [[ $(stat -c %U:%G /var/lib/keystone/.ssh) != "keystone:keystone" ]]; then
|
||||||
|
sudo chown keystone: /var/lib/keystone/.ssh
|
||||||
|
fi
|
10
docker/keystone/keystone/Dockerfile.j2
Normal file
10
docker/keystone/keystone/Dockerfile.j2
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
FROM {{ namespace }}/{{ image_prefix }}keystone-base:{{ tag }}
|
||||||
|
MAINTAINER {{ maintainer }}
|
||||||
|
|
||||||
|
COPY keystone_bootstrap.sh /usr/local/bin/kolla_keystone_bootstrap
|
||||||
|
COPY extend_start.sh /usr/local/bin/kolla_extend_start
|
||||||
|
RUN chmod 755 /usr/local/bin/kolla_extend_start /usr/local/bin/kolla_keystone_bootstrap
|
||||||
|
|
||||||
|
{% block keystone_footer %}{% endblock %}
|
||||||
|
{% block footer %}{% endblock %}
|
||||||
|
{{ include_footer }}
|
@ -207,7 +207,7 @@ SOURCES = {
|
|||||||
'type': 'url',
|
'type': 'url',
|
||||||
'location': ('http://tarballs.openstack.org/ironic/'
|
'location': ('http://tarballs.openstack.org/ironic/'
|
||||||
'ironic-master.tar.gz')},
|
'ironic-master.tar.gz')},
|
||||||
'keystone': {
|
'keystone-base': {
|
||||||
'type': 'url',
|
'type': 'url',
|
||||||
'location': ('http://tarballs.openstack.org/keystone/'
|
'location': ('http://tarballs.openstack.org/keystone/'
|
||||||
'keystone-master.tar.gz')},
|
'keystone-master.tar.gz')},
|
||||||
|
Loading…
Reference in New Issue
Block a user