Install utility to deploy OpenStack on multiple hosts.
Clone or download
danalsan and javierpena Remove dhcp_agent_scheduler API extension for OVN in tempest conf
OVN setups don't deploy DHCP agent by default so this patch is removing
the scheduling API extension from tempest.conf.

Change-Id: I498c0ae6f1f956fdb3cf179bbfec7ad67280a574
Signed-off-by: Daniel Alvarez <>
Latest commit 5974a48 Aug 22, 2018
Failed to load latest commit information.
docs Initial Python 3 support Sep 27, 2018
packstack Remove dhcp_agent_scheduler API extension for OVN in tempest conf Nov 15, 2018
playbooks Fix virtualization detection for Fedora jobs Nov 14, 2018
releasenotes Replace keystone db flush cron job with a Fernet key rotation job Aug 21, 2018
roles/packstack-integration-tempest/tasks Add a new job on fedora-28 images to test python3 Oct 5, 2018
tests Merge "Revert "Temporary switch to ovs in scenario 001, fix gate"" Oct 10, 2018
tools Add a new job on fedora-28 images to test python3 Oct 5, 2018
.gitignore Switch to using stestr Jun 5, 2018
.gitreview Update .gitreview for new namespace Oct 17, 2015
.stestr.conf Switch to using stestr Jun 5, 2018
.testr.conf Use ostestr instead of nosetest Oct 30, 2016
.zuul.yaml [Fedora] Use tested repo for deployment Oct 17, 2018
Gemfile Making Packstack Compatible with Puppet 4.x Apr 1, 2015
LICENSE Initial Subset of oVirt setup script Sep 21, 2012 Switch README file to Markdown Nov 12, 2014
Puppetfile Add a new job on fedora-28 images to test python3 Oct 5, 2018 Revert "Temporary switch to ovs in scenario 001, fix gate" Aug 21, 2018
Rakefile Add workaround for PuppetLint.configuration.ignore_paths Nov 17, 2014
bindep.txt Move other-requirements.txt to bindep.txt Aug 12, 2016
requirements.txt Remove cryptography from requirements.txt Aug 29, 2017 Add a new job on fedora-28 images to test python3 Oct 5, 2018
setup.cfg Use PBR Sep 21, 2016 Use PBR Sep 21, 2016
test-requirements.txt Switch to using stestr Jun 5, 2018
tox.ini Update min tox version to 2.0 Nov 8, 2018


Utility to install OpenStack on Red Hat based operating system. See other branches for older OpenStack versions. Details on how to contribute to Packstack may be found in the Packstack wiki at Additional information about involvement in the community around Packstack can be found at

This utility can be used to install OpenStack on a single or group of hosts (over ssh).

This utility is still in the early stages, a lot of the configuration options have yet to be added.

Installation of packstack:

$ yum install -y git
$ git clone git://
$ cd packstack && sudo python install

Installation of Puppet modules (REQUIRED if running packstack from source):

$ export GEM_HOME=/tmp/somedir
$ gem install r10k
$ sudo -E /tmp/somedir/bin/r10k puppetfile install -v
$ sudo cp -r packstack/puppet/modules/packstack /usr/share/openstack-puppet/modules

Option 1 (all-in-one)

$ packstack --allinone

This will install all OpenStack services on a single host without prompting for any configuration information. This will generate an "answers" file (packstack-answers-<date>-<time>.txt) containing all the values used for the install.

If you need to re-run packstack, you must use the --answer-file option in order for packstack to use the correct values for passwords and other authentication credentials:

$ packstack --answer-file packstack-answers-<date>-<time>.txt

Option 2 (using answer file)

$ packstack --gen-answer-file=ans.txt

Then edit ans.txt as appropriate e.g.

  • set CONFIG_SSH_KEY to a public ssh key to be installed to remote machines

  • Edit the IP address to anywhere you want to install a piece of OpenStack on another server

  • Edit the 3 network interfaces to whatever makes sense in your setup

    $ packstack --answer-file=ans.txt

