This patch provides a new path for installing libraries in devstack so
that it's possible to either test with upstream released libraries, or
with git versions of individual libraries.
Libraries are added by name to 3 associative arrays GITREPO,
GITBRANCH, GITDIR. When we get to the library install phase we inspect
LIBS_FROM_GIT and look for libraries by name (i.e. "oslo.config") and
if they exist we'll clone and install those libraries from
git. Otherwise we won't, and just let pip pull them as dependencies
when it needs them.
This patch provides the conversion of the oslo libraries, including
pbr.
Devstack-gate jobs for these libraries will need to change to support
actually forward testing their content.
Change-Id: I6161fa3194dbe8fbc25b6ee0e2fe3cc722a1cea4
... | ... |
@@ -36,6 +36,11 @@ |
36 | 36 |
XTRACE=$(set +o | grep xtrace) |
37 | 37 |
set +o xtrace |
38 | 38 |
|
39 |
+# Global Config Variables |
|
40 |
+declare -A GITREPO |
|
41 |
+declare -A GITBRANCH |
|
42 |
+declare -A GITDIR |
|
43 |
+ |
|
39 | 44 |
|
40 | 45 |
# Config Functions |
41 | 46 |
# ================ |
... | ... |
@@ -598,6 +603,18 @@ function git_clone { |
598 | 598 |
cd $orig_dir |
599 | 599 |
} |
600 | 600 |
|
601 |
+# A variation on git clone that lets us specify a project by it's |
|
602 |
+# actual name, like oslo.config. This is exceptionally useful in the |
|
603 |
+# library installation case |
|
604 |
+function git_clone_by_name { |
|
605 |
+ local name=$1 |
|
606 |
+ local repo=${GITREPO[$name]} |
|
607 |
+ local dir=${GITDIR[$name]} |
|
608 |
+ local branch=${GITBRANCH[$name]} |
|
609 |
+ git_clone $repo $dir $branch |
|
610 |
+} |
|
611 |
+ |
|
612 |
+ |
|
601 | 613 |
# git can sometimes get itself infinitely stuck with transient network |
602 | 614 |
# errors or other issues with the remote end. This wraps git in a |
603 | 615 |
# timeout/retry loop and is intended to watch over non-local git |
... | ... |
@@ -1541,6 +1558,26 @@ function pip_install { |
1541 | 1541 |
fi |
1542 | 1542 |
} |
1543 | 1543 |
|
1544 |
+# should we use this library from their git repo, or should we let it |
|
1545 |
+# get pulled in via pip dependencies. |
|
1546 |
+function use_library_from_git { |
|
1547 |
+ local name=$1 |
|
1548 |
+ local enabled=1 |
|
1549 |
+ [[ ,${LIBS_FROM_GIT}, =~ ,${name}, ]] && enabled=0 |
|
1550 |
+ return $enabled |
|
1551 |
+} |
|
1552 |
+ |
|
1553 |
+# setup a library by name. If we are trying to use the library from |
|
1554 |
+# git, we'll do a git based install, otherwise we'll punt and the |
|
1555 |
+# library should be installed by a requirements pull from another |
|
1556 |
+# project. |
|
1557 |
+function setup_lib { |
|
1558 |
+ local name=$1 |
|
1559 |
+ local dir=${GITDIR[$name]} |
|
1560 |
+ setup_install $dir |
|
1561 |
+} |
|
1562 |
+ |
|
1563 |
+ |
|
1544 | 1564 |
# this should be used if you want to install globally, all libraries should |
1545 | 1565 |
# use this, especially *oslo* ones |
1546 | 1566 |
function setup_install { |
... | ... |
@@ -19,7 +19,7 @@ set +o xtrace |
19 | 19 |
|
20 | 20 |
# Defaults |
21 | 21 |
# -------- |
22 |
-PBR_DIR=$DEST/pbr |
|
22 |
+GITDIR["pbr"]=$DEST/pbr |
|
23 | 23 |
REQUIREMENTS_DIR=$DEST/requirements |
24 | 24 |
|
25 | 25 |
# Entry Points |
... | ... |
@@ -31,8 +31,12 @@ function install_infra { |
31 | 31 |
git_clone $REQUIREMENTS_REPO $REQUIREMENTS_DIR $REQUIREMENTS_BRANCH |
32 | 32 |
|
33 | 33 |
# Install pbr |
34 |
- git_clone $PBR_REPO $PBR_DIR $PBR_BRANCH |
|
35 |
- setup_install $PBR_DIR |
|
34 |
+ if use_library_from_git "pbr"; then |
|
35 |
+ git_clone_by_name "pbr" |
|
36 |
+ setup_lib "pbr" |
|
37 |
+ else |
|
38 |
+ pip_install "pbr" |
|
39 |
+ fi |
|
36 | 40 |
} |
37 | 41 |
|
38 | 42 |
# Restore xtrace |
... | ... |
@@ -20,21 +20,21 @@ set +o xtrace |
20 | 20 |
|
21 | 21 |
# Defaults |
22 | 22 |
# -------- |
23 |
-CLIFF_DIR=$DEST/cliff |
|
24 |
-OSLOCFG_DIR=$DEST/oslo.config |
|
25 |
-OSLOCON_DIR=$DEST/oslo.concurrency |
|
26 |
-OSLODB_DIR=$DEST/oslo.db |
|
27 |
-OSLOI18N_DIR=$DEST/oslo.i18n |
|
28 |
-OSLOLOG_DIR=$DEST/oslo.log |
|
29 |
-OSLOMID_DIR=$DEST/oslo.middleware |
|
30 |
-OSLOMSG_DIR=$DEST/oslo.messaging |
|
31 |
-OSLORWRAP_DIR=$DEST/oslo.rootwrap |
|
32 |
-OSLOSERIALIZATION_DIR=$DEST/oslo.serialization |
|
33 |
-OSLOUTILS_DIR=$DEST/oslo.utils |
|
34 |
-OSLOVMWARE_DIR=$DEST/oslo.vmware |
|
35 |
-PYCADF_DIR=$DEST/pycadf |
|
36 |
-STEVEDORE_DIR=$DEST/stevedore |
|
37 |
-TASKFLOW_DIR=$DEST/taskflow |
|
23 |
+GITDIR["cliff"]=$DEST/cliff |
|
24 |
+GITDIR["oslo.config"]=$DEST/oslo.config |
|
25 |
+GITDIR["oslo.concurrency"]=$DEST/oslo.concurrency |
|
26 |
+GITDIR["oslo.db"]=$DEST/oslo.db |
|
27 |
+GITDIR["oslo.i18n"]=$DEST/oslo.i18n |
|
28 |
+GITDIR["oslo.log"]=$DEST/oslo.log |
|
29 |
+GITDIR["oslo.middleware"]=$DEST/oslo.middleware |
|
30 |
+GITDIR["oslo.messaging"]=$DEST/oslo.messaging |
|
31 |
+GITDIR["oslo.rootwrap"]=$DEST/oslo.rootwrap |
|
32 |
+GITDIR["oslo.serialization"]=$DEST/oslo.serialization |
|
33 |
+GITDIR["oslo.utils"]=$DEST/oslo.utils |
|
34 |
+GITDIR["oslo.vmware"]=$DEST/oslo.vmware |
|
35 |
+GITDIR["pycadf"]=$DEST/pycadf |
|
36 |
+GITDIR["stevedore"]=$DEST/stevedore |
|
37 |
+GITDIR["taskflow"]=$DEST/taskflow |
|
38 | 38 |
|
39 | 39 |
# Support entry points installation of console scripts |
40 | 40 |
OSLO_BIN_DIR=$(get_python_exec_prefix) |
... | ... |
@@ -42,52 +42,31 @@ OSLO_BIN_DIR=$(get_python_exec_prefix) |
42 | 42 |
# Entry Points |
43 | 43 |
# ------------ |
44 | 44 |
|
45 |
+function _do_install_oslo_lib { |
|
46 |
+ local name=$1 |
|
47 |
+ if use_library_from_git "$name"; then |
|
48 |
+ git_clone_by_name "$name" |
|
49 |
+ setup_lib "$name" |
|
50 |
+ fi |
|
51 |
+} |
|
52 |
+ |
|
45 | 53 |
# install_oslo() - Collect source and prepare |
46 | 54 |
function install_oslo { |
47 |
- git_clone $CLIFF_REPO $CLIFF_DIR $CLIFF_BRANCH |
|
48 |
- setup_install $CLIFF_DIR |
|
49 |
- |
|
50 |
- git_clone $OSLOI18N_REPO $OSLOI18N_DIR $OSLOI18N_BRANCH |
|
51 |
- setup_install $OSLOI18N_DIR |
|
52 |
- |
|
53 |
- git_clone $OSLOUTILS_REPO $OSLOUTILS_DIR $OSLOUTILS_BRANCH |
|
54 |
- setup_install $OSLOUTILS_DIR |
|
55 |
- |
|
56 |
- git_clone $OSLOSERIALIZATION_REPO $OSLOSERIALIZATION_DIR $OSLOSERIALIZATION_BRANCH |
|
57 |
- setup_install $OSLOSERIALIZATION_DIR |
|
58 |
- |
|
59 |
- git_clone $OSLOCFG_REPO $OSLOCFG_DIR $OSLOCFG_BRANCH |
|
60 |
- setup_install $OSLOCFG_DIR |
|
61 |
- |
|
62 |
- git_clone $OSLOCON_REPO $OSLOCON_DIR $OSLOCON_BRANCH |
|
63 |
- setup_install $OSLOCON_DIR |
|
64 |
- |
|
65 |
- git_clone $OSLOLOG_REPO $OSLOLOG_DIR $OSLOLOG_BRANCH |
|
66 |
- setup_install $OSLOLOG_DIR |
|
67 |
- |
|
68 |
- git_clone $OSLOMID_REPO $OSLOMID_DIR $OSLOMID_BRANCH |
|
69 |
- setup_install $OSLOMID_DIR |
|
70 |
- |
|
71 |
- git_clone $OSLOMSG_REPO $OSLOMSG_DIR $OSLOMSG_BRANCH |
|
72 |
- setup_install $OSLOMSG_DIR |
|
73 |
- |
|
74 |
- git_clone $OSLORWRAP_REPO $OSLORWRAP_DIR $OSLORWRAP_BRANCH |
|
75 |
- setup_install $OSLORWRAP_DIR |
|
76 |
- |
|
77 |
- git_clone $OSLODB_REPO $OSLODB_DIR $OSLODB_BRANCH |
|
78 |
- setup_install $OSLODB_DIR |
|
79 |
- |
|
80 |
- git_clone $OSLOVMWARE_REPO $OSLOVMWARE_DIR $OSLOVMWARE_BRANCH |
|
81 |
- setup_install $OSLOVMWARE_DIR |
|
82 |
- |
|
83 |
- git_clone $PYCADF_REPO $PYCADF_DIR $PYCADF_BRANCH |
|
84 |
- setup_install $PYCADF_DIR |
|
85 |
- |
|
86 |
- git_clone $STEVEDORE_REPO $STEVEDORE_DIR $STEVEDORE_BRANCH |
|
87 |
- setup_install $STEVEDORE_DIR |
|
88 |
- |
|
89 |
- git_clone $TASKFLOW_REPO $TASKFLOW_DIR $TASKFLOW_BRANCH |
|
90 |
- setup_install $TASKFLOW_DIR |
|
55 |
+ _do_install_oslo_lib "cliff" |
|
56 |
+ _do_install_oslo_lib "oslo.i18n" |
|
57 |
+ _do_install_oslo_lib "oslo.utils" |
|
58 |
+ _do_install_oslo_lib "oslo.serialization" |
|
59 |
+ _do_install_oslo_lib "oslo.config" |
|
60 |
+ _do_install_oslo_lib "oslo.concurrency" |
|
61 |
+ _do_install_oslo_lib "oslo.log" |
|
62 |
+ _do_install_oslo_lib "oslo.middleware" |
|
63 |
+ _do_install_oslo_lib "oslo.messaging" |
|
64 |
+ _do_install_oslo_lib "oslo.rootwrap" |
|
65 |
+ _do_install_oslo_lib "oslo.db" |
|
66 |
+ _do_install_oslo_lib "olso.vmware" |
|
67 |
+ _do_install_oslo_lib "pycadf" |
|
68 |
+ _do_install_oslo_lib "stevedore" |
|
69 |
+ _do_install_oslo_lib "taskflow" |
|
91 | 70 |
} |
92 | 71 |
|
93 | 72 |
# Restore xtrace |
... | ... |
@@ -222,68 +222,68 @@ ORC_REPO=${ORC_REPO:-${GIT_BASE}/openstack/os-refresh-config.git} |
222 | 222 |
ORC_BRANCH=${ORC_BRANCH:-master} |
223 | 223 |
|
224 | 224 |
# cliff command line framework |
225 |
-CLIFF_REPO=${CLIFF_REPO:-${GIT_BASE}/openstack/cliff.git} |
|
226 |
-CLIFF_BRANCH=${CLIFF_BRANCH:-master} |
|
225 |
+GITREPO["cliff"]=${CLIFF_REPO:-${GIT_BASE}/openstack/cliff.git} |
|
226 |
+GITBRANCH["cliff"]=${CLIFF_BRANCH:-master} |
|
227 | 227 |
|
228 | 228 |
# oslo.concurrency |
229 |
-OSLOCON_REPO=${OSLOCON_REPO:-${GIT_BASE}/openstack/oslo.concurrency.git} |
|
230 |
-OSLOCON_BRANCH=${OSLOCON_BRANCH:-master} |
|
229 |
+GITREPO["oslo.concurrency"]=${OSLOCON_REPO:-${GIT_BASE}/openstack/oslo.concurrency.git} |
|
230 |
+GITBRANCH["olso.concurrency"]=${OSLOCON_BRANCH:-master} |
|
231 | 231 |
|
232 | 232 |
# oslo.config |
233 |
-OSLOCFG_REPO=${OSLOCFG_REPO:-${GIT_BASE}/openstack/oslo.config.git} |
|
234 |
-OSLOCFG_BRANCH=${OSLOCFG_BRANCH:-master} |
|
233 |
+GITREPO["oslo.config"]=${OSLOCFG_REPO:-${GIT_BASE}/openstack/oslo.config.git} |
|
234 |
+GITBRANCH["oslo.config"]=${OSLOCFG_BRANCH:-master} |
|
235 | 235 |
|
236 | 236 |
# oslo.db |
237 |
-OSLODB_REPO=${OSLODB_REPO:-${GIT_BASE}/openstack/oslo.db.git} |
|
238 |
-OSLODB_BRANCH=${OSLODB_BRANCH:-master} |
|
237 |
+GITREPO["olso.db"]=${OSLODB_REPO:-${GIT_BASE}/openstack/oslo.db.git} |
|
238 |
+GITBRANCH["olso.db"]=${OSLODB_BRANCH:-master} |
|
239 | 239 |
|
240 | 240 |
# oslo.i18n |
241 |
-OSLOI18N_REPO=${OSLOI18N_REPO:-${GIT_BASE}/openstack/oslo.i18n.git} |
|
242 |
-OSLOI18N_BRANCH=${OSLOI18N_BRANCH:-master} |
|
241 |
+GITREPO["olso.i18n"]=${OSLOI18N_REPO:-${GIT_BASE}/openstack/oslo.i18n.git} |
|
242 |
+GITBRANCH["olso.i18n"]=${OSLOI18N_BRANCH:-master} |
|
243 | 243 |
|
244 | 244 |
# oslo.log |
245 |
-OSLOLOG_REPO=${OSLOLOG_REPO:-${GIT_BASE}/openstack/oslo.log.git} |
|
246 |
-OSLOLOG_BRANCH=${OSLOLOG_BRANCH:-master} |
|
245 |
+GITREPO["olso.log"]=${OSLOLOG_REPO:-${GIT_BASE}/openstack/oslo.log.git} |
|
246 |
+GITBRANCH["olso.log"]=${OSLOLOG_BRANCH:-master} |
|
247 | 247 |
|
248 | 248 |
# oslo.messaging |
249 |
-OSLOMSG_REPO=${OSLOMSG_REPO:-${GIT_BASE}/openstack/oslo.messaging.git} |
|
250 |
-OSLOMSG_BRANCH=${OSLOMSG_BRANCH:-master} |
|
249 |
+GITREPO["olso.messaging"]=${OSLOMSG_REPO:-${GIT_BASE}/openstack/oslo.messaging.git} |
|
250 |
+GITBRANCH["olso.messaging"]=${OSLOMSG_BRANCH:-master} |
|
251 | 251 |
|
252 | 252 |
# oslo.middleware |
253 |
-OSLOMID_REPO=${OSLOMID_REPO:-${GIT_BASE}/openstack/oslo.middleware.git} |
|
254 |
-OSLOMID_BRANCH=${OSLOMID_BRANCH:-master} |
|
253 |
+GITREPO["oslo.middleware"]=${OSLOMID_REPO:-${GIT_BASE}/openstack/oslo.middleware.git} |
|
254 |
+GITBRANCH["oslo.middleware"]=${OSLOMID_BRANCH:-master} |
|
255 | 255 |
|
256 | 256 |
# oslo.rootwrap |
257 |
-OSLORWRAP_REPO=${OSLORWRAP_REPO:-${GIT_BASE}/openstack/oslo.rootwrap.git} |
|
258 |
-OSLORWRAP_BRANCH=${OSLORWRAP_BRANCH:-master} |
|
257 |
+GITREPO["olso.rootwrap"]=${OSLORWRAP_REPO:-${GIT_BASE}/openstack/oslo.rootwrap.git} |
|
258 |
+GITBRANCH["olso.rootwrap"]=${OSLORWRAP_BRANCH:-master} |
|
259 | 259 |
|
260 | 260 |
# oslo.serialization |
261 |
-OSLOSERIALIZATION_REPO=${OSLOSERIALIZATION_REPO:-${GIT_BASE}/openstack/oslo.serialization.git} |
|
262 |
-OSLOSERIALIZATION_BRANCH=${OSLOSERIALIZATION_BRANCH:-master} |
|
261 |
+GITREPO["olso.serialization"]=${OSLOSERIALIZATION_REPO:-${GIT_BASE}/openstack/oslo.serialization.git} |
|
262 |
+GITBRANCH["olso.serialization"]=${OSLOSERIALIZATION_BRANCH:-master} |
|
263 | 263 |
|
264 | 264 |
# oslo.utils |
265 |
-OSLOUTILS_REPO=${OSLOUTILS_REPO:-${GIT_BASE}/openstack/oslo.utils.git} |
|
266 |
-OSLOUTILS_BRANCH=${OSLOUTILS_BRANCH:-master} |
|
265 |
+GITREPO["olso.utils"]=${OSLOUTILS_REPO:-${GIT_BASE}/openstack/oslo.utils.git} |
|
266 |
+GITBRANCH["olso.utils"]=${OSLOUTILS_BRANCH:-master} |
|
267 | 267 |
|
268 | 268 |
# oslo.vmware |
269 |
-OSLOVMWARE_REPO=${OSLOVMWARE_REPO:-${GIT_BASE}/openstack/oslo.vmware.git} |
|
270 |
-OSLOVMWARE_BRANCH=${OSLOVMWARE_BRANCH:-master} |
|
269 |
+GITREPO["olso.vmware"]=${OSLOVMWARE_REPO:-${GIT_BASE}/openstack/oslo.vmware.git} |
|
270 |
+GITBRANCH["olso.vmware"]=${OSLOVMWARE_BRANCH:-master} |
|
271 | 271 |
|
272 | 272 |
# pycadf auditing library |
273 |
-PYCADF_REPO=${PYCADF_REPO:-${GIT_BASE}/openstack/pycadf.git} |
|
274 |
-PYCADF_BRANCH=${PYCADF_BRANCH:-master} |
|
273 |
+GITREPO["pycadf"]=${PYCADF_REPO:-${GIT_BASE}/openstack/pycadf.git} |
|
274 |
+GITBRANCH["pycadf"]=${PYCADF_BRANCH:-master} |
|
275 | 275 |
|
276 | 276 |
# stevedore plugin manager |
277 |
-STEVEDORE_REPO=${STEVEDORE_REPO:-${GIT_BASE}/openstack/stevedore.git} |
|
278 |
-STEVEDORE_BRANCH=${STEVEDORE_BRANCH:-master} |
|
277 |
+GITREPO["stevedore"]=${STEVEDORE_REPO:-${GIT_BASE}/openstack/stevedore.git} |
|
278 |
+GITBRANCH["stevedore"]=${STEVEDORE_BRANCH:-master} |
|
279 | 279 |
|
280 | 280 |
# taskflow plugin manager |
281 |
-TASKFLOW_REPO=${TASKFLOW_REPO:-${GIT_BASE}/openstack/taskflow.git} |
|
282 |
-TASKFLOW_BRANCH=${TASKFLOW_BRANCH:-master} |
|
281 |
+GITREPO["taskflow"]=${TASKFLOW_REPO:-${GIT_BASE}/openstack/taskflow.git} |
|
282 |
+GITBRANCH["taskflow"]=${TASKFLOW_BRANCH:-master} |
|
283 | 283 |
|
284 | 284 |
# pbr drives the setuptools configs |
285 |
-PBR_REPO=${PBR_REPO:-${GIT_BASE}/openstack-dev/pbr.git} |
|
286 |
-PBR_BRANCH=${PBR_BRANCH:-master} |
|
285 |
+GITREPO["pbr"]=${PBR_REPO:-${GIT_BASE}/openstack-dev/pbr.git} |
|
286 |
+GITBRANCH["pbr"]=${PBR_BRANCH:-master} |
|
287 | 287 |
|
288 | 288 |
# neutron service |
289 | 289 |
NEUTRON_REPO=${NEUTRON_REPO:-${GIT_BASE}/openstack/neutron.git} |