Compare commits

...

73 Commits

Author SHA1 Message Date
Jens Rosenboom 6f91538d1d Update default cirros version
Update the default CIRROS_VERSION to 0.3.4, which has better support
for IPv6 and some other bugfixes.

Co-Authored-By: Scott Moser <smoser@ubuntu.com>
Change-Id: I03ee6e1403680fb6c421225a7cadaf8a82edf702
Depends-On: Iac9f108d947ff4a51f99c6e8ad9d1ac5b32c000a
(cherry picked from commit 9fd75f57fd)
(cherry picked from commit 89c0cd7442)
2015-09-11 10:14:39 -07:00
Jenkins de6f9c2c4a Merge "add --may-exist when adding port to a bridge" into stable/juno 2015-09-06 11:56:51 +00:00
Matt Riedemann 001b1cdddc Workaround large-ops wedge with uncapped novaclient in osc 1.0.1
python-openstackclient 1.0.1 pulls in uncapped novaclient which breaks
the caps for novaclient in other projects in Juno.  This only happens in
the large-ops job because cinder isn't installed and therefore cinder
doesn't install capped novaclient per juno global-requirements before osc
is installed.  We can't fix osc and bump it to 1.0.2 since osc is capped
at <=1.0.1 in global-requirements for stable/juno, so we're stuck.

So the workaround is to install python-novaclient from
global-requirements prior to installing python-openstackclient but only
in the case of the large-ops job, which we identify from the usage of
the fake virt driver.

Closes-Bug: #1482350

Change-Id: Id8cc112800d757bfd509cc48087b769410356920
2015-08-12 11:16:47 -07:00
Jerry Zhao 8c26f80481 add --may-exist when adding port to a bridge
When devstack is rerun repeatedly, port and bridges may have already
existed, so when adding port to a bridge, add option to allow port
to pre-exist in the bridge.

Change-Id: Ib102075564c44e45035f3c05ddd909783bfe7f36
2015-08-10 18:44:27 -07:00
Matthew Treinish 42854dc87c Stop relying on the tempest sample config file
This commit stops using the sample config file as the base for tempest
configuration. The sample config isn't actually needed as a based for
configuration because all the options are commented out so from the
perspective of the config parser it's a blank file.

There are 2 reasons for making this change, first using the sample
like this creates a hard dependency on tempest having a sample config
file in tree. This is something that the project wants to change since
keeping the file in sync causes headaches because of new oslo
releases. The second aspect is that it makes the generated output
difficult to read. It includes *every* option and it's description in
the generated output which makes finding where devstack is actually
setting something more difficult to find.

Change-Id: I4064a041a965ed2419b68efc8dc31fce37b24cfd
(cherry picked from commit 93c10571e8)
2015-07-31 10:47:10 -04:00
Adam Gandelman fce1f19ed9 Do not call update.py from a venv
198580 backported a change to install requirements into a venv
and call update.py from that venv. stable/juno's pip facilities do
not contain the venv support.  openstack-requirements ends up installed
into the system but we're calling update.py from a bare venv.  This
prevents 198146 from merging, which is blocking stable/juno merges
and client releases.

Rather than backport all of the venv support into stable/juno
this late in its life, this just removes the venv assumption and relies on
requirements ending up installed system-wide like it is now.

Change-Id: I11c9583be5d71a0d4797ea6ff25c245f1aadf0a5
2015-07-23 17:57:52 -07:00
Jenkins 5a78e1d9fa Merge "lib/neutron should provide correct syntax in the comment." into stable/juno 2015-07-14 01:13:21 +00:00
Jenkins 228e96a89f Merge "Actually install the requirements repo." into stable/juno 2015-07-07 00:57:38 +00:00
Robert Collins 47110b0f35 Actually install the requirements repo.
The requirements repo has had a setup.cfg etc for a long time but only
recently started using it. As it now has dependencies, we need to pip
install it. To preserve compat with older requirements repos I haven't
changed the call to invoke update-requirements yet, as we still have
the update.py symlink.

This is a backport of the final code from master.

Change-Id: I7d7e91694c9145fac0ddab8a9de5f789d723c641
2015-07-06 12:59:47 +12:00
Attila Fazekas 93a198b931 Allow installing tempest only with keystone
Modify the lib/tempest to not fail
 if no nova or glance available.

* This allows performance test of keystone and neutron with
  tempest (or tempest stress runner) without having system
  noise from another components.
* Depending on not required components for tempest is bad practice,
  tempest service decorators expected to allow tempest,
  to run in more minimal system out-of-the-box.

Change-Id: Ifc40b1eb5c4b79d96a5fae919b88afecca642ca0
(cherry picked from commit c411fcfc92)
2015-07-01 08:14:48 +00:00
Kahou Lei ab0ab55d35 lib/neutron should provide correct syntax in the comment.
Change-Id: I9bafd20aa37949ca93efc6ad3ea814526a8c515b
Closes-Bug: #1469434
2015-06-27 09:45:16 -07:00
Jeremy Stanley de4b188bf4 Stop installing nose and pylint from distros
The distro packages of nose and pylint depend on python-setuptools
on some platforms, and on some of those platforms (at least CentOS
6.x) you can't resolve dependencies on python-setuptools properly if
you've forcibly removed it already (as we do on our CI workers). It
appears that any current upstream use of these tools in relation to
DevStack-based testing is now relying on tox and pip to obtain them
instead.

Conflicts:
	files/debs/swift
	files/rpms-suse/general
	files/rpms/general
	files/rpms/horizon

Change-Id: Ibd16ac550c90364115caf57fae4f5f4cb5d5f238
(cherry picked from commit 091b42b7da)
2015-05-08 18:00:36 +00:00
Sean Dague bcbee577dd do not stop tgt when we stop cinder
tgt should remain up after we stop cinder, it shouldn't go down with
it, as that prevents servers with volumes from functioning when the
control plane is down.

Change-Id: Iefbc8d06eb677740956b89e157e8c9e176a0564e
2015-04-16 10:55:11 -04:00
Sean Dague 991c7ea5ce make stop_neutron actually stop neutron
stop_neutron doesn't actually stop neutron. The only reason grenade
neutron job was working was due to some blanket kills that never got
removed. As you can see it doesn't even actually attempt to stop most
of the services in question. Apparently it's doing some edge case
cleaning because neutron services don't actually shut down their child
processes correctly.

This actually makes stop_neutron do a thing.

Change-Id: I9138a8370be06e6c9d2dacbec1b0ffd4928e603d
2015-04-11 06:34:09 -04:00
Jenkins 3d76ff6317 Merge "Make screen sleep time configurable" into stable/juno 2015-04-09 13:37:57 +00:00
Sean Dague 287f99ed45 Make screen sleep time configurable
the sleep 3 in screen_it was added to make devstack pass in the gate
with exceptionally slow test cloud nodes. In the gate we now bypass
the screen path entirely. However the sleep 3 remains and can add a
couple minutes delay into local development runs.

We're not sure yet how low this can safely be tuned, so step 1 is to
make it configurable, then get devstack team members to try various
options to see what works.

Conflicts:
	functions-common

Change-Id: I0e6476176fc8589efc4e40e78c2231f704d14e45
(cherry picked from commit 4b2b14c4b9)
2015-04-09 07:41:29 -04:00
Sean Dague 03e20f350e introduce pip_install_gr
This creates a new pip_install_gr that installs from global
requirements allowed versions. Now that stable branches are getting
capped all of devstack needs to be fixed to do things like this.

Conflicts:
	inc/python
	lib/ceilometer
	lib/databases/mysql
	lib/databases/postgresql
	lib/horizon
	lib/keystone
	lib/ldap
	lib/nova_plugins/functions-libvirt
	lib/nova_plugins/hypervisor-xenserver
	lib/tempest
	lib/zaqar
	pkg/elasticsearch.sh
	stack.sh

Change-Id: I8fd0ef2bfc544ca2576fab09d3018f760b8848fe
(cherry picked from commit 19e06206cd)
2015-04-08 10:31:29 -04:00
Jenkins 484938d38f Merge "Set force_config_drive=False for Juno Ironic" into stable/juno 2015-04-02 00:41:32 +00:00
Adam Gandelman f610ae9e0e Set fixed_network_name in Tempest config
This previously defatuled to 'private' and aligned with devstack's
defaults but it has since been updated to 'None'.  This sets the config
value according to devstack's.

Change-Id: I3f480d5480521a93992bedfe602eb20a4999263d
Closes-bug: #1438415
(cherry picked from commit 84ee55b3ee)
2015-03-30 14:27:17 -07:00
Jenkins 66b1102def Merge "neutron_thirdparty/ryu: Ignore comments in pip-requires" into stable/juno 2015-03-26 12:11:25 +00:00
Sean Dague 3d54dc9969 Always defines tempest_roles as Member
Because tests might force the auth version to v3, we always need
to have Member in the list of roles.

Backported from: 72f026b60d

Change-Id: I06fd043e1b31ae0e5e33f4dcf898fb58f2907267
2015-03-25 22:12:00 -04:00
Adam Gandelman a68d21a058 Set force_config_drive=False for Juno Ironic
Config drive was not supported by Ironic in Juno and this parameter was
effectively ignored.  It is now supported in Kilo but keeping this enabled
in Juno prevents partial upgrades (Kilo Nova with Juno Ironic).  This
disables it on the Juno side to facilitate partial upgrade testing with
Grenade.

Change-Id: Id473ea81bd945959cd75575bb85a05a1dfe25ae7
Related-bug: #1433727
2015-03-24 11:32:48 -07:00
Mahito OGURA 8c601bcc51 Fix unstack.sh to stop stop_dstat when it is disabled.
unstack.sh always stop dstat process, however unstack.sh show 'dstat: no process
found' when dstat is disabled.
This patch stop function of stop_dstat, when dstat is disabled.

Backported from https://review.openstack.org/#/c/166709/

Change-Id: If9054826bed8a7fedd4f77ef4efef2c0ccd7f16e
Closes-Bug: #1435148
2015-03-24 14:09:30 +00:00
YAMAMOTO Takashi ed506406b8 neutron_thirdparty/ryu: Ignore comments in pip-requires
The latest version of ryu has comments in its tools/pip-requires.
Strip them before feeding to pip_install.

Closes-Bug: #1433896
Change-Id: I73edb1397cae12d816fa514ddf045bacf0714a96
2015-03-24 12:33:27 +09:00
Jenkins 660faaeffb Merge "Ensure quoting of selected API extensions" into stable/juno 2015-03-16 05:47:20 +00:00
Jenkins 7c42fda76b Merge "Set rootfstype=ramfs for low memory Ironic nodes" into stable/juno 2015-03-12 15:08:38 +00:00
Jenkins 36558ba381 Merge "Add data-processing service for Sahara" into stable/juno 2015-03-12 15:08:09 +00:00
Adam Gandelman 402cf95028 Set rootfstype=ramfs for low memory Ironic nodes
When running with low memory (<1024), we need to switch from the default
rootfstype from tmpfs to ramfs to ensure nodes can decompress deployment
ramdisks.

Backport of commit 756c842a77.

Change-Id: I1b9dd614e592d99b2f59dea899b1ed3859ae0811
2015-03-11 14:30:55 -07:00
Telles Nobrega 94c12267f4 Add data-processing service for Sahara
When registering endpoint with data_processing Keystone transforms it
into data-processing. This problem causes sahara to not find the
endpoint afterwards

We need to have two endpoint for correct working tempest and horizon
with devstack. After resolving bug in tempest and horizon need to remove
old data_processing endpoint

Change-Id: I97827d23ffe8a1218abd61e76804b918b1b7cbe0
Partial-bug: #1356053
(cherry picked from commit 77f82f3849)
2015-03-11 19:52:42 +03:00
Jenkins 9cd50be86c Merge "Don't use packaged unittest2" into stable/juno 2015-03-11 15:55:58 +00:00
Ian Wienand 463cb7aa93 Don't use packaged unittest2
Let pip install unittest2; pip installation can conflict with the
packaged version.

We should not need work-arounds for the installed broken version of
unittest2 any more (even though this was only for python2.6, which I
doubt anyone is actually using for devstack work anyway)

Cherry-picked from b0595235a2
Partial-Bug: #1430592

Conflicts:
	files/rpms-suse/general
	files/rpms/general

Change-Id: If6239eab4fe9d63fd1a368e02d88fd57a825b217
2015-03-11 12:12:30 +11:00
Joe Gordon 6dae13645f Stop installing unittest2 from deb packages
The version installed is conflicting with the version required in
testtools-1.7

ceilometer installs tooz which installs zake which has a run time
dependency on uncapped testtools. Which in turn requires a version of
unittest2 that conflicts with the version provided via packages

We need the fix to stable/juno to unbreak master because grenade.

Change-Id: Ia585d076982e1a0fbb286b7bd1845e4f9821ed76
Depends-On: Ib193e18afbb60c43d8dd66444bbf367689837182
Partial-Bug: #1430592
2015-03-10 17:33:33 -07:00
Ian Wienand d6701ae79d Ensure quoting of selected API extensions
Ensure quoting of selected API extensions so the argument makes it to
iniset.

Cherry-picked from c120998e43

Change-Id: I7c80e3bfe4962c3e8c94736af21ff215cd98f7f3
2015-03-03 11:29:08 +11:00
Ihar Hrachyshka 57be53b51a Install openstackclient after other services
Let's see whether openstackclient will trigger unneeded version bump for
clients if its installation is put below all other services that are
expected to intall client libraries on proper versions on their own.

Conflicts:
	stack.sh

Change-Id: Ifa774219b7057112fc794a5e3d93bc963c55ba90
(cherry picked from commit 1ffa33210d)
2015-02-24 11:42:45 +01:00
Jenkins f40284ce6e Merge "Fix sahara install failed at stable/juno branch." into stable/juno 2015-02-19 05:55:33 +00:00
Joe Gordon cb247b60ba Stop installing tempest
We run tempest inside of tox so no nee to install it. By not installing
it we decouple one more thing from the requirements sync.

Without this patch, due to branchless tempest, tempest must work with
master and all stable branch global requirements.

Although installing tempest should work on master, don't install it
anyway to make the user experience more uniform across master and
stable branches.

Note: Long term we can install this inside of a virtualenv
(I92648fffc1ad6af53006a0970722fd15f4e79dc2) but that logic hasn't landed
yet and installing tempest is breaking us. So leave moving this to a
virtualenv for a later patch.

Conflicts:
	lib/tempest

Change-Id: I78d51f04ed01da4ce8aa0e127be028f969d3b4f8
(cherry picked from commit 1368b98669)
2015-02-10 14:09:27 -05:00
Sean Dague 3b4cff7c0b disable boto testing in stable/icehouse
due to incompatibilities between stable/juno ec2 support and
latest boto, this is currently no longer testable with latest
tempest. Disable this section for now.

Conflicts:
	lib/tempest

Depends-On: I2b9e8858a7acd1aebb31234ffca813d9d16463e3

Change-Id: I00cc49dbde5119df91582c560d0ef829f546caa7
(cherry picked from commit ace3bdbbec)
2015-02-10 19:02:21 +00:00
Mahito OGURA 04da2a7ee9 Fix sahara install failed at stable/juno branch.
Sahara install failed at stable/juno branch.
The issue is that devstack get sahara master
branch at stable/juno.
Sahara master branch needs of requirements master
branch, however requirements branch is stable/juno.

This patch change sahara master branch to
stable/juno branch in stackrc, and is successed
sahara installation.

