summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLiam R. Howlett <Liam.Howlett@WindRiver.com>2014-09-19 15:51:17 -0400
committerBruce Ashfield <bruce.ashfield@windriver.com>2014-09-22 11:46:42 -0400
commitbf51fa4f053a6aecb816ed7b4dcca64e9bd5b9b3 (patch)
tree02bdfd5520ab5c73183b2428baa42d686bb71d77
parentdcfac869bea8a501177c8419c8fd11c3ed03b21e (diff)
downloadmeta-cloud-services-bf51fa4f053a6aecb816ed7b4dcca64e9bd5b9b3.tar.gz
python-keystone: Add apache vhost server.
This patch set configures an apache vhost server on port 8081 which will serve as the main authentication method and documents the change in README.keystone. Signed-off-by: Liam R. Howlett <Liam.Howlett@WindRiver.com>
-rw-r--r--meta-openstack/Documentation/README.keystone83
-rw-r--r--meta-openstack/recipes-devtools/python/python-keystone/wsgi-keystone.conf25
-rw-r--r--meta-openstack/recipes-devtools/python/python-keystone_git.bb69
3 files changed, 161 insertions, 16 deletions
diff --git a/meta-openstack/Documentation/README.keystone b/meta-openstack/Documentation/README.keystone
new file mode 100644
index 0000000..f8da890
--- /dev/null
+++ b/meta-openstack/Documentation/README.keystone
@@ -0,0 +1,83 @@
1Summary
2=======
3
4This document is not intended to provide detail of how Keystone in general
5works, but rather it highlights how Keystone is integrated/configured into
6meta-cloud-services and also describes how Keystone is tested to ensure that
7Keystone Verification and Benchmarking components are working correctly.
8
9
10Keystone Overview
11==============
12
13Keystone provides authentication, authorization and service discovery
14mechanisms via HTTP primarily for use by projects in the OpenStack family. It
15is most commonly deployed as an HTTP interface to existing identity systems,
16such as LDAP.
17
18Keystone Deployment
19================
20
21Keystone is configured to use existing deployment (by using deployment
22configuration file /etc/keystone/keystone{.conf,paste.ini}). In addition to the
23default configuration files, meta-cloud-services installs a custom httpd file
24apache configuration as /etc/apache2/conf.d/wsgi-keystone.conf along with
25adding the 8081 port to the default /etc/apache2/httpd.conf. This file
26starts a vhost on port 8081 which will be the replacement for the default server
27running on port 35357 and 5000 in the future.
28
29
30Keystone Verification
31==================
32
33By default, Keystone verification performs the following steps:
34
35* git clone tempest source from upstream
36* setup virtualenv for this tempest
37* setup testr environment with virtualenv created above
38* create tempest.conf for this tempest
39* use testr and subunit.run module to run tempest
40
41However, meta-cloud-services already includes tempest which is also
42configured/modified to have low failure/error testcases, therefore it's desired
43to use this tempest (without using virtualenv) instead of letting Rally to
44download tempest and running it on virtualenv.
45
46
47The option "existing_tempest_config" in /etc/keystone/keystone.conf can be used
48to configure Keystone to either use the existing tempest or to download from
49upstream.
50
51If the option "existing_tempest_config" is not set then Keystone follows the
52default path. If "existing_tempest_config" is set to absolute path of tempest
53config folder (which contains tempest "tools" and .testr.conf, e.g.
54/etc/tempest) then Rally uses this existing tempest. By default,
55"existing_tempest_config" is set to "/etc/tempest/".
56
57
58Build Configuration Options
59===========================
60
61To have Keystone and tempest included in final built image, include layer
62meta-openstack-controller-test-config into Controller build and
63layer meta-openstack-compute-test-config into Compute build.
64
65
66Keystone Built-In Unit Tests
67=========================
68
69This section describes how to run Keystone built-in unit
70tests which are located at:
71
72 /usr/lib64/python2.7/site-packages/keystone/tests
73
74To run Keystone built-in unit test with nosetests:
75
76 $ cd /usr/lib64/python2.7/site-packages/keystone/tests
77 $ nosetests -v
78
79
80References
81==========
82
83https://wiki.openstack.org/wiki/Keystone
diff --git a/meta-openstack/recipes-devtools/python/python-keystone/wsgi-keystone.conf b/meta-openstack/recipes-devtools/python/python-keystone/wsgi-keystone.conf
new file mode 100644
index 0000000..91b95f6
--- /dev/null
+++ b/meta-openstack/recipes-devtools/python/python-keystone/wsgi-keystone.conf
@@ -0,0 +1,25 @@
1Listen 8081
2<VirtualHost *:8081>
3 ServerAdmin webmaster@localhost
4 WSGIApplicationGroup %{RESOURCE}
5 WSGIDaemonProcess keystone threads=15 display-name=%{GROUP}
6 WSGIProcessGroup keystone
7 WSGIScriptAlias /keystone/main /var/www/cgi-bin/keystone/main
8 WSGIScriptAlias /keystone/admin /var/www/cgi-bin/keystone/admin
9
10
11 <Location "/keystone">
12 Authtype none
13 </Location>
14
15 <Directory /var/www/cgi-bin/keystone/>
16 <IfVersion < 2.3>
17 Order allow,deny
18 Allow from all
19 </IfVersion>
20
21 <IfVersion >= 2.3>
22 Require all granted
23 </IfVersion>
24 </Directory>
25</VirtualHost>
diff --git a/meta-openstack/recipes-devtools/python/python-keystone_git.bb b/meta-openstack/recipes-devtools/python/python-keystone_git.bb
index a3511db..49aa278 100644
--- a/meta-openstack/recipes-devtools/python/python-keystone_git.bb
+++ b/meta-openstack/recipes-devtools/python/python-keystone_git.bb
@@ -14,6 +14,7 @@ SRC_URI = "git://github.com/openstack/${SRCNAME}.git;branch=master \
14 file://keystone-search-in-etc-directory-for-config-files.patch \ 14 file://keystone-search-in-etc-directory-for-config-files.patch \
15 file://keystone-remove-git-commands-in-tests.patch \ 15 file://keystone-remove-git-commands-in-tests.patch \
16 file://convert_keystone_backend.py \ 16 file://convert_keystone_backend.py \
17 file://wsgi-keystone.conf \
17 " 18 "
18 19
19SRCREV="73ad4036d62b3aa7cf50e11ddf7bee8278bbe4d0" 20SRCREV="73ad4036d62b3aa7cf50e11ddf7bee8278bbe4d0"
@@ -51,9 +52,9 @@ SERVICECREATE_PARAM_${SRCNAME}-setup = "name type description region publicurl a
51python () { 52python () {
52 flags = {'type':'identity',\ 53 flags = {'type':'identity',\
53 'description':'OpenStack Identity',\ 54 'description':'OpenStack Identity',\
54 'publicurl':"'http://${KEYSTONE_HOST}:5000/v2.0'",\ 55 'publicurl':"'http://${KEYSTONE_HOST}:8081/keystone/main/v2.0'",\
55 'adminurl':"'http://${KEYSTONE_HOST}:35357/v2.0'",\ 56 'adminurl':"'http://${KEYSTONE_HOST}:8081/keystone/admin/v2.0'",\
56 'internalurl':"'http://${KEYSTONE_HOST}:5000/v2.0'"} 57 'internalurl':"'http://${KEYSTONE_HOST}:8081/keystone/main/v2.0'"}
57 d.setVarFlags("SERVICECREATE_PARAM_%s-setup" % d.getVar('SRCNAME',True), flags) 58 d.setVarFlags("SERVICECREATE_PARAM_%s-setup" % d.getVar('SRCNAME',True), flags)
58} 59}
59 60
@@ -62,19 +63,38 @@ do_install_append() {
62 KEYSTONE_CONF_DIR=${D}${sysconfdir}/keystone 63 KEYSTONE_CONF_DIR=${D}${sysconfdir}/keystone
63 KEYSTONE_PACKAGE_DIR=${D}${PYTHON_SITEPACKAGES_DIR}/keystone 64 KEYSTONE_PACKAGE_DIR=${D}${PYTHON_SITEPACKAGES_DIR}/keystone
64 65
65 install -m 750 -d ${KEYSTONE_CONF_DIR} 66 APACHE_CONF_DIR=${D}${sysconfdir}/apache2/conf.d/
67 KEYSTONE_PY_DIR=${D}${datadir}/openstack-dashboard/openstack_dashboard/api/
68 KEYSTONE_CGI_DIR=${D}${localstatedir}/www/cgi-bin/keystone/
69
70 # Apache needs to read the configs.
71 install -m 755 -d ${KEYSTONE_CONF_DIR}
72 install -m 755 -d ${APACHE_CONF_DIR}
66 73
67 install -d ${D}${localstatedir}/log/${SRCNAME} 74 install -d ${D}${localstatedir}/log/${SRCNAME}
75 install -g users -m 755 -d ${KEYSTONE_CGI_DIR}
76 install -g users -m 755 -d ${KEYSTONE_PY_DIR}
68 77
69 install -m 600 ${WORKDIR}/keystone.conf ${KEYSTONE_CONF_DIR}/ 78 # Apache needs to read the keystone.conf
79 install -m 644 ${WORKDIR}/keystone.conf ${KEYSTONE_CONF_DIR}/
80 # Apache needs to read the wsgi-keystone.conf
81 install -m 644 ${WORKDIR}/wsgi-keystone.conf ${APACHE_CONF_DIR}
70 install -m 755 ${WORKDIR}/identity.sh ${KEYSTONE_CONF_DIR}/ 82 install -m 755 ${WORKDIR}/identity.sh ${KEYSTONE_CONF_DIR}/
71 install -m 600 ${S}/etc/logging.conf.sample \ 83 install -m 600 ${S}${sysconfdir}/logging.conf.sample \
72 ${KEYSTONE_CONF_DIR}/logging.conf 84 ${KEYSTONE_CONF_DIR}/logging.conf
73 install -m 600 ${S}/etc/policy.json ${KEYSTONE_CONF_DIR}/policy.json 85 install -m 600 ${S}${sysconfdir}/keystone.conf.sample \
74 install -m 600 ${S}/etc/keystone.conf.sample \
75 ${KEYSTONE_CONF_DIR}/keystone.conf.sample 86 ${KEYSTONE_CONF_DIR}/keystone.conf.sample
76 install -m 600 ${S}/etc/keystone-paste.ini \ 87 # Apache user needs to read these files.
88 install -m 644 ${S}${sysconfdir}/policy.json \
89 ${KEYSTONE_CONF_DIR}/policy.json
90 install -m 644 ${S}${sysconfdir}/keystone-paste.ini \
77 ${KEYSTONE_CONF_DIR}/keystone-paste.ini 91 ${KEYSTONE_CONF_DIR}/keystone-paste.ini
92 install -g users -m 644 ${S}/httpd/keystone.py \
93 ${KEYSTONE_PY_DIR}/keystone-httpd.py
94 install -g users -m 644 ${S}/httpd/keystone.py \
95 ${KEYSTONE_CGI_DIR}/admin
96 install -g users -m 644 ${S}/httpd/keystone.py \
97 ${KEYSTONE_CGI_DIR}/main
78 98
79 cp -r ${S}/examples ${KEYSTONE_PACKAGE_DIR} 99 cp -r ${S}/examples ${KEYSTONE_PACKAGE_DIR}
80 100
@@ -92,6 +112,14 @@ do_install_append() {
92 sed -e "s:%TOKEN_FORMAT%:${TOKEN_FORMAT}:g" \ 112 sed -e "s:%TOKEN_FORMAT%:${TOKEN_FORMAT}:g" \
93 -i ${KEYSTONE_CONF_DIR}/keystone.conf 113 -i ${KEYSTONE_CONF_DIR}/keystone.conf
94 114
115 sed "/# admin_endpoint = .*/a \
116 public_endpoint = http://${CONTROLLER_IP}:8081/keystone/main/ " \
117 -i ${KEYSTONE_CONF_DIR}/keystone.conf
118
119 sed "/# admin_endpoint = .*/a \
120 admin_endpoint = http://${CONTROLLER_IP}:8081/keystone/admin/ " \
121 -i ${KEYSTONE_CONF_DIR}/keystone.conf
122
95 if ${@base_contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; 123 if ${@base_contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)};
96 then 124 then
97 install -d ${D}${sysconfdir}/init.d 125 install -d ${D}${sysconfdir}/init.d
@@ -121,7 +149,7 @@ driver = keystone.identity.backends.hybrid_identity.Identity \
121\ 149\
122[assignment]\ 150[assignment]\
123driver = keystone.assignment.backends.hybrid_assignment.Assignment\ 151driver = keystone.assignment.backends.hybrid_assignment.Assignment\
124' ${D}/etc/keystone/keystone.conf 152' ${D}${sysconfdir}/keystone/keystone.conf
125 153
126 sed -i -e '/^\[ldap\]/a \ 154 sed -i -e '/^\[ldap\]/a \
127url = ldap://localhost \ 155url = ldap://localhost \
@@ -152,7 +180,7 @@ role_member_attribute = member \
152role_id_attribute = cn \ 180role_id_attribute = cn \
153role_name_attribute = ou \ 181role_name_attribute = ou \
154role_tree_dn = ou=Roles,${LDAP_DN} \ 182role_tree_dn = ou=Roles,${LDAP_DN} \
155' ${D}/etc/keystone/keystone.conf 183' ${D}${sysconfdir}/keystone/keystone.conf
156 184
157 install -m 0755 ${WORKDIR}/convert_keystone_backend.py \ 185 install -m 0755 ${WORKDIR}/convert_keystone_backend.py \
158 ${D}${sysconfdir}/keystone/convert_keystone_backend.py 186 ${D}${sysconfdir}/keystone/convert_keystone_backend.py
@@ -177,10 +205,9 @@ pkg_postinst_${SRCNAME}-setup () {
177 if [ -z `cat $PIDFILE 2>/dev/null` ]; then 205 if [ -z `cat $PIDFILE 2>/dev/null` ]; then
178 sudo -u postgres createdb keystone 206 sudo -u postgres createdb keystone
179 keystone-manage db_sync 207 keystone-manage db_sync
180 keystone-manage pki_setup --keystone-user=root --keystone-group=root 208 keystone-manage pki_setup --keystone-user=root --keystone-group=daemon
181 209
182 if ${@base_contains('DISTRO_FEATURES', 'OpenLDAP', 'true', 'false', d)}; 210 if ${@base_contains('DISTRO_FEATURES', 'OpenLDAP', 'true', 'false', d)}; then
183 then
184 /etc/init.d/openldap start 211 /etc/init.d/openldap start
185 fi 212 fi
186 /etc/init.d/keystone start 213 /etc/init.d/keystone start
@@ -203,7 +230,8 @@ ALLOW_EMPTY_${SRCNAME}-setup = "1"
203 230
204ALLOW_EMPTY_${SRCNAME}-cronjobs = "1" 231ALLOW_EMPTY_${SRCNAME}-cronjobs = "1"
205 232
206FILES_${PN} = "${libdir}/*" 233FILES_${PN} = "${libdir}/* \
234 "
207 235
208FILES_${SRCNAME}-tests = "${sysconfdir}/${SRCNAME}/run_tests.sh" 236FILES_${SRCNAME}-tests = "${sysconfdir}/${SRCNAME}/run_tests.sh"
209 237
@@ -211,6 +239,8 @@ FILES_${SRCNAME} = "${bindir}/* \
211 ${sysconfdir}/${SRCNAME}/* \ 239 ${sysconfdir}/${SRCNAME}/* \
212 ${sysconfdir}/init.d/* \ 240 ${sysconfdir}/init.d/* \
213 ${localstatedir}/* \ 241 ${localstatedir}/* \
242 ${datadir}/openstack-dashboard/openstack_dashboard/api/keystone-httpd.py \
243 ${sysconfdir}/apache2/conf.d/wsgi-keystone.conf \
214 " 244 "
215 245
216DEPENDS += " \ 246DEPENDS += " \
@@ -248,7 +278,14 @@ PACKAGECONFIG[OpenLDAP] = ",,,python-ldap python-keystone-hybrid-backend"
248# TODO: 278# TODO:
249# if DISTRO_FEATURE contains "tempest" then add *-tests to the main RDEPENDS 279# if DISTRO_FEATURE contains "tempest" then add *-tests to the main RDEPENDS
250 280
251RDEPENDS_${SRCNAME} = "${PN} postgresql postgresql-client python-psycopg2" 281RDEPENDS_${SRCNAME} = " \
282 ${PN} \
283 postgresql \
284 postgresql-client \
285 python-psycopg2 \
286 apache2 \
287 "
288
252RDEPENDS_${SRCNAME}-setup = "postgresql sudo ${SRCNAME}" 289RDEPENDS_${SRCNAME}-setup = "postgresql sudo ${SRCNAME}"
253RDEPENDS_${SRCNAME}-cronjobs = "cronie ${SRCNAME}" 290RDEPENDS_${SRCNAME}-cronjobs = "cronie ${SRCNAME}"
254 291