{"id":20111149,"url":"https://github.com/openstack/grenade","last_synced_at":"2025-12-18T05:59:16.166Z","repository":{"id":66174728,"uuid":"8785771","full_name":"openstack/grenade","owner":"openstack","description":"Upgrade testing of OpenStack projects built on top of DevStack. Mirror of code maintained at opendev.org.","archived":false,"fork":false,"pushed_at":"2025-12-11T15:05:12.000Z","size":1170,"stargazers_count":59,"open_issues_count":0,"forks_count":19,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-12-12T19:10:20.063Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://opendev.org/openstack/grenade","language":"Shell","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openstack.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":"CONTRIBUTING.rst","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2013-03-14T21:25:41.000Z","updated_at":"2025-11-26T19:18:08.000Z","dependencies_parsed_at":"2025-12-11T20:17:16.360Z","dependency_job_id":null,"html_url":"https://github.com/openstack/grenade","commit_stats":{"total_commits":634,"total_committers":113,"mean_commits":5.610619469026549,"dds":0.7397476340694007,"last_synced_commit":"e0caea10bc143f44e6f5e65a810569ec00afc206"},"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/openstack/grenade","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Fgrenade","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Fgrenade/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Fgrenade/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Fgrenade/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openstack","download_url":"https://codeload.github.com/openstack/grenade/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openstack%2Fgrenade/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27792202,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-18T02:00:09.725Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T18:14:38.237Z","updated_at":"2025-12-18T05:59:16.148Z","avatar_url":"https://github.com/openstack.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"=========\n Grenade\n=========\n\nGrenade is an OpenStack test harness to exercise the upgrade process\nbetween releases. It uses DevStack to perform an initial OpenStack\ninstall and as a reference for the final configuration. Currently\nGrenade can upgrade Keystone, Glance, Nova, Neutron, Cinder, Swift,\nand Ceilometer in their default DevStack configurations.\n\nGoals\n=====\n\nGrenade has the following goals:\n\n- Block unintentional project changes that would break the `Theory of\n  Upgrade`_. Most Grenade fails that people hit are of this nature.\n- Ensure that upgrading a cloud doesn't do something dumb like delete\n  and recreate all your servers/volumes/networks.\n- Be able to grow to support additional upgrade scenarios (like\n  sideways migrations from one configuration to another equivalent\n  configuration)\n\n.. _Theory of Upgrade:\n\nTheory of Upgrade\n=================\n\nGrenade works under the following theory of upgrade.\n\n- New code should work with old configs\n\n  The upgrade process should not require a config change to run a new\n  release. All config behavior is supposed to be deprecated over a\n  release cycle, so that upon release new code works with the last\n  releases configs. Those configs may create deprecation warnings which\n  need to be addressed before the next release, but they should still\n  work and largely have the same behavior.\n\n- New code should need nothing more than 'db migrations'\n\n  Clearly the release of new code may include new database\n  models. Standard upgrade procedure is to turn off all services that\n  touch the database, run the db migration script, and start with new\n  code.\n\n- Resources created by services before upgrade, should still be there\n  after the system is upgraded\n\n  When upgrading Nova you expect all your VMs to still function during\n  the entire upgrade (whether or not Nova services are up). Taking down\n  the control plane should not take down your VMs.\n\n.. _upgrade-exceptions:\n\n- Any other required changes on upgrade are an **exception** and must be\n  called out in the release notes.\n\n  Grenade supports per release specific upgrade scripts (from-juno,\n  from-kilo). These are designed to support upgrades where additional\n  manual steps are needed for a specific upgrade (i.e. from juno to\n  kilo). These should be used sparingly.\n\n  The Grenade core team requires the following before landing these\n  kinds of changes:\n\n  - The Release Notes for the release where this will be required\n    clearly specify these manual upgrade steps.\n  - The PTL for the project in question has signed off on this change.\n\n  .. note:: While we expect the various deployment projects within the\n            OpenStack ecosystem, for example TripleO, Kolla, etc, to read the\n            release notes of each project, it is good practice to communicate\n            any exceptional upgrade changes made to Grenade to those teams\n            directly or at least via the `openstack-discuss mailing list`_.\n\n.. _openstack-discuss mailing list: http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-discuss\n\nStatus\n======\n\nGrenade is now running on every patch for projects that support\nupgrade. Gating Grenade configurations exist for the following in\nOpenStack's CI system (this is not an exhaustive list):\n\n- A cloud with neutron upgraded between releases\n- A cloud with neutron that upgrades all services except\n  nova-compute, thus testing RPC backwards compatibility for rolling\n  upgrades.\n\nBasic Flow\n==========\n\nThe grenade.sh script attempts to be reasonably readable, so it's\nworth looking there to see what's really going on. This is the super\nhigh level version of what that does.\n\n- get 2 devstacks (base \u0026 target)\n- install base devstack\n- perform some sanity checking (currently tempest smoke) to ensure\n  this is right\n- allow projects to create resources that should survive upgrade\n  - see projects/\\*/resources.sh\n- shut down all services\n- verify resources are still working during shutdown\n- upgrade and restart all services\n- verify resources are still working after upgrade\n- perform some sanity checking (currently tempest smoke) to ensure\n  everything seems good.\n\nThe script skips the first two steps (which take care of setting up the 2\ndevstack environments and installing the base one) when the value\nof GRENADE_USE_EXTERNAL_DEVSTACK is set to True.\n\n\nTerminology\n-----------\n\nGrenade has two DevStack installs present and distinguished between then\nas 'base' and 'target'.\n\n* **Base**: The initial install that will be upgraded.\n* **Target**: The reference install of target OpenStack (maybe just DevStack)\n\n\nDirectory Structure\n===================\n\nGrenade creates a set of directories for both the base and target\nOpenStack installation sources and DevStack::\n\n    $STACK_ROOT\n     |- logs                # Grenade logs\n     |- save                # Grenade state logs\n     |- \u003cbase\u003e\n     |   |- data            # base data\n     |   |- logs            # base DevStack logs\n     |   |- devstack\n     |   |- images          # cache of downloaded images\n     |   |- cinder\n     |   |- ...\n     |   |- swift\n     |- \u003ctarget\u003e\n     |   |- data            # target data\n     |   |- logs            # target DevStack logs\n     |   |- devstack\n     |   |- cinder\n     |   |- ...\n     |   |- swift\n\nDependencies\n============\n\nThis is a non-exhaustive list of dependencies:\n\n* git\n* tox\n\nInstall Grenade\n===============\n\nGet Grenade from GitHub in the usual way::\n\n    git clone https://opendev.org/openstack/grenade\n\nOptional: running grenade against a remote target\n-------------------------------------------------\n\nThere is an *optional* setup-grenade script that is useful if you are\nrunning Grenade against a remote VM from a local laptop.\n\nGrenade knows how to install the current master branch using the included\n``setup-grenade`` script.  The arguments are the hostname of the target\nsystem that will run the upgrade testing and the user for the target\nsystem:\n\n::\n\n    ./setup-grenade [testbox [testuser]]\n\nIf you are running Grenade on the same machine you cloned to, you **do\nnot** need to do this.\n\nConfiguration\n-------------\n\nThe Grenade repo and branch used can be changed by adding something like\nthis to ``localrc``::\n\n  GRENADE_REPO=git@github.com:dtroyer/grenade.git\n  GRENADE_BRANCH=dt-test\n\nIf you need to configure your local devstacks for your specific\nenvironment you can do that by creating ``devstack.localrc``. This\nwill get appended to the stub devstack configs for BASE and TARGET.\n\nFor instance, specifying interfaces for Nova is a common use of\n``devstack.localrc``::\n\n  FLAT_INTERFACE=eth1\n  VLAN_INTERFACE=eth1\n\n\nRun the Upgrade Testing\n-----------------------\n\n::\n\n    ./grenade.sh\n\nRead ``grenade.sh`` for more details of the steps that happen from\nhere.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstack%2Fgrenade","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenstack%2Fgrenade","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenstack%2Fgrenade/lists"}