Change-Id: I0f9b7a4a04ff316a01065aa19cfdef222fe2ea72
Closes-Bug: #1418289
2015-02-05 17:04:32 +09:00
Joe Gordon 5217d9e102 Hard pin python-openstackclient to 1.0.1
Previously we used a "~=" but that meant 1.0.2 matches "~=1.0.1." and
openstackclient 1.0.2's requirements are far too new for stable/juno. So
hard pin openstackclient to version 1.0.1.

Change-Id: I956b5e02699967b6fa8541ef06f0571be7043472
2015-02-03 14:53:29 -08:00
Joe Gordon bcba698d6c Pin python-openstackclient version
Currently we are installing the latest version of python-openstackclient
in stable/juno devstack meaning if the latest python-openstackclient has
conflicting dependencies things will break.

This is needed before we can pin all of stable/juno global requirements.

Pin python-openstackclient client version to 1.0.1, The same version as
in icehouse.

Change-Id: I1fd00fb5a817ed8e08da9a89edc64519f990f6cf
2015-01-30 18:27:08 -08:00
Davanum Srinivas 3be5e02cf8 Bump up the count of workers for heat
Looks like the workers is set to 0 which in heat is used
mainly for profiling/debugging and not really useful in
the devstack scenarios.
https://github.com/openstack/heat/blob/master/heat/common/wsgi.py#L286

Partial-Bug: #1412923
Change-Id: Iccf6aeffd461fdc1f78022cbda370be4b9573267
2015-01-25 12:23:47 -05:00
Jenkins ec0a60e6f0 Merge "Poll resource tracker for ironic cpus as well as count" into stable/juno 2015-01-17 08:25:30 +00:00
Jenkins 5f26dcb21f Merge "Compile Horizon message catalogs during stack.sh" into stable/juno 2015-01-16 06:18:10 +00:00
Jenkins 752af80e21 Merge "Move ironic ssh key creation early in preparation" into stable/juno 2015-01-16 00:22:52 +00:00
Tarun Jain b9cc446096 Compile Horizon message catalogs during stack.sh
Backporting patch from master to stable/juno branch
https://review.openstack.org/#/c/128601/

Change-Id: I7f61e80bd7f26a7d99474618f773a737afcfbef3
Closes-Bug: 1409587
2015-01-11 23:05:49 -08:00
Ihar Hrachyshka f001a89f9e Revert "Add oslo.log"
This reverts commit 13249f8709.

We don't have anything that would depend on (not released yet) oslo.log in
Juno, and it currently makes requirements updates to fail due to missing
oslo.context dependency in global-requirements.txt, so instead of adding it
there, let's just drop oslo.log installation from devstack.

That's Juno only, master is not touched.

Conflicts:
	lib/oslo
	stackrc

Change-Id: Ib0e113302c00927348e27fe686a759b040b30f9a
2015-01-09 16:45:04 +01:00
Jenkins 2316193495 Merge "Call sudo /w -H in install_pip.sh as well" into stable/juno 2015-01-05 14:30:37 +00:00
Clark Boylan 715a9b866b Always install latest pbr
When not installing pbr from source always install the latest version of
pbr. It turns out that python-pbr is a system package that satisfies
many of our requirements files pbr requirements but breaks under
setuptools 8.0. Fix this by passing the -U flag to pip when installing
pbr so that we install the latest version of pbr always.

Note that we likely need to make this more generic to avoid other system
package leakage when installing packages not from source.

We should also probably bump our pbr requirements across the board to
reflect the new setuptools 8.0 world needs.

Change-Id: I23dd21cea37d26f879aa8d864ee7d371e70221ea
Fixes-bug: 1405318
2015-01-02 17:48:11 -06:00
Adam Gandelman 3071efd1c8 Call sudo /w -H in install_pip.sh as well
We updated other usage of sudo to pass -H when installing pip things,
to avoid creating a .cache directory in $STACK_USER's $HOME that is
owned by root. get-pip.py also ends up creating a ~/.cache, so we
need to update sudo usage there as well.

Closes-bug: #1405626
Related-bug: #1405732

Change-Id: If791b9b25d6a4280dab19117004184e57e78d038
(cherry picked from commit 130efefe6c)
2014-12-29 14:59:54 -08:00
Monty Taylor 51392964e3 Backport install_pip.sh from master
There are several improvements to install_pip.sh in master. All of these
have to do with the general state of pip upstream and are not something
that have anything to do with icehouse. For sanity, just backport the
entire file.

Change-Id: I9996bbc76ea81dd5bdded3bc8a5bf0542ade95f1
Closes-Bug: 1405579
Closes-bug: #1405626
Related-bug: #1405732
2014-12-29 11:17:49 -06:00
Jeremy Stanley 817e9b637a Install prettytable>=0.7 to satisfy pip 6/PEP 440
Also use sudo -H with pip so that it doesn't create a ~stack/.cache
other things can't write to as the stack user later.

Change-Id: I2134c7d8f58f8b83f33150c9ed86d87f8ccba2f3
(cherry picked from commit 1a89f8cdf4)
2014-12-23 00:20:57 +00:00
Adam Gandelman 67d547c9bb Poll resource tracker for ironic cpus as well as count
When ironic nodes are enrolled, their resources are not available
to the nova scheduler until after a round of ironic and nova periodic
tasks have run  In addition to waiting for ironic nodes to show up in
the resource tracker, also wait for associated CPU resources.  In
the worst case, this means waiting for 3 total rounds of periodic
tasks.

Closes-bug: #1398128
(cherry picked from commit 0c99e2f65b)

Conflicts:
	lib/ironic

Change-Id: Idbbc43bf74ff5fff3d50f3494148454bb51e378f
2014-12-19 16:14:15 -08:00
Jenkins 1bd396036d Merge "Hard code juno service extension lists" into stable/juno 2014-12-14 06:46:31 +00:00
Ruslan Kamaldinov a571e4abe8 Pin version of setuptools
Latest release of setuptool 8.0 made several versions used in
requirements.txt of OpenStack projects invalid. Instances:
* SQLAlchemy>=0.8.4,<=0.8.99,>=0.9.7,<=0.9.99 in oslo.db 1.2.0
* python-neutronclient 2.3.9.40.g9ed73c0 in openstackclient

Cap '<8.0' is set as a temporary fix until a better solution
comes up.

Change-Id: I4cfe2e4c86474ec9bf69a3c2007c0277288ea2b6
(cherry picked from commit 3b782d304e)
2014-12-13 12:47:27 -08:00
Adam Gandelman a6a3142857 Move ironic ssh key creation early in preparation
SSH creds should be in place before nodes are enrolled.  If not,
ironic cannot sync power state causing nova to skip nodes in
its resource tracker.

Closes-bug: #1398128
(cherry picked from commit 0354640587)

Conflicts:
	lib/ironic

Change-Id: I6b98ae57ce33783f69e2cf9ba357807d384b3012
2014-12-09 09:54:32 -08:00
Matthew Treinish 3710f94b95 Hard code juno service extension lists
This commit adds the hard coded service extension lists for juno
in the tempest config files. To enable gating with tempest master on
all supported branches the extension list has to be explicit on stable
branches to ensure we don't attempt to run tests for new extensions on
stable branch services. This commit adds these lists for the juno
branch.

Implements blueprint branchless-tempest-extensions

Change-Id: Id252581f180045e265d7163bc236ce2c76d40da8
2014-12-08 21:59:33 +00:00
Jenkins 7eac0c927c Merge "Wait for hypervisor-stats to reflect ironic nodes" into stable/juno 2014-12-05 13:53:44 +00:00
Jenkins fb2cb1a246 Merge "Log early boot of Ironic VMs to serial with sgabios" into stable/juno 2014-12-05 00:11:12 +00:00
Adam Gandelman ab0a04735f Wait for hypervisor-stats to reflect ironic nodes
When enrolling nodes into Ironic, poll nova's hypervisor-stats until
the hypervisor count reflects the number of enrolled nodes.  This
eliminates a race where devstack completes and an instance is spawned
before the first post-enrollment periodic task ticks on the Nova side,
which has recently started popping up in the gate.

Conflicts:
	lib/ironic

Change-Id: Ib3d8005e0094ee8af2d5fcb65aca6cd92736da90
Closes-bug: #1398128
(cherry picked from commit c78e467109)
2014-12-04 15:27:59 -08:00
Jenkins d54c2bdf45 Merge "Revert message catalog compile" into stable/juno 2014-12-04 20:57:19 +00:00
Ian Wienand 6a7185c905 Revert "Single quote iniset argument in merge_config_file"
This reverts commit e2c9fee8ed.

We have decided that we don't want to support the json-style argument
as described by bug#1374118 (see thread at [1]).

This restores the old behavior of sending the argument in
double-quotes so environment variables get expanded.  As a bonus,
tests for this are added.

[1] http://lists.openstack.org/pipermail/openstack-dev/2014-October/049341.html

Change-Id: I9fc99f3716cc53366907878adb00ae6cf3898f14
Closes-Bug:#1386413
(cherry picked from commit f3bf8b6cc0)
2014-12-01 17:45:38 +01:00
Adam Gandelman 9de37a1125 Log early boot of Ironic VMs to serial with sgabios
This adds sgabios to the list of packages for Ironic and configures
the libvirt domain to redirect BIOS messages to serial via sgabios,
when console logging is enabled.  The sgabios package in Ubuntu
currently has an apparmor bug, so that is worked around here.

This allows visibility into early boot of Ironic nodes and should
help get to the bottom of a frequent failure we're seeing in the gate.

Related-Bug: #1393099
(cherry picked from commit ffd66ad77f)

---

This also squashes the following commit into this patch. It is a required
fix to get grenade passing properly with the above changes:

commit 9eb8177eb7
Author: Adam Gandelman <adamg@ubuntu.com>
Date:   Fri Nov 21 09:41:45 2014 -0800
Move sgabios setup to hypervisor-ironic

This moves setup of sgabios ROM to the ironic hypervisor library.
This is failing to backport to juno because of an error in the sideways ironic
grenade. install_ironic() is expected to setup only python things and happens
earlier than initial package installation.

Fixes-bug: #1396352

Change-Id: Ifd18851e2d23d198d36e67883a81afc6a92d2a58
2014-11-26 11:06:32 -08:00
Ian Wienand 56deab2a39 Revert message catalog compile
Change I26fac0ccf8fd4818e24618d56bf04b32306f88f6 brought in this
message catalog compile which is unrelated to the original issue.  I'm
assuming it is from a bad merge.  It creates issues because gettext
isn't installed on fresh systems (although in openstack infra it is
already there thanks to other dependencies).

See also Id0efa75edde38640512a5ff6e0b5ef8d2ac5bb62

Change-Id: Ia7677c2474fa5e9de8be4e5f4a3ef634ecb19177
2014-11-26 06:03:25 +11:00
Sean Dague d6f700db33 support installing clients and supporting libraries at released versions
expand the devstack support for libraries from released versions to
support python-* clients and supporting libraries. This is a collapse
of the master patch series that took a while to get correct.

add unit tests for GIT* definitions

This adds unit tests for all the GIT* definitions, ensuring that for
libraries we think should be defined, they are. It exposed a bug in
glance_store definitions in the process.

The GITDIR definition for python-openstackclient is moved to stackrc
for testability.

Change-Id: I26fac0ccf8fd4818e24618d56bf04b32306f88f6
2014-11-21 13:22:14 -05:00
Sean Dague 137b71174a make run_tests.sh run devstack unit tests
run_tests.sh was created as an entry point for bashate. We stopped
using it now that we know how to run bashate directly in the gate.
We lost running an unrelated bashate test when that happened.

Devstack does have unit tests. We don't run them. We should.
Especially when working on things like the LIBS_FROM_GIT which is
sufficiently tricky that we really need to add unit tests to ensure
that we don't break it.

Conflicts:
	run_tests.sh

Change-Id: Ife067855569e2eae4c085471d326e8086de37332
(cherry picked from commit 9f20ea1382)
2014-11-20 13:38:47 -05:00
Davanum Srinivas 9bb1a44a88 Set xml_api_v2 for Compute tests
Nova XML V2  api support is being removed in Kilo, so we need to
enable here to ensure that the API is still tested in this stable release.

Change-Id: Ia0800b6b2f4affa48bacbbe4582a3ab8a3d3d15f
2014-11-17 10:44:53 -05:00
Daisuke Morita 2d311df771 Enable Swift's newer feature of container-sync
Newer version of container-sync feature is introduced in Swift ver. 1.12.0.

The spec:
http://docs.openstack.org/developer/swift/overview_container_sync.html

Before this commit, Devstack does not configure any realm used in
container-sync, therefore this feature does not work.
To test this feature in CI system, moreover to show the sample
configuration of realms, Devstack now edits realms configuration file.

Change-Id: I9f1e3224403e08e725a989162729470357fe90b0
Closes-Bug: 1378646
(cherry picked from commit d03915f9c0)
2014-10-30 10:02:16 +00:00
Lance Bragstad 508b17bc02 Add identity_feature_enabled.xml_api config
This change allows us to continue to test identity XML support for
stable juno. XML support in Keystone has been deprecated and staged for
removal in Kilo.

Change-Id: I576c93303575812c44afa36ad18205ecbc494e5f
2014-10-24 19:09:35 +00:00
Joe Gordon 4cc31d9571 Move to download.fedoraproject.org
download.fedoraproject.org is the mirror system, while
dl.fedoraproject.org is just one system. We have seen performance issues
with dl.fedoraproject.org and using download.fedoraproject.org was a
recommended as a solution by the folks at #fedora-admin.

Local testing on a rackspace server with dl.fedoraproject.org got about
70K/s while download.fedoraproject.org got over 1M/s

Move over to https as well.

Related-Bug: #1383928
Change-Id: I318d8844cfcfbc42c1e552e443c6b793d20f321f
(cherry picked from commit cac1317676)
2014-10-23 11:40:47 -07:00
Jenkins 3b87335fb5 Merge "set xml_api flag for Network tests" into stable/juno 2014-10-23 04:00:54 +00:00
Mark McClain 7e2f8a21b9 set xml_api flag for Network tests
XML api support is being removed in Kilo, so we need to enable here to
ensure that the API is still tested in this stable release.

Change-Id: Iaf0cb93fda607c62911c57132eced14a33f94f97
2014-10-22 17:22:59 -04:00
Akihiro Motoki 81c45e921b Set default branches of Sahara and Zaqar to stable/juno
The default branches of Sahara and Zaqar are still set to master
and they cannot be run due to global-requirements conflict.

