Browse code

Use openstack/placement instead of placement-in-nova

We introduce and set PLACEMENT_REPO, add a placement-manage command
to sync database tables (see one of the commits on which this
depends), use /etc/placement/placement.conf for config, and put the
uwsgi config file (pointing to placement-api instead of
nova-placement-api) in /etc/placement.

openstack/placement is also added to the required-projects in
the devstack zuul job.

Change-Id: I0b217e7a8c68a637b7a3445f6c44b7574117e320

Chris Dent authored on 2018/10/05 18:17:56
Showing 4 changed files
... ...
@@ -241,8 +241,8 @@
241 241
       This base job can be used for single node and multinode devstack jobs.
242 242
 
243 243
       With a single node nodeset, this job sets up an "all-in-one" (aio)
244
-      devstack with the six OpenStack services included in the devstack tree:
245
-      keystone, glance, cinder, neutron, nova and swift.
244
+      devstack with the seven OpenStack services included in the devstack tree:
245
+      keystone, glance, cinder, neutron, nova, placement, and swift.
246 246
 
247 247
       With a two node nodeset, this job sets up an aio + compute node.
248 248
       The controller can be customised using host-vars.controller, the
... ...
@@ -265,6 +265,7 @@
265 265
       - git.openstack.org/openstack/keystone
266 266
       - git.openstack.org/openstack/neutron
267 267
       - git.openstack.org/openstack/nova
268
+      - git.openstack.org/openstack/placement
268 269
       - git.openstack.org/openstack/swift
269 270
     timeout: 7200
270 271
     vars:
... ...
@@ -3,9 +3,6 @@
3 3
 # lib/placement
4 4
 # Functions to control the configuration and operation of the **Placement** service
5 5
 #
6
-# Currently the placement service is embedded in nova. Eventually we
7
-# expect this to change so this file is started as a separate entity
8
-# despite making use of some *NOVA* variables and files.
9 6
 
10 7
 # Dependencies:
11 8
 #
... ...
@@ -29,23 +26,21 @@ set +o xtrace
29 29
 # Defaults
30 30
 # --------
31 31
 
32
-PLACEMENT_CONF_DIR=/etc/nova
33
-PLACEMENT_CONF=$PLACEMENT_CONF_DIR/nova.conf
34
-PLACEMENT_AUTH_STRATEGY=${PLACEMENT_AUTH_STRATEGY:-placement}
35
-# Nova virtual environment
32
+PLACEMENT_DIR=$DEST/placement
33
+PLACEMENT_CONF_DIR=/etc/placement
34
+PLACEMENT_CONF=$PLACEMENT_CONF_DIR/placement.conf
35
+PLACEMENT_AUTH_CACHE_DIR=${PLACEMENT_AUTH_CACHE_DIR:-/var/cache/placement}
36
+PLACEMENT_AUTH_STRATEGY=${PLACEMENT_AUTH_STRATEGY:-keystone}
37
+# Placement virtual environment
36 38
 if [[ ${USE_VENV} = True ]]; then
37
-    PROJECT_VENV["nova"]=${NOVA_DIR}.venv
38
-    PLACEMENT_BIN_DIR=${PROJECT_VENV["nova"]}/bin
39
+    PROJECT_VENV["placement"]=${PLACEMENT_DIR}.venv
40
+    PLACEMENT_BIN_DIR=${PROJECT_VENV["placement"]}/bin
39 41
 else
40 42
     PLACEMENT_BIN_DIR=$(get_python_exec_prefix)
41 43
 fi
42
-PLACEMENT_UWSGI=$PLACEMENT_BIN_DIR/nova-placement-api
44
+PLACEMENT_UWSGI=$PLACEMENT_BIN_DIR/placement-api
43 45
 PLACEMENT_UWSGI_CONF=$PLACEMENT_CONF_DIR/placement-uwsgi.ini
44 46
 
45
-# The placement service can optionally use a separate database
46
-# connection. Set PLACEMENT_DB_ENABLED to True to use it.
47
-PLACEMENT_DB_ENABLED=$(trueorfalse False PLACEMENT_DB_ENABLED)
48
-
49 47
 if is_service_enabled tls-proxy; then
50 48
     PLACEMENT_SERVICE_PROTOCOL="https"
51 49
 fi
