Browse code

use released library versions by default

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

Sean Dague authored on 2014/10/01 22:06:43
Showing 4 changed files
... ...
@@ -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}