Change-Id: I2d05118537b68bef0e3c6686b7263e1dc445d39e
2014-10-21 07:14:08 +09:00
Dean Troyer d265cbdc64 Set defaults for stable/juno branch
Change-Id: I912b79983b11d79a2f2cfca499a48625b7cef13e
2014-10-17 12:21:26 -05:00
51 changed files with 695 additions and 378 deletions
+1
View File
@@ -2,3 +2,4 @@
host=review.openstack.org
port=29418
project=openstack-dev/devstack.git
defaultbranch=stable/juno
+1 -1
View File
@@ -297,7 +297,7 @@ If tempest has been successfully configured, a basic set of smoke
tests can be run as follows:
$ cd /opt/stack/tempest
$ nosetests tempest/scenario/test_network_basic_ops.py
$ tox -efull tempest.scenario.test_network_basic_ops
# DevStack on Xenserver
-1
View File
@@ -11,7 +11,6 @@ if is_service_enabled trove; then
cleanup_trove
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
echo_summary "Configuring Trove"
configure_troveclient
configure_trove
if is_service_enabled key; then
+1 -2
View File
@@ -1,5 +1,4 @@
bridge-utils
pylint
python-setuptools
screen
unzip
@@ -12,7 +11,6 @@ lsof # useful when debugging
openssh-server
openssl
python-virtualenv
python-unittest2
iputils-ping
wget
curl
@@ -27,3 +25,4 @@ bc
libyaml-dev
libffi-dev
libssl-dev # for pyOpenSSL
gettext # used for compiling message catalogs
-2
View File
@@ -9,9 +9,7 @@ python-routes
python-xattr
python-sqlalchemy
python-webob
pylint
python-eventlet
python-nose
python-sphinx
python-mox
python-coverage
+1
View File
@@ -12,6 +12,7 @@ python-libvirt
qemu
qemu-kvm
qemu-utils
sgabios
syslinux
tftpd-hpa
xinetd
-1
View File
@@ -5,7 +5,6 @@ python-coverage
python-eventlet
python-greenlet
python-netifaces
python-nose
python-pastedeploy
python-simplejson
python-webob
-16
View File
@@ -1,16 +0,0 @@
diff -r b2efb7df637b discover.py
--- a/discover.py Thu Mar 24 00:31:02 2011 -0400
+++ b/discover.py Thu Nov 28 12:02:19 2013 +0000
@@ -82,7 +82,11 @@
"""
testMethodPrefix = 'test'
sortTestMethodsUsing = cmp
- suiteClass = unittest.TestSuite
+ try:
+ import unittest2
+ suiteClass = unittest2.TestSuite
+ except ImportError:
+ suiteClass = unittest.TestSuite
_top_level_dir = None
def loadTestsFromTestCase(self, testCaseClass):
-2
View File
@@ -14,9 +14,7 @@ openssh
openssl
psmisc
python-cmd2 # dist:opensuse-12.3
python-pylint
python-setuptools # instead of python-distribute; dist:sle11sp2
python-unittest2
screen
tar
tcpdump
-2
View File
@@ -13,7 +13,5 @@ python-coverage
python-dateutil
python-eventlet
python-mox
python-nose
python-pylint
python-sqlalchemy-migrate
python-xattr
-1
View File
@@ -8,7 +8,6 @@ python-devel
python-eventlet
python-greenlet
python-netifaces
python-nose
python-simplejson
python-xattr
sqlite3
+1 -2
View File
@@ -12,10 +12,8 @@ libffi-devel
libxml2-devel
libxslt-devel
psmisc
pylint
python-setuptools
python-prettytable # dist:rhel6 [1]
python-unittest2
python-virtualenv
python-devel
screen
@@ -26,6 +24,7 @@ wget
which
bc
libyaml-devel
gettext # used for compiling message catalogs
# [1] : some of installed tools have unversioned dependencies on this,
# but others have versioned (<=0.7). So if a later version (0.7.1)
-2
View File
@@ -1,7 +1,6 @@
Django
httpd # NOPRIME
mod_wsgi # NOPRIME
pylint
python-anyjson
python-BeautifulSoup
python-coverage
@@ -11,7 +10,6 @@ python-greenlet
python-httplib2
python-migrate
python-mox
python-nose
python-paste #dist:f19,f20
python-paste-deploy #dist:f19,f20
python-routes
+1
View File
@@ -9,6 +9,7 @@ net-tools
openssh-clients
openvswitch
python-libguestfs
sgabios
syslinux
tftp-server
xinetd
-1
View File
@@ -5,7 +5,6 @@ python-coverage
python-eventlet
python-greenlet
python-netifaces
python-nose
python-paste-deploy # dist:f19,f20,rhel7
python-simplejson
python-webob
+42 -3
View File
@@ -1288,8 +1288,13 @@ function screen_service {
# sleep to allow bash to be ready to be send the command - we are
# creating a new window in screen and then sends characters, so if
# bash isn't running by the time we send the command, nothing happens
sleep 3
# bash isn't running by the time we send the command, nothing
# happens. This sleep was added originally to handle gate runs
# where we needed this to be at least 3 seconds to pass
# consistently on slow clouds. Now this is configurable so that we
# can determine a reasonable value for the local case which should
# be much smaller.
sleep ${SCREEN_SLEEP:-3}
NL=`echo -ne '\015'`
# This fun command does the following:
@@ -1519,6 +1524,18 @@ function get_python_exec_prefix {
fi
}
# Wrapper for ``pip install`` that only installs versions of libraries
# from the global-requirements specification.
#
# Uses globals ``REQUIREMENTS_DIR``
#
# pip_install_gr packagename
function pip_install_gr {
local name=$1
local clean_name=$(get_from_global_requirements $name)
pip_install $clean_name
}
# Wrapper for ``pip install`` to set cache and proxy environment variables
# Uses globals ``OFFLINE``, ``PIP_DOWNLOAD_CACHE``, ``PIP_USE_MIRRORS``,
# ``TRACK_DEPENDS``, ``*_proxy``
@@ -1543,7 +1560,7 @@ function pip_install {
local sudo_pip="env"
else
local cmd_pip=$(get_pip_command)
local sudo_pip="sudo"
local sudo_pip="sudo -H"
fi
# Mirror option not needed anymore because pypi has CDN available,
@@ -1575,6 +1592,17 @@ function pip_install {
fi
}
# get version of a package from global requirements file
# get_from_global_requirements <package>
function get_from_global_requirements {
local package=$1
local required_pkg=$(grep -h ^${package} $REQUIREMENTS_DIR/global-requirements.txt | cut -d\# -f1)
if [[ $required_pkg == "" ]]; then
die $LINENO "Can't find package $package in requirements"
fi
echo $required_pkg
}
# should we use this library from their git repo, or should we let it
# get pulled in via pip dependencies.
function use_library_from_git {
@@ -1594,6 +1622,17 @@ function setup_lib {
setup_install $dir
}
# setup a library by name in editiable mode. If we are trying to use
# the library from git, we'll do a git based install, otherwise we'll
# punt and the library should be installed by a requirements pull from
# another project.
#
# use this for non namespaced libraries
function setup_dev_lib {
local name=$1
local dir=${GITDIR[$name]}
setup_develop $dir
}
# this should be used if you want to install globally, all libraries should
# use this, especially *oslo* ones
+1 -1
View File
@@ -162,7 +162,7 @@ function is_baremetal {
# so that we can build the deployment kernel & ramdisk
function prepare_baremetal_toolchain {
if [[ $(type -P ramdisk-image-create) == "" ]]; then
pip_install diskimage_builder
pip_install_gr diskimage-builder
fi
local shellinabox_basename=$(basename $BM_SHELL_IN_A_BOX)
if [[ ! -e $DEST/$shellinabox_basename ]]; then
+7 -4
View File
@@ -35,8 +35,9 @@ set +o xtrace
# --------
# Set up default directories
GITDIR["python-ceilometerclient"]=$DEST/python-ceilometerclient
CEILOMETER_DIR=$DEST/ceilometer
CEILOMETERCLIENT_DIR=$DEST/python-ceilometerclient
CEILOMETER_CONF_DIR=/etc/ceilometer
CEILOMETER_CONF=$CEILOMETER_CONF_DIR/ceilometer.conf
CEILOMETER_API_LOG_DIR=/var/log/ceilometer-api
@@ -246,9 +247,11 @@ function install_ceilometer {
# install_ceilometerclient() - Collect source and prepare
function install_ceilometerclient {
git_clone $CEILOMETERCLIENT_REPO $CEILOMETERCLIENT_DIR $CEILOMETERCLIENT_BRANCH
setup_develop $CEILOMETERCLIENT_DIR
sudo install -D -m 0644 -o $STACK_USER {$CEILOMETERCLIENT_DIR/tools/,/etc/bash_completion.d/}ceilometer.bash_completion
if use_library_from_git "python-ceilometerclient"; then
git_clone_by_name "python-ceilometerclient"
setup_dev_lib "python-ceilometerclient"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-ceilometerclient"]}/tools/,/etc/bash_completion.d/}ceilometer.bash_completion
fi
}
# start_ceilometer() - Start running processes, including screen
+7 -12
View File
@@ -36,8 +36,9 @@ if [[ -r $CINDER_PLUGINS/$CINDER_DRIVER ]]; then
fi
# set up default directories
GITDIR["python-cinderclient"]=$DEST/python-cinderclient
CINDER_DIR=$DEST/cinder
CINDERCLIENT_DIR=$DEST/python-cinderclient
CINDER_STATE_PATH=${CINDER_STATE_PATH:=$DATA_DIR/cinder}
CINDER_AUTH_CACHE_DIR=${CINDER_AUTH_CACHE_DIR:-/var/cache/cinder}
@@ -401,9 +402,11 @@ function install_cinder {
# install_cinderclient() - Collect source and prepare
function install_cinderclient {
git_clone $CINDERCLIENT_REPO $CINDERCLIENT_DIR $CINDERCLIENT_BRANCH
setup_develop $CINDERCLIENT_DIR
sudo install -D -m 0644 -o $STACK_USER {$CINDERCLIENT_DIR/tools/,/etc/bash_completion.d/}cinder.bash_completion
if use_library_from_git "python-cinderclient"; then
git_clone_by_name "python-cinderclient"
setup_dev_lib "python-cinderclient"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-cinderclient"]}/tools/,/etc/bash_completion.d/}cinder.bash_completion
fi
}
# apply config.d approach for cinder volumes directory
@@ -473,14 +476,6 @@ function stop_cinder {
for serv in c-api c-bak c-sch c-vol; do
stop_process $serv
done
if is_service_enabled c-vol; then
if is_ubuntu; then
stop_service tgt
else
stop_service tgtd
fi
fi
}
# create_volume_types() - Create Cinder's configured volume types
+3 -5
View File
@@ -82,8 +82,6 @@ function merge_config_file {
local matchgroup=$2
local configfile=$3
# note in the awk below, \x27 is ascii for ' -- this avoids
# having to do nasty quoting games
get_meta_section $file $matchgroup $configfile | \
$CONFIG_AWK_CMD -v configfile=$configfile '
BEGIN {
@@ -140,13 +138,13 @@ function merge_config_file {
for (attr_no = cfg_sec_attr_count[sno] - 1; attr_no >=0; attr_no--) {
attr = cfg_sec_attr_name[sno, attr_no]
if (cfg_attr_count[section, attr] == 1)
print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr, 0] "\x27"
print "iniset " configfile " " section " " attr " \"" cfg_attr[section, attr, 0] "\""
else {
# For multiline, invoke the ini routines in the reverse order
count = cfg_attr_count[section, attr]
print "iniset " configfile " " section " " attr " \x27" cfg_attr[section, attr, count - 1] "\x27"
print "iniset " configfile " " section " " attr " \"" cfg_attr[section, attr, count - 1] "\""
for (l = count -2; l >= 0; l--)
print "iniadd_literal " configfile " " section " " attr " \x27" cfg_attr[section, attr, l] "\x27"
print "iniadd_literal " configfile " " section " " attr " \"" cfg_attr[section, attr, l] "\""
}
}
}
+1 -1
View File
@@ -47,7 +47,7 @@ fi
# install_dib() - Collect source and prepare
function install_dib {
pip_install diskimage-builder
pip_install_gr diskimage-builder
git_clone $TIE_REPO $TIE_DIR $TIE_BRANCH
git_clone $OCC_REPO $OCC_DIR $OCC_BRANCH
+11 -6
View File
@@ -27,9 +27,10 @@ set +o xtrace
# --------
# Set up default directories
GITDIR["python-glanceclient"]=$DEST/python-glanceclient
GITDIR["glance_store"]=$DEST/glance_store
GLANCE_DIR=$DEST/glance
GLANCE_STORE_DIR=$DEST/glance_store
GLANCECLIENT_DIR=$DEST/python-glanceclient
GLANCE_CACHE_DIR=${GLANCE_CACHE_DIR:=$DATA_DIR/glance/cache}
GLANCE_IMAGE_DIR=${GLANCE_IMAGE_DIR:=$DATA_DIR/glance/images}
GLANCE_AUTH_CACHE_DIR=${GLANCE_AUTH_CACHE_DIR:-/var/cache/glance}
@@ -286,16 +287,20 @@ function init_glance {
# install_glanceclient() - Collect source and prepare
function install_glanceclient {
git_clone $GLANCECLIENT_REPO $GLANCECLIENT_DIR $GLANCECLIENT_BRANCH
setup_develop $GLANCECLIENT_DIR
if use_library_from_git "python-glanceclient"; then
git_clone_by_name "python-glanceclient"
setup_dev_lib "python-glanceclient"
fi
}
# install_glance() - Collect source and prepare
function install_glance {
# Install glance_store from git so we make sure we're testing
# the latest code.
git_clone $GLANCE_STORE_REPO $GLANCE_STORE_DIR $GLANCE_STORE_BRANCH
setup_develop $GLANCE_STORE_DIR
if use_library_from_git "glance_store"; then
git_clone_by_name "glance_store"
setup_dev_lib "glance_store"
fi
git_clone $GLANCE_REPO $GLANCE_DIR $GLANCE_BRANCH
setup_develop $GLANCE_DIR
+8 -4
View File
@@ -29,8 +29,9 @@ set +o xtrace
# --------
# set up default directories
GITDIR["python-heatclient"]=$DEST/python-heatclient
HEAT_DIR=$DEST/heat
HEATCLIENT_DIR=$DEST/python-heatclient
HEAT_CFNTOOLS_DIR=$DEST/heat-cfntools
HEAT_TEMPLATES_REPO_DIR=$DEST/heat-templates
HEAT_AUTH_CACHE_DIR=${HEAT_AUTH_CACHE_DIR:-/var/cache/heat}
@@ -131,6 +132,7 @@ function configure_heat {
# OpenStack API
iniset $HEAT_CONF heat_api bind_port $HEAT_API_PORT
iniset $HEAT_CONF heat_api workers "$API_WORKERS"
# Cloudformation API
iniset $HEAT_CONF heat_api_cfn bind_port $HEAT_API_CFN_PORT
@@ -183,9 +185,11 @@ function create_heat_cache_dir {
# install_heatclient() - Collect source and prepare
function install_heatclient {
git_clone $HEATCLIENT_REPO $HEATCLIENT_DIR $HEATCLIENT_BRANCH
setup_develop $HEATCLIENT_DIR
sudo install -D -m 0644 -o $STACK_USER {$HEATCLIENT_DIR/tools/,/etc/bash_completion.d/}heat.bash_completion
if use_library_from_git "python-heatclient"; then
git_clone_by_name "python-heatclient"
setup_dev_lib "python-heatclient"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-heatclient"]}/tools/,/etc/bash_completion.d/}heat.bash_completion
fi
}
# install_heat() - Collect source and prepare
+23 -3
View File
@@ -25,8 +25,9 @@ set +o xtrace
# --------
# Set up default directories
GITDIR["django_openstack_auth"]=$DEST/django_openstack_auth
HORIZON_DIR=$DEST/horizon
HORIZONAUTH_DIR=$DEST/django_openstack_auth
# local_settings.py is used to customize Dashboard settings.
# The example file in Horizon repo is used by default.
@@ -84,6 +85,12 @@ function cleanup_horizon {
# configure_horizon() - Set config files, create data dirs, etc
function configure_horizon {
setup_develop $HORIZON_DIR
# Compile message catalogs.
# Horizon is installed as develop mode, so we can compile here.
# Message catalog compilation is handled by Django admin script,
# so compiling them after the installation avoids Django installation twice.
(cd $HORIZON_DIR; ./run_tests.sh -N --compilemessages)
}
# init_horizon() - Initialize databases, etc.
@@ -137,8 +144,16 @@ function init_horizon {
# install_django_openstack_auth() - Collect source and prepare
function install_django_openstack_auth {
git_clone $HORIZONAUTH_REPO $HORIZONAUTH_DIR $HORIZONAUTH_BRANCH
setup_install $HORIZONAUTH_DIR
if use_library_from_git "django_openstack_auth"; then
local dir=${GITDIR["django_openstack_auth"]}
git_clone_by_name "django_openstack_auth"
# Compile message catalogs before installation
_prepare_message_catalog_compilation
(cd $dir; python setup.py compile_catalog)
setup_dev_lib "django_openstack_auth"
fi
# if we aren't using this library from git, then we just let it
# get dragged in by the horizon setup.
}
# install_horizon() - Collect source and prepare
@@ -160,6 +175,11 @@ function stop_horizon {
stop_apache_server
}
# NOTE: It can be moved to common functions, but it is only used by compilation
# of django_openstack_auth catalogs at the moment.
function _prepare_message_catalog_compilation {
pip_install_gr Babel
}
# Restore xtrace
$XTRACE
+5 -1
View File
@@ -27,15 +27,19 @@ REQUIREMENTS_DIR=$DEST/requirements
# install_infra() - Collect source and prepare
function install_infra {
local PIP_VIRTUAL_ENV="$REQUIREMENTS_DIR/.venv"
# bring down global requirements
git_clone $REQUIREMENTS_REPO $REQUIREMENTS_DIR $REQUIREMENTS_BRANCH
pip_install $REQUIREMENTS_DIR
# Install pbr
if use_library_from_git "pbr"; then
git_clone_by_name "pbr"
setup_lib "pbr"
else
pip_install "pbr"
# Always upgrade pbr to latest version as we may have pulled it
# in via system packages.
pip_install "-U" "pbr"
fi
}
+52 -9
View File
@@ -28,11 +28,12 @@ set +o pipefail
# --------
# Set up default directories
GITDIR["python-ironicclient"]=$DEST/python-ironicclient
IRONIC_DIR=$DEST/ironic
IRONIC_PYTHON_AGENT_DIR=$DEST/ironic-python-agent
IRONIC_DATA_DIR=$DATA_DIR/ironic
IRONIC_STATE_PATH=/var/lib/ironic
IRONICCLIENT_DIR=$DEST/python-ironicclient
IRONIC_AUTH_CACHE_DIR=${IRONIC_AUTH_CACHE_DIR:-/var/cache/ironic}
IRONIC_CONF_DIR=${IRONIC_CONF_DIR:-/etc/ironic}
IRONIC_CONF_FILE=$IRONIC_CONF_DIR/ironic.conf
@@ -150,9 +151,14 @@ function install_ironic {
# install_ironicclient() - Collect sources and prepare
function install_ironicclient {
git_clone $IRONICCLIENT_REPO $IRONICCLIENT_DIR $IRONICCLIENT_BRANCH
setup_develop $IRONICCLIENT_DIR
sudo install -D -m 0644 -o $STACK_USER {$IRONICCLIENT_DIR/tools/,/etc/bash_completion.d/}ironic.bash_completion
if use_library_from_git "python-ironicclient"; then
git_clone_by_name "python-ironicclient"
setup_dev_lib "python-ironicclient"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-ironicclient"]}/tools/,/etc/bash_completion.d/}ironic.bash_completion
else
# nothing actually "requires" ironicclient, so force instally from pypi
pip_install_gr python-ironicclient
fi
}
# _cleanup_ironic_apache_wsgi() - Remove wsgi files, disable and remove apache vhost file
@@ -270,9 +276,22 @@ function configure_ironic_conductor {
iniset $IRONIC_CONF_FILE pxe tftp_server $HOST_IP
iniset $IRONIC_CONF_FILE pxe tftp_root $IRONIC_TFTPBOOT_DIR
iniset $IRONIC_CONF_FILE pxe tftp_master_path $IRONIC_TFTPBOOT_DIR/master_images
local pxe_params=""
if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] ; then
iniset $IRONIC_CONF_FILE pxe pxe_append_params "nofb nomodeset vga=normal console=ttyS0"
pxe_params="nofb nomodeset vga=normal console=ttyS0"
fi
# When booting with less than 1GB, we need to switch from default tmpfs
# to ramfs for ramdisks to decompress successfully.
if [[ "$IRONIC_VM_SPECS_RAM" -lt 1024 ]]; then
pxe_params+=" rootfstype=ramfs"
fi
if [[ -n "$pxe_params" ]]; then
iniset $IRONIC_CONF_FILE pxe pxe_append_params "$pxe_params"
fi
if [[ "$IRONIC_DEPLOY_DRIVER" == "agent_ssh" ]] ; then
if [[ "$SWIFT_ENABLE_TEMPURLS" == "True" ]] ; then
iniset $IRONIC_CONF_FILE glance swift_temp_url_key $SWIFT_TEMPURL_KEY
@@ -456,9 +475,25 @@ function create_bridge_and_vms {
create_ovs_taps
}
function wait_for_nova_resources {
# After nodes have been enrolled, we need to wait for both ironic and
# nova's periodic tasks to populate the resource tracker with available
# nodes and resources. Wait up to 2 minutes for a given resource before
# timing out.
local resource=$1
local expected_count=$2
echo_summary "Waiting 2 minutes for Nova resource tracker to pick up $resource >= $expected_count"
for i in $(seq 1 120); do
if [ $(nova hypervisor-stats | grep " $resource " | get_field 2) -ge $expected_count ]; then
return 0
fi
sleep 1
done
die $LINENO "Timed out waiting for Nova hypervisor-stats $resource >= $expected_count"
}
function enroll_vms {
local chassis_id=$(ironic chassis-create -d "ironic test chassis" | grep " uuid " | get_field 2)
local idx=0
if [[ "$IRONIC_DEPLOY_DRIVER" == "pxe_ssh" ]] ; then
local _IRONIC_DEPLOY_KERNEL_KEY=pxe_deploy_kernel
@@ -468,6 +503,8 @@ function enroll_vms {
local _IRONIC_DEPLOY_RAMDISK_KEY=deploy_ramdisk
fi
local total_nodes=0
local total_cpus=0
while read MAC; do
local node_id=$(ironic node-create --chassis_uuid $chassis_id \
@@ -487,7 +524,8 @@ function enroll_vms {
ironic port-create --address $MAC --node_uuid $node_id
idx=$((idx+1))
total_nodes=$((total_nodes+1))
total_cpus=$((total_cpus+$IRONIC_VM_SPECS_CPU))
done < $IRONIC_VM_MACS_CSV_FILE
# create the nova flavor
@@ -502,6 +540,11 @@ function enroll_vms {
# from the flavor after the completion of
# https://blueprints.launchpad.net/ironic/+spec/add-node-instance-info
nova flavor-key baremetal set "cpu_arch"="x86_64" "baremetal:deploy_kernel_id"="$IRONIC_DEPLOY_KERNEL_ID" "baremetal:deploy_ramdisk_id"="$IRONIC_DEPLOY_RAMDISK_ID"
if [ "$VIRT_DRIVER" == "ironic" ]; then
wait_for_nova_resources "count" $total_nodes
wait_for_nova_resources "vcpus" $total_cpus
fi
}
function configure_iptables {
@@ -579,7 +622,7 @@ function upload_baremetal_ironic_deploy {
# install diskimage-builder
if [[ $(type -P ramdisk-image-create) == "" ]]; then
pip_install diskimage_builder
pip_install_gr diskimage-builder
fi
if [ -z "$IRONIC_DEPLOY_KERNEL" -o -z "$IRONIC_DEPLOY_RAMDISK" ]; then
@@ -638,12 +681,12 @@ function upload_baremetal_ironic_deploy {
}
function prepare_baremetal_basic_ops {
configure_ironic_auxiliary
upload_baremetal_ironic_deploy
create_bridge_and_vms
enroll_vms
configure_tftpd
configure_iptables
configure_ironic_auxiliary
}
function cleanup_baremetal_basic_ops {
+15 -8
View File
@@ -33,6 +33,9 @@ set +o xtrace
# --------
# Set up default directories
GITDIR["python-keystoneclient"]=$DEST/python-keystoneclient
GITDIR["keystonemiddleware"]=$DEST/keystonemiddleware
KEYSTONE_DIR=$DEST/keystone
KEYSTONE_CONF_DIR=${KEYSTONE_CONF_DIR:-/etc/keystone}
KEYSTONE_CONF=$KEYSTONE_CONF_DIR/keystone.conf
@@ -44,9 +47,6 @@ else
KEYSTONE_WSGI_DIR=${KEYSTONE_WSGI_DIR:-/var/www/keystone}
fi
KEYSTONEMIDDLEWARE_DIR=$DEST/keystonemiddleware
KEYSTONECLIENT_DIR=$DEST/python-keystoneclient
# Set up additional extensions, such as oauth1, federation
# Example of KEYSTONE_EXTENSIONS=oauth1,federation
KEYSTONE_EXTENSIONS=${KEYSTONE_EXTENSIONS:-}
@@ -479,15 +479,22 @@ function init_keystone {
# install_keystoneclient() - Collect source and prepare
function install_keystoneclient {
git_clone $KEYSTONECLIENT_REPO $KEYSTONECLIENT_DIR $KEYSTONECLIENT_BRANCH
setup_develop $KEYSTONECLIENT_DIR
sudo install -D -m 0644 -o $STACK_USER {$KEYSTONECLIENT_DIR/tools/,/etc/bash_completion.d/}keystone.bash_completion
if use_library_from_git "python-keystoneclient"; then
git_clone_by_name "python-keystoneclient"
setup_dev_lib "python-keystoneclient"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-keystoneclient"]}/tools/,/etc/bash_completion.d/}keystone.bash_completion
fi
}
# install_keystonemiddleware() - Collect source and prepare
function install_keystonemiddleware {
git_clone $KEYSTONEMIDDLEWARE_REPO $KEYSTONEMIDDLEWARE_DIR $KEYSTONEMIDDLEWARE_BRANCH
setup_install $KEYSTONEMIDDLEWARE_DIR
if use_library_from_git "keystonemiddleware"; then
git_clone_by_name "keystonemiddleware"
setup_dev_lib "keystonemiddleware"
else
# When not installing from repo, keystonemiddleware is still needed...
pip_install_gr keystonemiddleware
fi
}
# install_keystone() - Collect source and prepare
-1
View File
@@ -138,7 +138,6 @@ function install_ldap {
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
fi
rm -rf $tmp_ldap_dir
}
+23 -7
View File
@@ -75,8 +75,10 @@ fi
# Set up default directories
GITDIR["python-neutronclient"]=$DEST/python-neutronclient
NEUTRON_DIR=$DEST/neutron
NEUTRONCLIENT_DIR=$DEST/python-neutronclient
NEUTRON_AUTH_CACHE_DIR=${NEUTRON_AUTH_CACHE_DIR:-/var/cache/neutron}
# Support entry points installation of console scripts
@@ -505,7 +507,7 @@ function create_neutron_initial_network {
if [[ "$PUBLIC_INTERFACE" == '' || "$OVS_PHYSICAL_BRIDGE" == '' ]]; then
die $LINENO "Neutron settings for baremetal not set.. exiting"
fi
sudo ovs-vsctl add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
for IP in $(ip addr show dev $PUBLIC_INTERFACE | grep ' inet ' | awk '{print $2}'); do
sudo ip addr del $IP dev $PUBLIC_INTERFACE
sudo ip addr add $IP dev $OVS_PHYSICAL_BRIDGE
@@ -599,9 +601,11 @@ function install_neutron {
# install_neutronclient() - Collect source and prepare
function install_neutronclient {
git_clone $NEUTRONCLIENT_REPO $NEUTRONCLIENT_DIR $NEUTRONCLIENT_BRANCH
setup_develop $NEUTRONCLIENT_DIR
sudo install -D -m 0644 -o $STACK_USER {$NEUTRONCLIENT_DIR/tools/,/etc/bash_completion.d/}neutron.bash_completion
if use_library_from_git "python-neutronclient"; then
git_clone_by_name "python-neutronclient"
setup_dev_lib "python-neutronclient"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-neutronclient"]}/tools/,/etc/bash_completion.d/}neutron.bash_completion
fi
}
# install_neutron_agent_packages() - Collect source and prepare
@@ -651,7 +655,7 @@ function start_neutron_agents {
run_process q-dhcp "python $AGENT_DHCP_BINARY --config-file $NEUTRON_CONF --config-file=$Q_DHCP_CONF_FILE"
if is_provider_network; then
sudo ovs-vsctl add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
sudo ovs-vsctl --no-wait -- --may-exist add-port $OVS_PHYSICAL_BRIDGE $PUBLIC_INTERFACE
sudo ip link set $OVS_PHYSICAL_BRIDGE up
sudo ip link set br-int up
sudo ip link set $PUBLIC_INTERFACE up
@@ -681,6 +685,18 @@ function start_neutron_agents {
# stop_neutron() - Stop running processes (non-screen)
function stop_neutron {
stop_process q-svc
stop_process q-agent
stop_process q-dhcp
stop_process q-lbaas
stop_process q-fwaas
stop_process q-vpn
stop_process q-l3
stop_process q-metering
# BUG: this is all legacy gorp by previous attempts that don't
# really understand how devstack works. It can probably mostly be
# removed.
if is_service_enabled q-dhcp; then
pid=$(ps aux | awk '/[d]nsmasq.+interface=(tap|ns-)/ { print $2 }')
[ ! -z "$pid" ] && sudo kill -9 $pid
@@ -733,7 +749,7 @@ function _configure_neutron_common {
# For addition plugin config files, set ``Q_PLUGIN_EXTRA_CONF_PATH``,
# ``Q_PLUGIN_EXTRA_CONF_FILES``. For example:
#
# ``Q_PLUGIN_EXTRA_CONF_FILES=(file1, file2)``
# ``Q_PLUGIN_EXTRA_CONF_FILES=(file1 file2)``
neutron_plugin_configure_common
if [[ "$Q_PLUGIN_CONF_PATH" == '' || "$Q_PLUGIN_CONF_FILENAME" == '' || "$Q_PLUGIN_CLASS" == '' ]]; then
+1 -1
View File
@@ -58,7 +58,7 @@ function install_ryu {
if [[ "$_RYU_INSTALLED" == "False" ]]; then
git_clone $RYU_REPO $RYU_DIR $RYU_BRANCH
export PYTHONPATH=$RYU_DIR:$PYTHONPATH
pip_install $(cat $RYU_DIR/tools/pip-requires)
pip_install -r $RYU_DIR/tools/pip-requires
_RYU_INSTALLED=True
fi
}
+8 -4
View File
@@ -29,8 +29,10 @@ set +o xtrace
# --------
# Set up default directories
GITDIR["python-novaclient"]=$DEST/python-novaclient
NOVA_DIR=$DEST/nova
NOVACLIENT_DIR=$DEST/python-novaclient
NOVA_STATE_PATH=${NOVA_STATE_PATH:=$DATA_DIR/nova}
# INSTANCES_PATH is the previous name for this
NOVA_INSTANCES_PATH=${NOVA_INSTANCES_PATH:=${INSTANCES_PATH:=$NOVA_STATE_PATH/instances}}
@@ -631,9 +633,11 @@ function init_nova {
# install_novaclient() - Collect source and prepare
function install_novaclient {
git_clone $NOVACLIENT_REPO $NOVACLIENT_DIR $NOVACLIENT_BRANCH
setup_develop $NOVACLIENT_DIR
sudo install -D -m 0644 -o $STACK_USER {$NOVACLIENT_DIR/tools/,/etc/bash_completion.d/}nova.bash_completion
if use_library_from_git "python-novaclient"; then
git_clone_by_name "python-novaclient"
setup_dev_lib "python-novaclient"
sudo install -D -m 0644 -o $STACK_USER {${GITDIR["python-novaclient"]}/tools/,/etc/bash_completion.d/}nova.bash_completion
fi
}
# install_nova() - Collect source and prepare
+8
View File
@@ -42,6 +42,7 @@ function configure_nova_hypervisor {
iniset $NOVA_CONF DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager
iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0
iniset $NOVA_CONF DEFAULT reserved_host_memory_mb 0
iniset $NOVA_CONF DEFAULT force_config_drive False
# ironic section
iniset $NOVA_CONF ironic admin_username admin
iniset $NOVA_CONF ironic admin_password $ADMIN_PASSWORD
@@ -56,6 +57,13 @@ function install_nova_hypervisor {
die $LINENO "Neutron should be enabled for usage of the Ironic Nova driver."
fi
install_libvirt
if [[ "$IRONIC_VM_LOG_CONSOLE" == "True" ]] && is_ubuntu; then
# Ubuntu packaging+apparmor issue prevents libvirt from loading
# the ROM from /usr/share/misc. Workaround by installing it directly
# to a directory that it can read from. (LP: #1393548)
sudo rm -rf /usr/share/qemu/sgabios.bin
sudo cp /usr/share/misc/sgabios.bin /usr/share/qemu/sgabios.bin
fi
}
# start_nova_hypervisor - Start any required external services
-2
View File
@@ -25,7 +25,6 @@ GITDIR["oslo.config"]=$DEST/oslo.config
GITDIR["oslo.concurrency"]=$DEST/oslo.concurrency
GITDIR["oslo.db"]=$DEST/oslo.db
GITDIR["oslo.i18n"]=$DEST/oslo.i18n
GITDIR["oslo.log"]=$DEST/oslo.log
GITDIR["oslo.middleware"]=$DEST/oslo.middleware
GITDIR["oslo.messaging"]=$DEST/oslo.messaging
GITDIR["oslo.rootwrap"]=$DEST/oslo.rootwrap
@@ -58,7 +57,6 @@ function install_oslo {
_do_install_oslo_lib "oslo.serialization"
_do_install_oslo_lib "oslo.config"
_do_install_oslo_lib "oslo.concurrency"
_do_install_oslo_lib "oslo.log"
_do_install_oslo_lib "oslo.middleware"
_do_install_oslo_lib "oslo.messaging"
_do_install_oslo_lib "oslo.rootwrap"
+1 -1
View File
@@ -125,7 +125,7 @@ function install_rpc_backend {
# TODO(kgiusti) can remove once python qpid bindings are
# available on all supported platforms _and_ pyngus is added
# to the requirements.txt file in oslo.messaging
pip_install pyngus
pip_install_gr pyngus
fi
if is_service_enabled rabbit; then
+24 -13
View File
@@ -21,16 +21,9 @@ set +o xtrace
# Defaults
# --------
# Set up default repos
SAHARA_REPO=${SAHARA_REPO:-${GIT_BASE}/openstack/sahara.git}
SAHARA_BRANCH=${SAHARA_BRANCH:-master}
SAHARA_PYTHONCLIENT_REPO=${SAHARA_PYTHONCLIENT_REPO:-${GIT_BASE}/openstack/python-saharaclient.git}
SAHARA_PYTHONCLIENT_BRANCH=${SAHARA_PYTHONCLIENT_BRANCH:-master}
# Set up default directories
GITDIR["python-saharaclient"]=$DEST/python-saharaclient
SAHARA_DIR=$DEST/sahara
SAHARA_PYTHONCLIENT_DIR=$DEST/python-saharaclient
SAHARA_CONF_DIR=${SAHARA_CONF_DIR:-/etc/sahara}
SAHARA_CONF_FILE=${SAHARA_CONF_DIR}/sahara.conf
@@ -72,9 +65,25 @@ function create_sahara_accounts {
if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
local sahara_service=$(get_or_create_service "sahara" \
"data_processing" "Sahara Data Processing")
get_or_create_endpoint $sahara_service \
# TODO: remove "data_processing" service when #1356053 will be fixed
local sahara_service_old=$(openstack service create \
"sahara" \
--type "data_processing" \
--description "Sahara Data Processing (for Juno release)" \
-f value -c id
)
local sahara_service_new=$(openstack service create \
"sahara" \
--type "data-processing" \
--description "Sahara Data Processing (for Kilo and future releases)" \
-f value -c id
)
get_or_create_endpoint $sahara_service_old \
"$REGION_NAME" \
"$SAHARA_SERVICE_PROTOCOL://$SAHARA_SERVICE_HOST:$SAHARA_SERVICE_PORT/v1.1/\$(tenant_id)s" \
"$SAHARA_SERVICE_PROTOCOL://$SAHARA_SERVICE_HOST:$SAHARA_SERVICE_PORT/v1.1/\$(tenant_id)s" \
"$SAHARA_SERVICE_PROTOCOL://$SAHARA_SERVICE_HOST:$SAHARA_SERVICE_PORT/v1.1/\$(tenant_id)s"
get_or_create_endpoint $sahara_service_new \
"$REGION_NAME" \
"$SAHARA_SERVICE_PROTOCOL://$SAHARA_SERVICE_HOST:$SAHARA_SERVICE_PORT/v1.1/\$(tenant_id)s" \
"$SAHARA_SERVICE_PROTOCOL://$SAHARA_SERVICE_HOST:$SAHARA_SERVICE_PORT/v1.1/\$(tenant_id)s" \
@@ -153,8 +162,10 @@ function install_sahara {
# install_python_saharaclient() - Collect source and prepare
function install_python_saharaclient {
git_clone $SAHARA_PYTHONCLIENT_REPO $SAHARA_PYTHONCLIENT_DIR $SAHARA_PYTHONCLIENT_BRANCH
setup_develop $SAHARA_PYTHONCLIENT_DIR
if use_library_from_git "python-saharaclient"; then
git_clone_by_name "python-saharaclient"
setup_dev_lib "python-saharaclient"
fi
}
# start_sahara() - Start running processes, including screen
+13 -4
View File
@@ -34,8 +34,10 @@ if is_ssl_enabled_service "s-proxy" || is_service_enabled tls-proxy; then
fi
# Set up default directories
GITDIR["python-swiftclient"]=$DEST/python-swiftclient
SWIFT_DIR=$DEST/swift
SWIFTCLIENT_DIR=$DEST/python-swiftclient
SWIFT_AUTH_CACHE_DIR=${SWIFT_AUTH_CACHE_DIR:-/var/cache/swift}
SWIFT_APACHE_WSGI_DIR=${SWIFT_APACHE_WSGI_DIR:-/var/www/swift}
SWIFT3_DIR=$DEST/swift3
@@ -330,7 +332,12 @@ function configure_swift {
SWIFT_CONFIG_PROXY_SERVER=${SWIFT_CONF_DIR}/proxy-server.conf
cp ${SWIFT_DIR}/etc/proxy-server.conf-sample ${SWIFT_CONFIG_PROXY_SERVER}
cp ${SWIFT_DIR}/etc/container-sync-realms.conf-sample ${SWIFT_CONF_DIR}/container-sync-realms.conf
# To run container sync feature introduced in Swift ver 1.12.0,
# container sync "realm" is added in container-sync-realms.conf
local csyncfile=${SWIFT_CONF_DIR}/container-sync-realms.conf
cp ${SWIFT_DIR}/etc/container-sync-realms.conf-sample ${csyncfile}
iniset ${csyncfile} realm1 key realm1key
iniset ${csyncfile} realm1 cluster_name1 "$SWIFT_SERVICE_PROTOCOL://$SERVICE_HOST:8080/v1/"
iniuncomment ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT user
iniset ${SWIFT_CONFIG_PROXY_SERVER} DEFAULT user ${STACK_USER}
@@ -649,8 +656,10 @@ function install_swift {
}
function install_swiftclient {
git_clone $SWIFTCLIENT_REPO $SWIFTCLIENT_DIR $SWIFTCLIENT_BRANCH
setup_develop $SWIFTCLIENT_DIR
if use_library_from_git "python-swiftclient"; then
git_clone_by_name "python-swiftclient"
setup_dev_lib "python-swiftclient"
fi
}
# start_swift() - Start running processes, including screen
+179 -119
View File
@@ -44,11 +44,12 @@ set +o xtrace
# --------
# Set up default directories
GITDIR["tempest-lib"]=$DEST/tempest-lib
TEMPEST_DIR=$DEST/tempest
TEMPEST_CONFIG_DIR=${TEMPEST_CONFIG_DIR:-$TEMPEST_DIR/etc}
TEMPEST_CONFIG=$TEMPEST_CONFIG_DIR/tempest.conf
TEMPEST_STATE_PATH=${TEMPEST_STATE_PATH:=$DATA_DIR/tempest}
TEMPEST_LIB_DIR=$DEST/tempest-lib
NOVA_SOURCE_DIR=$DEST/nova
@@ -76,7 +77,9 @@ IPV6_SUBNET_ATTRIBUTES_ENABLED=$(trueorfalse True $IPV6_SUBNET_ATTRIBUTES_ENABLE
# configure_tempest() - Set config files, create data dirs, etc
function configure_tempest {
setup_develop $TEMPEST_DIR
# install testr since its used to process tempest logs
pip_install_gr testrepository
local image_lines
local images
local num_images
@@ -107,43 +110,44 @@ function configure_tempest {
# ... Also ensure we only take active images, so we don't get snapshots in process
declare -a images
while read -r IMAGE_NAME IMAGE_UUID; do
if [ "$IMAGE_NAME" = "$DEFAULT_IMAGE_NAME" ]; then
image_uuid="$IMAGE_UUID"
image_uuid_alt="$IMAGE_UUID"
fi
images+=($IMAGE_UUID)
# TODO(stevemar): update this command to use openstackclient's `openstack image list`
# when it supports listing by status.
done < <(glance image-list --status=active | awk -F'|' '!/^(+--)|ID|aki|ari/ { print $3,$2 }')
case "${#images[*]}" in
0)
echo "Found no valid images to use!"
exit 1
;;
1)
if [ -z "$image_uuid" ]; then
image_uuid=${images[0]}
image_uuid_alt=${images[0]}
if is_service_enabled glance; then
while read -r IMAGE_NAME IMAGE_UUID; do
if [ "$IMAGE_NAME" = "$DEFAULT_IMAGE_NAME" ]; then
image_uuid="$IMAGE_UUID"
image_uuid_alt="$IMAGE_UUID"
fi
;;
*)
if [ -z "$image_uuid" ]; then
image_uuid=${images[0]}
image_uuid_alt=${images[1]}
fi
;;
esac
images+=($IMAGE_UUID)
# TODO(stevemar): update this command to use openstackclient's `openstack image list`
# when it supports listing by status.
done < <(glance image-list --status=active | awk -F'|' '!/^(+--)|ID|aki|ari/ { print $3,$2 }')
# Create tempest.conf from tempest.conf.sample
# copy every time, because the image UUIDS are going to change
case "${#images[*]}" in
0)
echo "Found no valid images to use!"
exit 1
;;
1)
if [ -z "$image_uuid" ]; then
image_uuid=${images[0]}
image_uuid_alt=${images[0]}
fi
;;
*)
if [ -z "$image_uuid" ]; then
image_uuid=${images[0]}
image_uuid_alt=${images[1]}
fi
;;
esac
fi
# (Re)create ``tempest.conf``
# Create every time because the image UUIDS are going to change
if [[ ! -d $TEMPEST_CONFIG_DIR ]]; then
sudo mkdir -p $TEMPEST_CONFIG_DIR
fi
sudo chown $STACK_USER $TEMPEST_CONFIG_DIR
cp $TEMPEST_DIR/etc/tempest.conf.sample $TEMPEST_CONFIG
chmod 644 $TEMPEST_CONFIG
rm -f $TEMPEST_CONFIG
password=${ADMIN_PASSWORD:-secrete}
@@ -158,63 +162,65 @@ function configure_tempest {
ALT_TENANT_NAME=${ALT_TENANT_NAME:-alt_demo}
ADMIN_TENANT_ID=$(openstack project list | awk "/ admin / { print \$2 }")
# If the ``DEFAULT_INSTANCE_TYPE`` not declared, use the new behavior
# Tempest creates instane types for himself
if [[ -z "$DEFAULT_INSTANCE_TYPE" ]]; then
available_flavors=$(nova flavor-list)
if [[ ! ( $available_flavors =~ 'm1.nano' ) ]]; then
if is_arch "ppc64"; then
# qemu needs at least 128MB of memory to boot on ppc64
nova flavor-create m1.nano 42 128 0 1
else
nova flavor-create m1.nano 42 64 0 1
if is_service_enabled nova; then
# If the ``DEFAULT_INSTANCE_TYPE`` not declared, use the new behavior
# Tempest creates instane types for himself
if [[ -z "$DEFAULT_INSTANCE_TYPE" ]]; then
available_flavors=$(nova flavor-list)
if [[ ! ( $available_flavors =~ 'm1.nano' ) ]]; then
if is_arch "ppc64"; then
# qemu needs at least 128MB of memory to boot on ppc64
nova flavor-create m1.nano 42 128 0 1
else
nova flavor-create m1.nano 42 64 0 1
fi
fi
fi
flavor_ref=42
boto_instance_type=m1.nano
if [[ ! ( $available_flavors =~ 'm1.micro' ) ]]; then
if is_arch "ppc64"; then
nova flavor-create m1.micro 84 256 0 1
else
nova flavor-create m1.micro 84 128 0 1
flavor_ref=42
boto_instance_type=m1.nano
if [[ ! ( $available_flavors =~ 'm1.micro' ) ]]; then
if is_arch "ppc64"; then
nova flavor-create m1.micro 84 256 0 1
else
nova flavor-create m1.micro 84 128 0 1
fi
fi
fi
flavor_ref_alt=84
else
# Check Nova for existing flavors and, if set, look for the
# ``DEFAULT_INSTANCE_TYPE`` and use that.
boto_instance_type=$DEFAULT_INSTANCE_TYPE
flavor_lines=`nova flavor-list`
IFS=$'\r\n'
flavors=""
for line in $flavor_lines; do
f=$(echo $line | awk "/ $DEFAULT_INSTANCE_TYPE / { print \$2 }")
flavors="$flavors $f"
done
flavor_ref_alt=84
else
# Check Nova for existing flavors and, if set, look for the
# ``DEFAULT_INSTANCE_TYPE`` and use that.
boto_instance_type=$DEFAULT_INSTANCE_TYPE
flavor_lines=`nova flavor-list`
IFS=$'\r\n'
flavors=""
for line in $flavor_lines; do
f=$(echo $line | awk "/ $DEFAULT_INSTANCE_TYPE / { print \$2 }")
flavors="$flavors $f"
done
for line in $flavor_lines; do
flavors="$flavors `echo $line | grep -v "^\(|\s*ID\|+--\)" | cut -d' ' -f2`"
done
for line in $flavor_lines; do
flavors="$flavors `echo $line | grep -v "^\(|\s*ID\|+--\)" | cut -d' ' -f2`"
done
IFS=" "
flavors=($flavors)
num_flavors=${#flavors[*]}
echo "Found $num_flavors flavors"
if [[ $num_flavors -eq 0 ]]; then
echo "Found no valid flavors to use!"
exit 1
fi
flavor_ref=${flavors[0]}
flavor_ref_alt=$flavor_ref
# ensure flavor_ref and flavor_ref_alt have different values
# some resize instance in tempest tests depends on this.
for f in ${flavors[@]:1}; do
if [[ $f -ne $flavor_ref ]]; then
flavor_ref_alt=$f
break
IFS=" "
flavors=($flavors)
num_flavors=${#flavors[*]}
echo "Found $num_flavors flavors"
if [[ $num_flavors -eq 0 ]]; then
echo "Found no valid flavors to use!"
exit 1
fi
done
flavor_ref=${flavors[0]}
flavor_ref_alt=$flavor_ref
# ensure flavor_ref and flavor_ref_alt have different values
# some resize instance in tempest tests depends on this.
for f in ${flavors[@]:1}; do
if [[ $f -ne $flavor_ref ]]; then
flavor_ref_alt=$f
break
fi
done
fi
fi
if [ "$Q_USE_NAMESPACE" != "False" ]; then
@@ -268,6 +274,9 @@ function configure_tempest {
iniset $TEMPEST_CONFIG identity admin_domain_name $ADMIN_DOMAIN_NAME
iniset $TEMPEST_CONFIG identity auth_version ${TEMPEST_AUTH_VERSION:-v2}
# Identity Features
iniset $TEMPEST_CONFIG identity-feature-enabled xml_api True
# Image
# for the gate we want to be able to override this variable so we aren't
# doing an HTTP fetch over the wide internet for this test
@@ -277,6 +286,7 @@ function configure_tempest {
# Compute
iniset $TEMPEST_CONFIG compute allow_tenant_isolation ${TEMPEST_ALLOW_TENANT_ISOLATION:-True}
iniset $TEMPEST_CONFIG auth tempest_roles "Member"
iniset $TEMPEST_CONFIG compute ssh_user ${DEFAULT_INSTANCE_USER:-cirros} # DEPRECATED
iniset $TEMPEST_CONFIG compute network_for_ssh $PRIVATE_NETWORK_NAME
iniset $TEMPEST_CONFIG compute ip_version_for_ssh 4
@@ -288,14 +298,40 @@ function configure_tempest {
iniset $TEMPEST_CONFIG compute flavor_ref $flavor_ref
iniset $TEMPEST_CONFIG compute flavor_ref_alt $flavor_ref_alt
iniset $TEMPEST_CONFIG compute ssh_connect_method $ssh_connect_method
iniset $TEMPEST_CONFIG compute fixed_network_name $PRIVATE_NETWORK_NAME
# Compute Features
iniset $TEMPEST_CONFIG compute-feature-enabled resize True
iniset $TEMPEST_CONFIG compute-feature-enabled live_migration ${LIVE_MIGRATION_AVAILABLE:-False}
iniset $TEMPEST_CONFIG compute-feature-enabled change_password False
iniset $TEMPEST_CONFIG compute-feature-enabled block_migration_for_live_migration ${USE_BLOCK_MIGRATION_FOR_LIVE_MIGRATION:-False}
iniset $TEMPEST_CONFIG compute-feature-enabled api_extensions ${COMPUTE_API_EXTENSIONS:-"all"}
iniset $TEMPEST_CONFIG compute-feature-disabled api_extensions ${DISABLE_COMPUTE_API_EXTENSIONS}
DEFAULT_COMPUTE_EXT="NMN, OS-DCF, OS-EXT-AZ, OS-EXT-IMG-SIZE, OS-EXT-IPS, OS-EXT-IPS-MAC, OS-EXT-SRV-ATTR, OS-EXT-STS"
DEFAULT_COMPUTE_EXT+=", OS-EXT-VIF-NET, OS-FLV-DISABLED, OS-FLV-EXT-DATA, OS-SCH-HNT, OS-SRV-USG"
DEFAULT_COMPUTE_EXT+=", os-admin-actions, os-agents, os-aggregates, os-assisted-volume-snapshots"
DEFAULT_COMPUTE_EXT+=", os-attach-interfaces, os-availability-zone, os-baremetal-ext-status, os-baremetal-nodes"
DEFAULT_COMPUTE_EXT+=", os-block-device-mapping-v2-boot, os-cell-capacities, os-cells, os-certificates"
DEFAULT_COMPUTE_EXT+=", os-cloudpipe, os-cloudpipe-update, os-config-drive, os-console-auth-tokens"
DEFAULT_COMPUTE_EXT+=", os-console-output, os-consoles, os-create-server-ext, os-deferred-delete, os-evacuate"
DEFAULT_COMPUTE_EXT+=", os-extended-evacuate-find-host, os-extended-floating-ips, os-extended-hypervisors"
DEFAULT_COMPUTE_EXT+=", os-extended-networks, os-extended-quotas, os-extended-rescue-with-image"
DEFAULT_COMPUTE_EXT+=", os-extended-services, os-extended-services-delete, os-extended-volumes, os-fixed-ips"
DEFAULT_COMPUTE_EXT+=", os-flavor-access, os-flavor-extra-specs, os-flavor-manage, os-flavor-rxtx"
DEFAULT_COMPUTE_EXT+=", os-flavor-swap, os-floating-ip-dns, os-floating-ip-pools, os-floating-ips"
DEFAULT_COMPUTE_EXT+=", os-floating-ips-bulk, os-fping, os-hide-server-addresses, os-hosts, os-hypervisor-status"
DEFAULT_COMPUTE_EXT+=", os-hypervisors, os-instance-actions, os-instance_usage_audit_log, os-keypairs"
DEFAULT_COMPUTE_EXT+=", os-migrations, os-multiple-create, os-networks, os-networks-associate"
DEFAULT_COMPUTE_EXT+=", os-preserve-ephemeral-rebuild, os-quota-class-sets, os-quota-sets, os-rescue"
DEFAULT_COMPUTE_EXT+=", os-security-group-default-rules, os-security-groups, os-server-diagnostics"
DEFAULT_COMPUTE_EXT+=", os-server-external-events, os-server-group-quotas, os-server-groups"
DEFAULT_COMPUTE_EXT+=", os-server-list-multi-status, os-server-password, os-server-start-stop, os-services"
DEFAULT_COMPUTE_EXT+=", os-shelve, os-simple-tenant-usage, os-tenant-networks, os-used-limits"
DEFAULT_COMPUTE_EXT+=", os-used-limits-for-admin, os-user-data, os-user-quotas, os-virtual-interfaces"
DEFAULT_COMPUTE_EXT+=", os-volume-attachment-update, os-volumes"
iniset $TEMPEST_CONFIG compute-feature-enabled api_extensions "${COMPUTE_API_EXTENSIONS:-$DEFAULT_COMPUTE_EXT}"
iniset $TEMPEST_CONFIG compute-feature-enabled xml_api_v2 ${COMPUTE_XML_API_V2:-True}
iniset $TEMPEST_CONFIG compute-feature-disabled api_extensions "${DISABLE_COMPUTE_API_EXTENSIONS}"
# Compute admin
iniset $TEMPEST_CONFIG "compute-admin" username $ADMIN_USERNAME
@@ -310,19 +346,30 @@ function configure_tempest {
iniset $TEMPEST_CONFIG network default_network "$FIXED_RANGE"
iniset $TEMPEST_CONFIG network-feature-enabled ipv6 "$IPV6_ENABLED"
iniset $TEMPEST_CONFIG network-feature-enabled ipv6_subnet_attributes "$IPV6_SUBNET_ATTRIBUTES_ENABLED"
iniset $TEMPEST_CONFIG network-feature-enabled api_extensions ${NETWORK_API_EXTENSIONS:-"all"}
iniset $TEMPEST_CONFIG network-feature-disabled api_extensions ${DISABLE_NETWORK_API_EXTENSIONS}
DEFAULT_NET_EXT="agent, allowed-address-pairs, binding, dhcp_agent_scheduler, dvr, ext-gw-mode, external-net, extra_dhcp_opt"
DEFAULT_NET_EXT+=", extraroute, fwaas, l3-ha, l3_agent_scheduler, lbaas, lbaas_agent_scheduler, metering"
DEFAULT_NET_EXT+=", multi-provider, provider, quotas, router, security-group, service-type, vpnaas"
iniset $TEMPEST_CONFIG network-feature-enabled api_extensions "${NETWORK_API_EXTENSIONS:-$DEFAULT_NET_EXT}"
iniset $TEMPEST_CONFIG network-feature-disabled api_extensions "${DISABLE_NETWORK_API_EXTENSIONS}"
iniset $TEMPEST_CONFIG network-feature-enabled xml_api True
# boto
iniset $TEMPEST_CONFIG boto ec2_url "$EC2_SERVICE_PROTOCOL://$SERVICE_HOST:8773/services/Cloud"
iniset $TEMPEST_CONFIG boto s3_url "http://$SERVICE_HOST:${S3_SERVICE_PORT:-3333}"
iniset $TEMPEST_CONFIG boto s3_materials_path "$BOTO_MATERIALS_PATH"
iniset $TEMPEST_CONFIG boto ari_manifest cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-initrd.manifest.xml
iniset $TEMPEST_CONFIG boto ami_manifest cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-blank.img.manifest.xml
iniset $TEMPEST_CONFIG boto aki_manifest cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-vmlinuz.manifest.xml
iniset $TEMPEST_CONFIG boto instance_type "$boto_instance_type"
iniset $TEMPEST_CONFIG boto http_socket_timeout 30
iniset $TEMPEST_CONFIG boto ssh_user ${DEFAULT_INSTANCE_USER:-cirros}
# boto - disabled
#
# because of compat issues boto in icehouse is not testable
# against tempest. Set FORCE_BOTO=1 in local.conf to enable.
iniset $TEMPEST_CONFIG compute-feature-enabled ec2_api False
if [[ -n "$FORCE_BOTO" ]]; then
iniset $TEMPEST_CONFIG boto ec2_url "$EC2_SERVICE_PROTOCOL://$SERVICE_HOST:8773/services/Cloud"
iniset $TEMPEST_CONFIG boto s3_url "http://$SERVICE_HOST:${S3_SERVICE_PORT:-3333}"
iniset $TEMPEST_CONFIG boto s3_materials_path "$BOTO_MATERIALS_PATH"
iniset $TEMPEST_CONFIG boto ari_manifest cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-initrd.manifest.xml
iniset $TEMPEST_CONFIG boto ami_manifest cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-blank.img.manifest.xml
iniset $TEMPEST_CONFIG boto aki_manifest cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-vmlinuz.manifest.xml
iniset $TEMPEST_CONFIG boto instance_type "$boto_instance_type"
iniset $TEMPEST_CONFIG boto http_socket_timeout 30
iniset $TEMPEST_CONFIG boto ssh_user ${DEFAULT_INSTANCE_USER:-cirros}
iniset $TEMPEST_CONFIG compute-feature-enabled ec2_api True
fi
# Orchestration Tests
if is_service_enabled heat; then
@@ -353,12 +400,21 @@ function configure_tempest {
iniset $TEMPEST_CONFIG telemetry too_slow_to_test "False"
# Object storage
iniset $TEMPEST_CONFIG object-storage-feature-enabled discoverable_apis ${OBJECT_STORAGE_API_EXTENSIONS:-"all"}
iniset $TEMPEST_CONFIG object-storage-feature-disabled discoverable_apis ${OBJECT_STORAGE_DISABLE_API_EXTENSIONS}
DEFAULT_SWIFT_OPT="account_quotas, bulk_delete, bulk_upload, container_quotas, container_sync, crossdomain, formpost"
DEFAULT_SWIFT_OPT+=", keystoneauth, ratelimit, slo, staticweb, tempauth, tempurl"
iniset $TEMPEST_CONFIG object-storage-feature-enabled discoverable_apis "${OBJECT_STORAGE_API_EXTENSIONS:-$DEFAULT_SWIFT_OPT}"
iniset $TEMPEST_CONFIG object-storage-feature-disabled discoverable_apis "${OBJECT_STORAGE_DISABLE_API_EXTENSIONS}"
# Volume
iniset $TEMPEST_CONFIG volume-feature-enabled api_extensions ${VOLUME_API_EXTENSIONS:-"all"}
iniset $TEMPEST_CONFIG volume-feature-disabled api_extensions ${DISABLE_VOLUME_API_EXTENSIONS}
DEFAULT_VOL_EXT="OS-SCH-HNT, backups, cgsnapshots, consistencygroups, encryption, os-admin-actions, os-availability-zone"
DEFAULT_VOL_EXT+=", os-extended-services, os-extended-snapshot-attributes, os-hosts, os-image-create"
DEFAULT_VOL_EXT+=", os-quota-class-sets, os-quota-sets, os-services, os-snapshot-actions, os-types-extra-specs"
DEFAULT_VOL_EXT+=", os-types-manage, os-used-limits, os-vol-host-attr, os-vol-image-meta"
DEFAULT_VOL_EXT+=", os-vol-mig-status-attr, os-vol-tenant-attr, os-volume-actions, os-volume-encryption-metadata"
DEFAULT_VOL_EXT+=", os-volume-manage, os-volume-replication, os-volume-transfer, os-volume-unmanage, qos-specs"
DEFAULT_VOL_EXT+=", scheduler-stats"
iniset $TEMPEST_CONFIG volume-feature-enabled api_extensions "${VOLUME_API_EXTENSIONS:-$DEFAULT_VOL_EXT}"
iniset $TEMPEST_CONFIG volume-feature-disabled api_extensions "${DISABLE_VOLUME_API_EXTENSIONS}"
if ! is_service_enabled c-bak; then
iniset $TEMPEST_CONFIG volume-feature-enabled backup False
fi
@@ -428,8 +484,10 @@ function create_tempest_accounts {
# install_tempest_lib() - Collect source, prepare, and install tempest-lib
function install_tempest_lib {
git_clone $TEMPEST_LIB_REPO $TEMPEST_LIB_DIR $TEMPEST_LIB_BRANCH
setup_develop $TEMPEST_LIB_DIR
if use_library_from_git "tempest-lib"; then
git_clone_by_name "tempest-lib"
setup_dev_lib "tempest-lib"
fi
}
# install_tempest() - Collect source and prepare
@@ -447,20 +505,22 @@ function init_tempest {
local kernel="$image_dir/${base_image_name}-vmlinuz"
local ramdisk="$image_dir/${base_image_name}-initrd"
local disk_image="$image_dir/${base_image_name}-blank.img"
# if the cirros uec downloaded and the system is uec capable
if [ -f "$kernel" -a -f "$ramdisk" -a -f "$disk_image" -a "$VIRT_DRIVER" != "openvz" \
-a \( "$LIBVIRT_TYPE" != "lxc" -o "$VIRT_DRIVER" != "libvirt" \) ]; then
echo "Prepare aki/ari/ami Images"
mkdir -p $BOTO_MATERIALS_PATH
( #new namespace
# tenant:demo ; user: demo
source $TOP_DIR/accrc/demo/demo
euca-bundle-image -r ${CIRROS_ARCH} -i "$kernel" --kernel true -d "$BOTO_MATERIALS_PATH"
euca-bundle-image -r ${CIRROS_ARCH} -i "$ramdisk" --ramdisk true -d "$BOTO_MATERIALS_PATH"
euca-bundle-image -r ${CIRROS_ARCH} -i "$disk_image" -d "$BOTO_MATERIALS_PATH"
) 2>&1 </dev/null | cat
else
echo "Boto materials are not prepared"
if is_service_enabled nova; then
# if the cirros uec downloaded and the system is uec capable
if [ -f "$kernel" -a -f "$ramdisk" -a -f "$disk_image" -a "$VIRT_DRIVER" != "openvz" \
-a \( "$LIBVIRT_TYPE" != "lxc" -o "$VIRT_DRIVER" != "libvirt" \) ]; then
echo "Prepare aki/ari/ami Images"
mkdir -p $BOTO_MATERIALS_PATH
( #new namespace
# tenant:demo ; user: demo
source $TOP_DIR/accrc/demo/demo
euca-bundle-image -r ${CIRROS_ARCH} -i "$kernel" --kernel true -d "$BOTO_MATERIALS_PATH"
euca-bundle-image -r ${CIRROS_ARCH} -i "$ramdisk" --ramdisk true -d "$BOTO_MATERIALS_PATH"
euca-bundle-image -r ${CIRROS_ARCH} -i "$disk_image" -d "$BOTO_MATERIALS_PATH"
) 2>&1 </dev/null | cat
else
echo "Boto materials are not prepared"
fi
fi
}
+6 -6
View File
@@ -28,8 +28,9 @@ else
fi
# Set up default configuration
GITDIR["python-troveclient"]=$DEST/python-troveclient
TROVE_DIR=$DEST/trove
TROVECLIENT_DIR=$DEST/python-troveclient
TROVE_CONF_DIR=/etc/trove
TROVE_LOCAL_CONF_DIR=$TROVE_DIR/etc/trove
TROVE_AUTH_CACHE_DIR=${TROVE_AUTH_CACHE_DIR:-/var/cache/trove}
@@ -109,10 +110,6 @@ function cleanup_trove {
rm -fr $TROVE_CONF_DIR/*
}
# configure_troveclient() - Set config files, create data dirs, etc
function configure_troveclient {
setup_develop $TROVECLIENT_DIR
}
# configure_trove() - Set config files, create data dirs, etc
function configure_trove {
@@ -184,7 +181,10 @@ function configure_trove {
# install_troveclient() - Collect source and prepare
function install_troveclient {
git_clone $TROVECLIENT_REPO $TROVECLIENT_DIR $TROVECLIENT_BRANCH
if use_library_from_git "python-troveclient"; then
git_clone_by_name "python-troveclient"
setup_dev_lib "python-troveclient"
fi
}
# install_trove() - Collect source and prepare
+1 -1
View File
@@ -48,7 +48,7 @@ ZAQAR_BACKEND=${ZAQAR_BACKEND:-mongodb}
# Set Zaqar repository
ZAQAR_REPO=${ZAQAR_REPO:-${GIT_BASE}/openstack/zaqar.git}
ZAQAR_BRANCH=${ZAQAR_BRANCH:-master}
ZAQAR_BRANCH=${ZAQAR_BRANCH:-stable/juno}
# Set client library repository
ZAQARCLIENT_REPO=${ZAQARCLIENT_REPO:-${GIT_BASE}/openstack/python-zaqarclient.git}
+9 -38
View File
@@ -18,47 +18,18 @@
PASSES=""
FAILURES=""
# Check the return code and add the test to PASSES or FAILURES as appropriate
# pass_fail <result> <expected> <name>
function pass_fail {
local result=$1
local expected=$2
local test_name=$3
if [[ $result -ne $expected ]]; then
FAILURES="$FAILURES $test_name"
else
PASSES="$PASSES $test_name"
fi
}
if [[ -n $@ ]]; then
FILES=$@
else
LIBS=`find lib -type f | grep -v \.md`
SCRIPTS=`find . -type f -name \*\.sh`
EXTRA="functions functions-common stackrc openrc exerciserc eucarc"
FILES="$SCRIPTS $LIBS $EXTRA"
fi
echo "Running bash8..."
./tools/bash8.py -v $FILES
pass_fail $? 0 bash8
# Test that no one is trying to land crazy refs as branches
echo "Ensuring we don't have crazy refs"
REFS=`grep BRANCH stackrc | grep -v -- '-master'`
rc=$?
pass_fail $rc 1 crazy-refs
if [[ $rc -eq 0 ]]; then
echo "Branch defaults must be master. Found:"
echo $REFS
fi
for testfile in tests/test_*.sh; do
$testfile
if [[ $? -eq 0 ]]; then
PASSES="$PASSES $testfile"
else
FAILURES="$FAILURES $testfile"
fi
done
# Summary display now that all is said and done
echo "====================================================================="
for script in $PASSES; do
echo PASS $script
+26 -8
View File
@@ -215,7 +215,7 @@ fi
# image was created (fix in the works). Remove all pip packages
# before we do anything else
if [[ $DISTRO = "rhel7" && is_rackspace ]]; then
(sudo pip freeze | xargs sudo pip uninstall -y) || true
(sudo -H pip freeze | xargs sudo -H pip uninstall -y) || true
fi
# Some distros need to add repos beyond the defaults provided by the vendor
@@ -579,9 +579,6 @@ if [[ -d $TOP_DIR/extras.d ]]; then
done
fi
# Set the destination directories for other OpenStack projects
OPENSTACKCLIENT_DIR=$DEST/python-openstackclient
# Interactive Configuration
# -------------------------
@@ -783,9 +780,6 @@ fi
# Install middleware
install_keystonemiddleware
git_clone $OPENSTACKCLIENT_REPO $OPENSTACKCLIENT_DIR $OPENSTACKCLIENT_BRANCH
setup_develop $OPENSTACKCLIENT_DIR
if is_service_enabled key; then
if [ "$KEYSTONE_AUTH_HOST" == "$SERVICE_HOST" ]; then
install_keystone
@@ -859,7 +853,6 @@ if is_service_enabled tls-proxy || [ "$USE_SSL" == "True" ]; then
# don't be naive and add to existing line!
fi
# Extras Install
# --------------
@@ -870,6 +863,31 @@ if [[ -d $TOP_DIR/extras.d ]]; then
done
fi
# NOTE(mriedem): This is an unfortunate hack to workaround a problem with
# uncapped requirements for python-novaclient in python-openstackclient 1.0.1
# such that it pulls in the latest python-novaclient if something hasn't
# already pulled in novaclient (like cinder) at a version that osc in juno will
# accept. The large-ops job doesn't install cinder (since it uses the fake
# nova virt driver) so osc is the first thing to install novaclient which
# then causes a wedge due to capped novaclient in other juno projects.
# So if we're running the large-ops job (per using the nova fake virt driver),
# install novaclient per the g-r caps for stable/juno so osc doesn't pull in
# the latest novaclient and wedge everything.
if [[ "$VIRT_DRIVER" = 'fake' ]]; then
pip_install_gr python-novaclient
fi
# install the OpenStack client, needed for most setup commands
if use_library_from_git "python-openstackclient"; then
git_clone_by_name "python-openstackclient"
setup_dev_lib "python-openstackclient"
else
pip_install_gr python-openstackclient
fi
if [[ $TRACK_DEPENDS = True ]]; then
$DEST/.venv/bin/pip freeze > $DEST/requires-post-pip
if ! diff -Nru $DEST/requires-pre-pip $DEST/requires-post-pip > $DEST/requires.diff; then
+57 -51
View File
@@ -131,47 +131,51 @@ GIT_BASE=${GIT_BASE:-git://git.openstack.org}
# metering service
CEILOMETER_REPO=${CEILOMETER_REPO:-${GIT_BASE}/openstack/ceilometer.git}
CEILOMETER_BRANCH=${CEILOMETER_BRANCH:-master}
CEILOMETER_BRANCH=${CEILOMETER_BRANCH:-stable/juno}
# volume service
# block storage service
CINDER_REPO=${CINDER_REPO:-${GIT_BASE}/openstack/cinder.git}
CINDER_BRANCH=${CINDER_BRANCH:-master}
CINDER_BRANCH=${CINDER_BRANCH:-stable/juno}
# image catalog service
GLANCE_REPO=${GLANCE_REPO:-${GIT_BASE}/openstack/glance.git}
GLANCE_BRANCH=${GLANCE_BRANCH:-master}
GLANCE_BRANCH=${GLANCE_BRANCH:-stable/juno}
# heat service
HEAT_REPO=${HEAT_REPO:-${GIT_BASE}/openstack/heat.git}
HEAT_BRANCH=${HEAT_BRANCH:-master}
HEAT_BRANCH=${HEAT_BRANCH:-stable/juno}
# django powered web control panel for openstack
HORIZON_REPO=${HORIZON_REPO:-${GIT_BASE}/openstack/horizon.git}
HORIZON_BRANCH=${HORIZON_BRANCH:-master}
HORIZON_BRANCH=${HORIZON_BRANCH:-stable/juno}
# baremetal provisioning service
IRONIC_REPO=${IRONIC_REPO:-${GIT_BASE}/openstack/ironic.git}
IRONIC_BRANCH=${IRONIC_BRANCH:-master}
IRONIC_BRANCH=${IRONIC_BRANCH:-stable/juno}
# unified auth system (manages accounts/tokens)
KEYSTONE_REPO=${KEYSTONE_REPO:-${GIT_BASE}/openstack/keystone.git}
KEYSTONE_BRANCH=${KEYSTONE_BRANCH:-master}
KEYSTONE_BRANCH=${KEYSTONE_BRANCH:-stable/juno}
# neutron service
NEUTRON_REPO=${NEUTRON_REPO:-${GIT_BASE}/openstack/neutron.git}
NEUTRON_BRANCH=${NEUTRON_BRANCH:-master}
NEUTRON_BRANCH=${NEUTRON_BRANCH:-stable/juno}
# compute service
NOVA_REPO=${NOVA_REPO:-${GIT_BASE}/openstack/nova.git}
NOVA_BRANCH=${NOVA_BRANCH:-master}
NOVA_BRANCH=${NOVA_BRANCH:-stable/juno}
# storage service
# data processing service
SAHARA_REPO=${SAHARA_REPO:-${GIT_BASE}/openstack/sahara.git}
SAHARA_BRANCH=${SAHARA_BRANCH:-stable/juno}
# object storage service
SWIFT_REPO=${SWIFT_REPO:-${GIT_BASE}/openstack/swift.git}
SWIFT_BRANCH=${SWIFT_BRANCH:-master}
SWIFT_BRANCH=${SWIFT_BRANCH:-stable/juno}
# trove service
TROVE_REPO=${TROVE_REPO:-${GIT_BASE}/openstack/trove.git}
TROVE_BRANCH=${TROVE_BRANCH:-master}
TROVE_BRANCH=${TROVE_BRANCH:-stable/juno}
##############
#
@@ -181,15 +185,15 @@ TROVE_BRANCH=${TROVE_BRANCH:-master}
# consolidated openstack requirements
REQUIREMENTS_REPO=${REQUIREMENTS_REPO:-${GIT_BASE}/openstack/requirements.git}
REQUIREMENTS_BRANCH=${REQUIREMENTS_BRANCH:-master}
REQUIREMENTS_BRANCH=${REQUIREMENTS_BRANCH:-stable/juno}
# Tempest test suite
TEMPEST_REPO=${TEMPEST_REPO:-${GIT_BASE}/openstack/tempest.git}
TEMPEST_BRANCH=${TEMPEST_BRANCH:-master}
# TODO(sdague): this should end up as a library component like below
TEMPEST_LIB_REPO=${TEMPEST_LIB_REPO:-${GIT_BASE}/openstack/tempest-lib.git}
TEMPEST_LIB_BRANCH=${TEMPEST_LIB_BRANCH:-master}
GITREPO["tempest-lib"]=${TEMPEST_LIB_REPO:-${GIT_BASE}/openstack/tempest-lib.git}
GITBRANCH["tempest-lib"]=${TEMPEST_LIB_BRANCH:-master}
##############
@@ -199,48 +203,54 @@ TEMPEST_LIB_BRANCH=${TEMPEST_LIB_BRANCH:-master}
##############
# ceilometer client library
CEILOMETERCLIENT_REPO=${CEILOMETERCLIENT_REPO:-${GIT_BASE}/openstack/python-ceilometerclient.git}
CEILOMETERCLIENT_BRANCH=${CEILOMETERCLIENT_BRANCH:-master}
GITREPO["python-ceilometerclient"]=${CEILOMETERCLIENT_REPO:-${GIT_BASE}/openstack/python-ceilometerclient.git}
GITBRANCH["python-ceilometerclient"]=${CEILOMETERCLIENT_BRANCH:-master}
# volume client
CINDERCLIENT_REPO=${CINDERCLIENT_REPO:-${GIT_BASE}/openstack/python-cinderclient.git}
CINDERCLIENT_BRANCH=${CINDERCLIENT_BRANCH:-master}
GITREPO["python-cinderclient"]=${CINDERCLIENT_REPO:-${GIT_BASE}/openstack/python-cinderclient.git}
GITBRANCH["python-cinderclient"]=${CINDERCLIENT_BRANCH:-master}
# python glance client library
GLANCECLIENT_REPO=${GLANCECLIENT_REPO:-${GIT_BASE}/openstack/python-glanceclient.git}
GLANCECLIENT_BRANCH=${GLANCECLIENT_BRANCH:-master}
GITREPO["python-glanceclient"]=${GLANCECLIENT_REPO:-${GIT_BASE}/openstack/python-glanceclient.git}
GITBRANCH["python-glanceclient"]=${GLANCECLIENT_BRANCH:-master}
# python heat client library
HEATCLIENT_REPO=${HEATCLIENT_REPO:-${GIT_BASE}/openstack/python-heatclient.git}
HEATCLIENT_BRANCH=${HEATCLIENT_BRANCH:-master}
GITREPO["python-heatclient"]=${HEATCLIENT_REPO:-${GIT_BASE}/openstack/python-heatclient.git}
GITBRANCH["python-heatclient"]=${HEATCLIENT_BRANCH:-master}
# ironic client
IRONICCLIENT_REPO=${IRONICCLIENT_REPO:-${GIT_BASE}/openstack/python-ironicclient.git}
IRONICCLIENT_BRANCH=${IRONICCLIENT_BRANCH:-master}
GITREPO["python-ironicclient"]=${IRONICCLIENT_REPO:-${GIT_BASE}/openstack/python-ironicclient.git}
GITBRANCH["python-ironicclient"]=${IRONICCLIENT_BRANCH:-master}
# python keystone client library to nova that horizon uses
KEYSTONECLIENT_REPO=${KEYSTONECLIENT_REPO:-${GIT_BASE}/openstack/python-keystoneclient.git}
KEYSTONECLIENT_BRANCH=${KEYSTONECLIENT_BRANCH:-master}
GITREPO["python-keystoneclient"]=${KEYSTONECLIENT_REPO:-${GIT_BASE}/openstack/python-keystoneclient.git}
GITBRANCH["python-keystoneclient"]=${KEYSTONECLIENT_BRANCH:-master}
# neutron client
NEUTRONCLIENT_REPO=${NEUTRONCLIENT_REPO:-${GIT_BASE}/openstack/python-neutronclient.git}
NEUTRONCLIENT_BRANCH=${NEUTRONCLIENT_BRANCH:-master}
GITREPO["python-neutronclient"]=${NEUTRONCLIENT_REPO:-${GIT_BASE}/openstack/python-neutronclient.git}
GITBRANCH["python-neutronclient"]=${NEUTRONCLIENT_BRANCH:-master}
# python client library to nova that horizon (and others) use
NOVACLIENT_REPO=${NOVACLIENT_REPO:-${GIT_BASE}/openstack/python-novaclient.git}
NOVACLIENT_BRANCH=${NOVACLIENT_BRANCH:-master}
GITREPO["python-novaclient"]=${NOVACLIENT_REPO:-${GIT_BASE}/openstack/python-novaclient.git}
GITBRANCH["python-novaclient"]=${NOVACLIENT_BRANCH:-master}
# python saharaclient
GITREPO["python-saharaclient"]=${SAHARACLIENT_REPO:-${GIT_BASE}/openstack/python-saharaclient.git}
GITBRANCH["python-saharaclient"]=${SAHARACLIENT_BRANCH:-master}
# python swift client library
SWIFTCLIENT_REPO=${SWIFTCLIENT_REPO:-${GIT_BASE}/openstack/python-swiftclient.git}
SWIFTCLIENT_BRANCH=${SWIFTCLIENT_BRANCH:-master}
GITREPO["python-swiftclient"]=${SWIFTCLIENT_REPO:-${GIT_BASE}/openstack/python-swiftclient.git}
GITBRANCH["python-swiftclient"]=${SWIFTCLIENT_BRANCH:-master}
# trove client library test
TROVECLIENT_REPO=${TROVECLIENT_REPO:-${GIT_BASE}/openstack/python-troveclient.git}
TROVECLIENT_BRANCH=${TROVECLIENT_BRANCH:-master}
GITREPO["python-troveclient"]=${TROVECLIENT_REPO:-${GIT_BASE}/openstack/python-troveclient.git}
GITBRANCH["python-troveclient"]=${TROVECLIENT_BRANCH:-master}
# consolidated openstack python client
OPENSTACKCLIENT_REPO=${OPENSTACKCLIENT_REPO:-${GIT_BASE}/openstack/python-openstackclient.git}
OPENSTACKCLIENT_BRANCH=${OPENSTACKCLIENT_BRANCH:-master}
GITREPO["python-openstackclient"]=${OPENSTACKCLIENT_REPO:-${GIT_BASE}/openstack/python-openstackclient.git}
GITBRANCH["python-openstackclient"]=${OPENSTACKCLIENT_BRANCH:-master}
# this doesn't exist in a lib file, so set it here
GITDIR["python-openstackclient"]=$DEST/python-openstackclient
###################
#
@@ -268,10 +278,6 @@ GITBRANCH["oslo.db"]=${OSLODB_BRANCH:-master}
GITREPO["oslo.i18n"]=${OSLOI18N_REPO:-${GIT_BASE}/openstack/oslo.i18n.git}
GITBRANCH["oslo.i18n"]=${OSLOI18N_BRANCH:-master}
# oslo.log
GITREPO["oslo.log"]=${OSLOLOG_REPO:-${GIT_BASE}/openstack/oslo.log.git}
GITBRANCH["oslo.log"]=${OSLOLOG_BRANCH:-master}
# oslo.messaging
GITREPO["oslo.messaging"]=${OSLOMSG_REPO:-${GIT_BASE}/openstack/oslo.messaging.git}
GITBRANCH["oslo.messaging"]=${OSLOMSG_BRANCH:-master}
@@ -319,8 +325,8 @@ GITBRANCH["pbr"]=${PBR_BRANCH:-master}
##################
# glance store library
GLANCE_STORE_REPO=${GLANCE_STORE_REPO:-${GIT_BASE}/openstack/glance_store.git}
GLANCE_STORE_BRANCH=${GLANCE_STORE_BRANCH:-master}
GITREPO["glance_store"]=${GLANCE_STORE_REPO:-${GIT_BASE}/openstack/glance_store.git}
GITBRANCH["glance_store"]=${GLANCE_STORE_BRANCH:-master}
# heat-cfntools server agent
HEAT_CFNTOOLS_REPO=${HEAT_CFNTOOLS_REPO:-${GIT_BASE}/openstack/heat-cfntools.git}
@@ -331,12 +337,12 @@ HEAT_TEMPLATES_REPO=${HEAT_TEMPLATES_REPO:-${GIT_BASE}/openstack/heat-templates.
HEAT_TEMPLATES_BRANCH=${HEAT_TEMPLATES_BRANCH:-master}
# django openstack_auth library
HORIZONAUTH_REPO=${HORIZONAUTH_REPO:-${GIT_BASE}/openstack/django_openstack_auth.git}
HORIZONAUTH_BRANCH=${HORIZONAUTH_BRANCH:-master}
GITREPO["django_openstack_auth"]=${HORIZONAUTH_REPO:-${GIT_BASE}/openstack/django_openstack_auth.git}
GITBRANCH["django_openstack_auth"]=${HORIZONAUTH_BRANCH:-master}
# keystone middleware
KEYSTONEMIDDLEWARE_REPO=${KEYSTONEMIDDLEWARE_REPO:-${GIT_BASE}/openstack/keystonemiddleware.git}
KEYSTONEMIDDLEWARE_BRANCH=${KEYSTONEMIDDLEWARE_BRANCH:-master}
GITREPO["keystonemiddleware"]=${KEYSTONEMIDDLEWARE_REPO:-${GIT_BASE}/openstack/keystonemiddleware.git}
GITBRANCH["keystonemiddleware"]=${KEYSTONEMIDDLEWARE_BRANCH:-master}
# s3 support for swift
SWIFT3_REPO=${SWIFT3_REPO:-${GIT_BASE}/stackforge/swift3.git}
@@ -469,7 +475,7 @@ esac
#IMAGE_URLS="http://smoser.brickies.net/ubuntu/ttylinux-uec/ttylinux-uec-amd64-11.2_2.6.35-15_1.tar.gz" # old ttylinux-uec image
#IMAGE_URLS="http://download.cirros-cloud.net/${CIRROS_VERSION}/cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-disk.img" # cirros full disk image
CIRROS_VERSION=${CIRROS_VERSION:-"0.3.2"}
CIRROS_VERSION=${CIRROS_VERSION:-"0.3.4"}
CIRROS_ARCH=${CIRROS_ARCH:-"x86_64"}
# Set default image based on ``VIRT_DRIVER`` and ``LIBVIRT_TYPE``, either of
@@ -514,7 +520,7 @@ esac
if [[ "$ENABLED_SERVICES" =~ 'h-api' ]]; then
case "$VIRT_DRIVER" in
libvirt|baremetal|ironic)
HEAT_CFN_IMAGE_URL=${HEAT_CFN_IMAGE_URL:-"http://dl.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"}
HEAT_CFN_IMAGE_URL=${HEAT_CFN_IMAGE_URL:-"https://download.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"}
IMAGE_URLS+=",$HEAT_CFN_IMAGE_URL"
;;
*)
@@ -539,7 +545,7 @@ fi
PRECACHE_IMAGES=$(trueorfalse False $PRECACHE_IMAGES)
if [[ "$PRECACHE_IMAGES" == "True" ]]; then
# staging in update for nodepool
IMAGE_URL="http://dl.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"
IMAGE_URL="https://download.fedoraproject.org/pub/alt/openstack/20/x86_64/Fedora-x86_64-20-20140618-sda.qcow2"
if ! [[ "$IMAGE_URLS" =~ "$IMAGE_URL" ]]; then
IMAGE_URLS+=",$IMAGE_URL"
fi
+21 -12
View File
@@ -92,9 +92,9 @@ attribute=value
[fff]
type=new
[[test-quote|test-quote.conf]]
[[test-env|test-env.conf]]
[foo]
foo="foo bar" "baz"
foo=\${FOO_BAR_BAZ}
[[test5|test-equals.conf]]
[DEFAULT]
@@ -126,9 +126,11 @@ cfg_item5 = 5555another
[[test-multiline|test-multiline.conf]]
[multi]
cfg_item1 = "ab":"cd", "ef": "gh"
cfg_item1 = ab:cd:ef:gh
cfg_item1 = abcd
cfg_item2 = efgh
cfg_item2 = \${FOO_BAR_BAZ}
EOF
echo -n "get_meta_section_files: test0 doesn't exist: "
@@ -236,14 +238,17 @@ check_result "$VAL" "$EXPECT_VAL"
echo -n "merge_config_file test-multiline: "
rm -f test-multiline.conf
FOO_BAR_BAZ="foo bar baz"
merge_config_file test.conf test-multiline test-multiline.conf
VAL=$(cat test-multiline.conf)
EXPECT_VAL='
[multi]
cfg_item1 = "ab":"cd", "ef": "gh"
cfg_item1 = ab:cd:ef:gh
cfg_item1 = abcd
cfg_item2 = efgh'
cfg_item2 = efgh
cfg_item2 = foo bar baz'
check_result "$VAL" "$EXPECT_VAL"
unset FOO_BAR_BAZ
echo -n "merge_config_group test2: "
rm test2a.conf
@@ -275,14 +280,16 @@ EXPECT_VAL="
attribute = value"
check_result "$VAL" "$EXPECT_VAL"
echo -n "merge_config_file test-quote: "
rm -f test-quote.conf
merge_config_file test.conf test-quote test-quote.conf
VAL=$(cat test-quote.conf)
echo -n "merge_config_file test-env: "
rm -f test-env.conf
FOO_BAR_BAZ="foo bar baz"
merge_config_file test.conf test-env test-env.conf
VAL=$(cat test-env.conf)
EXPECT_VAL='
[foo]
foo = "foo bar" "baz"'
foo = foo bar baz'
check_result "$VAL" "$EXPECT_VAL"
unset FOO_BAR_BAZ
echo -n "merge_config_group test4 variable filename: "
setup_test4
@@ -332,6 +339,8 @@ EXPECT_VAL="
servers = 10.11.12.13:80"
check_result "$VAL" "$EXPECT_VAL"
rm -f test.conf test1c.conf test2a.conf test-quote.conf test-space.conf test-equals.conf test-strip.conf test-colon.conf
rm -f test-multiline.conf test-multi-sections.conf
rm -f test.conf test1c.conf test2a.conf \
test-space.conf test-equals.conf test-strip.conf \
test-colon.conf test-env.conf test-multiline.conf \
test-multi-sections.conf
rm -rf test-etc
+97
View File
@@ -0,0 +1,97 @@
#!/usr/bin/env 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.
TOP=$(cd $(dirname "$0")/.. && pwd)
export TOP_DIR=$TOP
# Import common functions
source $TOP/functions
source $TOP/stackrc
source $TOP/lib/tls
for i in $TOP/lib/*; do
if [[ -f $i ]]; then
source $i
fi
done
ALL_LIBS="python-novaclient oslo.config pbr python-troveclient python-keystoneclient taskflow oslo.middleware pycadf python-glanceclient python-ironicclient tempest-lib oslo.messaging cliff python-heatclient stevedore python-cinderclient glance_store oslo.concurrency oslo.db oslo.vmware keystonemiddleware oslo.serialization python-saharaclient django_openstack_auth python-openstackclient oslo.rootwrap oslo.i18n python-ceilometerclient oslo.utils python-swiftclient python-neutronclient"
# Generate the above list with
# echo ${!GITREPO[@]}
# exit 1
function check_exists {
local thing=$1
local hash=$2
local key=$3
if [[ ! -z "$VERBOSE" ]]; then
echo "Checking for $hash[$key]"
fi
if [[ -z $thing ]]; then
echo "$hash[$key] does not exit!"
exit 1
else
if [[ ! -z "$VERBOSE" ]]; then
echo "$hash[$key] => $thing"
fi
fi
}
function test_all_libs_upto_date {
# this is all the magics
local found_libs=${!GITREPO[@]}
declare -A all_libs
for lib in $ALL_LIBS; do
all_libs[$lib]=1
done
for lib in $found_libs; do
if [[ -z ${all_libs[$lib]} ]]; then
echo "Library '$lib' not listed in unit tests, please add to ALL_LIBS"
exit 1
fi
done
echo "test_all_libs_upto_date PASSED"
}
function test_libs_exist {
local lib=""
for lib in $ALL_LIBS; do
check_exists "${GITREPO[$lib]}" "GITREPO" "$lib"
check_exists "${GITBRANCH[$lib]}" "GITBRANCH" "$lib"
check_exists "${GITDIR[$lib]}" "GITDIR" "$lib"
done
echo "test_libs_exist PASSED"
}
function test_branch_master {
for lib in $ALL_LIBS; do
if [[ ${GITBRANCH[$lib]} != "master" ]]; then
echo "GITBRANCH for $lib not master (${GITBRANCH[$lib]})"
exit 1
fi
done
echo "test_branch_master PASSED"
}
set -o errexit
test_libs_exist
test_branch_master
test_all_libs_upto_date
+24
View File
@@ -0,0 +1,24 @@
#!/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.
echo "Ensuring we don't have crazy refs"
REFS=`grep BRANCH stackrc | grep -v -- '-master' | grep -v -- '-stable/'`
rc=$?
if [[ $rc -eq 0 ]]; then
echo "Branch defaults must be master. Found:"
echo $REFS
exit 1
fi
+1 -17
View File
@@ -18,7 +18,6 @@
# - (re)start messagebus daemon
# - remove distro packages python-crypto and python-lxml
# - pre-install hgtools to work around a bug in RHEL6 distribute
# - install nose 1.1 from EPEL
# If TOP_DIR is set we're being sourced rather than running stand-alone
# or in a sub-shell
@@ -79,7 +78,7 @@ function get_package_path {
# Fix prettytable 0.7.2 permissions
# Don't specify --upgrade so we use the existing package if present
pip_install 'prettytable>0.7'
pip_install 'prettytable>=0.7'
PACKAGE_DIR=$(get_package_path prettytable)
# Only fix version 0.7.2
dir=$(echo $PACKAGE_DIR/prettytable-0.7.2*)
@@ -172,19 +171,4 @@ if [[ $DISTRO =~ (rhel6) ]]; then
# Note we do this before the track-depends in ``stack.sh``.
pip_install hgtools
# RHEL6's version of ``python-nose`` is incompatible with Tempest.
# Install nose 1.1 (Tempest-compatible) from EPEL
install_package python-nose1.1
# Add a symlink for the new nosetests to allow tox for Tempest to
# work unmolested.
sudo ln -sf /usr/bin/nosetests1.1 /usr/local/bin/nosetests
# workaround for https://code.google.com/p/unittest-ext/issues/detail?id=79
install_package python-unittest2 patch
pip_install discover
(cd /usr/lib/python2.6/site-packages/; sudo patch <"$FILES/patches/unittest2-discover.patch" || echo 'Assume already applied')
# Make sure the discover.pyc is up to date
sudo rm /usr/lib/python2.6/site-packages/discover.pyc || true
sudo python -c 'import discover'
fi
+8 -1
View File
@@ -46,7 +46,7 @@ function install_get_pip {
curl -o $LOCAL_PIP $PIP_GET_PIP_URL || \
die $LINENO "Download of get-pip.py failed"
fi
sudo -E python $LOCAL_PIP
sudo -H -E python $LOCAL_PIP
}
@@ -68,6 +68,13 @@ function configure_pypi_alternative_url {
}
# Setuptools 8 implements PEP 440, and 8.0.4 adds a warning triggered any time
# pkg_resources inspects the list of installed Python packages if there are
# non-compliant version numbers in the egg-info (for example, from distro
# system packaged Python libraries). This is off by default after 8.2 but can
# be enabled by uncommenting the lines below.
#PYTHONWARNINGS=$PYTHONWARNINGS,always::RuntimeWarning:pkg_resources
#export PYTHONWARNINGS
# Show starting versions
get_versions
+2
View File
@@ -78,8 +78,10 @@ def main():
params['emulator'] = "/usr/bin/qemu-kvm"
if args.console_log:
params['bios_serial'] = "<bios useserial='yes'/>"
params['console_log'] = CONSOLE_LOG % {'console_log': args.console_log}
else:
params['bios_serial'] = ''
params['console_log'] = ''
libvirt_template = source_template % params
conn = libvirt.open("qemu:///system")
+1
View File
@@ -6,6 +6,7 @@
<type arch='%(arch)s' machine='pc-1.0'>hvm</type>
<boot dev='%(bootdev)s'/>
<bootmenu enable='no'/>
%(bios_serial)s
</os>
<features>
<acpi/>
+1 -1
View File
@@ -97,7 +97,7 @@ Of course, use real passwords if this machine is exposed.
# Download a vhd and a uec image
IMAGE_URLS="\
https://github.com/downloads/citrix-openstack/warehouse/cirros-0.3.0-x86_64-disk.vhd.tgz,\
http://download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-uec.tar.gz"
http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-uec.tar.gz"
# Explicitly set virt driver
VIRT_DRIVER=xenserver
+3 -1
View File
@@ -163,7 +163,9 @@ if is_service_enabled trove; then
cleanup_trove
fi
stop_dstat
if is_service_enabled dstat; then
stop_dstat
fi
# Clean up the remainder of the screen processes
SCREEN=$(which screen)