... ...
@@ -70,27 +65,26 @@ function cleanup_placement {
70 70
     sudo rm -f $(apache_site_config_for nova-placement-api)
71 71
     sudo rm -f $(apache_site_config_for placement-api)
72 72
     remove_uwsgi_config "$PLACEMENT_UWSGI_CONF" "$PLACEMENT_UWSGI"
73
+    sudo rm -f $PLACEMENT_AUTH_CACHE_DIR/*
73 74
 }
74 75
 
75 76
 # _config_placement_apache_wsgi() - Set WSGI config files
76 77
 function _config_placement_apache_wsgi {
77 78
     local placement_api_apache_conf
78 79
     local venv_path=""
79
-    local nova_bin_dir=""
80
-    nova_bin_dir=$(get_python_exec_prefix)
80
+    local placement_bin_dir=""
81
+    placement_bin_dir=$(get_python_exec_prefix)
81 82
     placement_api_apache_conf=$(apache_site_config_for placement-api)
82 83
 
83
-    # reuse nova's venv if there is one as placement code lives
84
-    # there
85 84
     if [[ ${USE_VENV} = True ]]; then
86
-        venv_path="python-path=${PROJECT_VENV["nova"]}/lib/$(python_version)/site-packages"
87
-        nova_bin_dir=${PROJECT_VENV["nova"]}/bin
85
+        venv_path="python-path=${PROJECT_VENV["placement"]}/lib/$(python_version)/site-packages"
86
+        placement_bin_dir=${PROJECT_VENV["placement"]}/bin
88 87
     fi
89 88
 
90 89
     sudo cp $FILES/apache-placement-api.template $placement_api_apache_conf
91 90
     sudo sed -e "
92 91
         s|%APACHE_NAME%|$APACHE_NAME|g;
93
-        s|%PUBLICWSGI%|$nova_bin_dir/nova-placement-api|g;
92
+        s|%PUBLICWSGI%|$placement_bin_dir/placement-api|g;
94 93
         s|%SSLENGINE%|$placement_ssl|g;
95 94
         s|%SSLCERTFILE%|$placement_certfile|g;
96 95
         s|%SSLKEYFILE%|$placement_keyfile|g;
... ...
@@ -110,19 +104,23 @@ function configure_placement_nova_compute {
110 110
     iniset $conf placement user_domain_name "$SERVICE_DOMAIN_NAME"
111 111
     iniset $conf placement project_name "$SERVICE_TENANT_NAME"
112 112
     iniset $conf placement project_domain_name "$SERVICE_DOMAIN_NAME"
113
-    # TODO(cdent): auth_strategy, which is common to see in these
114
-    # blocks is not currently used here. For the time being the
115
-    # placement api uses the auth_strategy configuration setting
116
-    # established by the nova api. This avoids, for the time, being,
117
-    # creating redundant configuration items that are just used for
118
-    # testing.
113
+    iniset $conf placement auth_strategy $PLACEMENT_AUTH_STRATEGY
114
+}
115
+
116
+# create_placement_conf() - Write confg
117
+function create_placement_conf {
118
+    rm -f $PLACEMENT_CONF
119
+    iniset $PLACEMENT_CONF placement_database connection `database_connection_url placement`
120
+    iniset $PLACEMENT_CONF DEFAULT debug "$ENABLE_DEBUG_LOG_LEVEL"
121
+    iniset $PLACEMENT_CONF api auth_strategy $PLACEMENT_AUTH_STRATEGY
122
+    configure_auth_token_middleware $PLACEMENT_CONF placement $PLACEMENT_AUTH_CACHE_DIR
123
+    setup_logging $PLACEMENT_CONF
119 124
 }
120 125
 
121 126
 # configure_placement() - Set config files, create data dirs, etc
122 127
 function configure_placement {
123
-    if [ "$PLACEMENT_DB_ENABLED" != False ]; then
124
-        iniset $PLACEMENT_CONF placement_database connection `database_connection_url placement`
125
-    fi
128
+    sudo install -d -o $STACK_USER $PLACEMENT_CONF_DIR
129
+    create_placement_conf
126 130
 
127 131
     if [[ "$WSGI_MODE" == "uwsgi" ]]; then
128 132
         write_uwsgi_config "$PLACEMENT_UWSGI_CONF" "$PLACEMENT_UWSGI" "/placement"
... ...
@@ -143,25 +141,28 @@ function create_placement_accounts {
143 143
         "$placement_api_url"
144 144
 }
145 145
 
146
+# create_placement_cache_dir() - Create directories for keystone cache
147
+function create_placement_cache_dir {
148
+    # Create cache dir
149
+    sudo install -d -o $STACK_USER $PLACEMENT_AUTH_CACHE_DIR
150
+    rm -f $PLACEMENT_AUTH_CACHE_DIR/*
151
+}
152
+
146 153
 # init_placement() - Create service user and endpoints
147
-# If PLACEMENT_DB_ENABLED is true, create the separate placement db
148
-# using, for now, the api_db migrations.
149 154
 function init_placement {
150
-    if [ "$PLACEMENT_DB_ENABLED" != False ]; then
151
-        recreate_database placement
152
-        # Database migration will be handled when nova does an api_db sync
153
-        # TODO(cdent): When placement is extracted we'll do our own sync
154
-        # here.
155
-    fi
155
+    recreate_database placement
156
+    $PLACEMENT_BIN_DIR/placement-manage db sync
156 157
     create_placement_accounts
158
+    create_placement_cache_dir
157 159
 }
158 160
 
159 161
 # install_placement() - Collect source and prepare
160 162
 function install_placement {
161 163
     install_apache_wsgi
162 164
     # Install the openstackclient placement client plugin for CLI
163
-    # TODO(mriedem): Use pip_install_gr once osc-placement is in g-r.
164
-    pip_install osc-placement
165
+    pip_install_gr osc-placement
166
+    git_clone $PLACEMENT_REPO $PLACEMENT_DIR $PLACEMENT_BRANCH
167
+    setup_develop $PLACEMENT_DIR
165 168
 }
166 169
 
167 170
 # start_placement_api() - Start the API processes ahead of other things
... ...
@@ -894,8 +894,6 @@ if is_service_enabled neutron; then
894 894
     stack_install_service neutron
895 895
 fi
896 896
 
897
-# Nova configuration is used by placement so we need to create nova.conf
898
-# first.
899 897
 if is_service_enabled nova; then
900 898
     # Compute service
901 899
     stack_install_service nova
... ...
@@ -298,6 +298,10 @@ NOVA_BRANCH=${NOVA_BRANCH:-$TARGET_BRANCH}
298 298
 SWIFT_REPO=${SWIFT_REPO:-${GIT_BASE}/openstack/swift.git}
299 299
 SWIFT_BRANCH=${SWIFT_BRANCH:-$TARGET_BRANCH}
300 300
 
301
+# placement service
302
+PLACEMENT_REPO=${PLACEMENT_REPO:-${GIT_BASE}/openstack/placement.git}
303
+PLACEMENT_BRANCH=${PLACEMENT_BRANCH:-$TARGET_BRANCH}
304
+
301 305
 ##############
302 306
 #
303 307
 #  Testing Components