Option 3 (prompts for configuration options)

$ packstack

that's it, if everything went well you can now start using OpenStack

$ cd
$ . keystonerc_admin
$ nova list
$ swift list  # if you have installed swift

Config options

    • A comma separated list of ip addresses on which to install nova compute
    • A comma separated list of swift storage devices
      • create a testing loopback device and use this for storage
      • use /dev/sdb on as a storage device


The location of the log files and generated puppet manifests are in the /var/tmp/packstack directory under a directory named by the date in which Packstack was run and a random string (e.g. /var/tmp/packstack/20131022-204316-Bf3Ek2). Inside, we find a manifest directory and the openstack-setup.log file; puppet manifests and a log file for each one are found inside the manifest directory.


To make Packstack write more detailed information into the log file you can use the -d switch:

$ packstack -d --allinone

When upgrading to a new OpenStack release and reusing old answerfile it is useful to know if any Packstack option was removed. If answerfile is written by hand it is possible to make a mistake. The --validate-answer-file switch allows checking if any provided option is not recognized by Packstack.

$ packstack --validate-answer-file=ans.txt


To ease development of Packstack, it can be useful to install from git such that updates to the git repositories are immediately effective without reinstallation.

To do this, start with a minimal CentOS 7 installation. Then remove any relevant packages that might conflict:

$ yum -y erase openstack-packstack*,puppet-*

Disable SELinux by changing "enforcing" to "permissive" in /etc/sysconfig/selinux, then reboot to allow service changes to take effect and swap over networking. Then install packages:

$ yum -y install git python-setuptools

And install RDO:

$ yum -y install
$ yum -y update

Install Puppet modules as described above.

Then we get Packstack:

$ yum install -y python-crypto python-devel libffi-devel openssl-devel gcc-c++
$ git clone
$ cd packstack
$ python develop

And we're done. Changes to the contents of Packstack source repository are picked up by the Packstack executable without further intervention, and Packstack is ready to install.

Puppet Style Guide


Please, respect the Puppet Style Guide as much as possible !

Running local Puppet-lint tests

It assumes that both bundler as well as rubygems (and ruby) are already installed on the system. If not, run this command:

$ sudo yum install rubygems rubygem-bundler ruby ruby-devel -y

Go into the Packstack root directory.

$ cd packstack/

A Rakefile contains all you need to run puppet-lint task automatically over all the puppet manifests included in the Packstack project.

$ ls -l packstack/puppet/templates/


$ ls -l packstack/puppet/modules/

The default puppet-lint pattern for .pp files is **/*.pp. So there is no need to go inside those directories to run puppet-lint !

$ mkdir vendor
$ export GEM_HOME=vendor
$ bundle install
$ bundle exec rake lint

Packstack integration tests

Packstack is integration tested in the OpenStack gate and provides the means to reproduce these tests on your environment if you wish.

Scenario000 installs packstack allinone only and doesn't run any tests. This is the current matrix of available tests:

- scenario000 scenario001 scenario002 scenario003
glance file swift file
nova X X X X
neutron X X X X
neutron plugin ovs ovn ovs ovs
lbaasv2 X
cinder X X
ceilometer X X
aodh X X
gnocchi X X
panko X
heat X
swift X X
sahara X
trove X
horizon X
manila X

To run these tests:

export SCENARIO="scenario001"
./ will take care of installing the required dependencies, configure packstack to run according to the above matrix and run the complete installation process. If the installation is successful, tempest will also run smoke tests.

By default, will set up delorean (RDO Trunk) repositories. There are two ways of overriding default repositories:

export DELOREAN="http://someotherdomain.tld/delorean.repo"
export DELOREAN_DEPS="http://someotherdomain.tld/delorean-deps.repo"

You can also choose to disable repository management entirely:

<setup your own custom repositories here>
export MANAGE_REPOS="false"