Video recording and post production done by OpenStack Foundation.
In our role administering an OpenStack IaaS Cloud, we ve developed a release train allowing local development and testing of configuration management, testing in virtualised environments and automated deployment to staging and production, for the building and maintenance of an IaaS Cloud using upstream vendor OpenStack packages.
We will discuss the high-level concepts then review the details of our implementation and the tools we use, and created, to enable this pipeline.
We encourage software programming discipline to the administration of the Cloud infrastructure, with peer review, source code management and thorough testing before packaged releases.
Similarly, we encourage system administration discipline to configuration management code development, with deployments from scratch to volatile environments and upgrade deployments to stable environments.
Key elements of our approach are the use of upstream vendor packages for OpenStack (Ubuntu); configuration management (SaltStack); unit testing of configuration management (Test Kitchen with Kitchen-salt); Git, Gerrit and Gitshelf for source control management, peer review and packaging from git repos; volatile local development and remote test environments, using Vagrant and salt-cloud; and automated testing, packaging and deployment with the aid of Jenkins.
We will outline the CI/CD pipeline:
Provision a multi-node, multi-network OpenStack development environment using Vagrant with Virtualbox (nova-qemu) with virtualised nodes representing a minimal region, and a salt-master with a file_roots tree built as per production.
Develop salt configuration management code within this development environment. All installation and administration is managed with SaltStack, with both incremental upgrade and full bootstrap deployment testing.
Push changes to Gerrit for both peer review and testing in discrete development environment instances, and unit testing with Test Kitchen via Jenkins.
Automatically package a new release in a specific deploy-kit repo, using Gitshelf to build release tarball artifacts from a YAML file of code repo SHA1s.
Automatically deploy to test environments in Public Cloud.
Automatically deploy to real hardware in staging and production.