Who am I?

Office of Technology

Zuul

Ansible

Who am I?

Technical Committee

Developer Infrastructure Core Team

OpenStack

The Four Opens

OpenStack Infra

Tooling, Automation and CI for OpenStack Project

Why?

The original OpenStack use case

OpenStack Scale by the numbers

ansible has received 13171 PRs (changes), has merged 8190 of them and has 37788 commits in its entire lifetime

Infra operates the same way as OpenStack

How do we do this?

Control plane

http://git.openstack.org/cgit/openstack-infra/system-config

It wasn't always this way!

Let me take you on a walk down memory lane ...

We started with 4 cloud servers in Rackspace

old-wiki is still running! (On Ubuntu 10.04)

I didn't even have access to the cloud account!

The Setup

This state persisted for the first year and first three OpenStack releases

Project Proliferation

Each project got a node and a job. Configured by hand. By me.

It got annoying

Config Management!

Please remember we're talking 2011 here

Puppet vs. Chef and git vs. bzr and humans pushing things

We were so excited about sharing Ops best practices!

We were so sad

Brief Rant - I do not want to write Apache configs in Puppet DSL

So we introduced Puppet

http://git.openstack.org/cgit/openstack-infra/system-config/tree/?id=99540d91a75d2b021db01d815e46bd585f9235cd

Open Development

Our developers wanted to collaborate on test jobs.

Giving hundreds of people access to directly edit test jobs == sadness

Did I mention our test jobs implement captive gating?

Jenkins Job Builder

YAML encoding of Jenkins Job definitions with templating

Allowed jobs to go through code review before being applied!

Andreas Jaegar is OpenStack's all-time contributions leader. He works on docs and test jobs

Introduction of Puppetmaster

Introduction of Hiera for Secrets

Hiera let us store YAML files with only secrets. Reference secrets by name in puppet manifests

http://git.openstack.org/cgit/openstack-infra/system-config/tree/manifests/site.pp

Project Creation

Too much clicking!

jeepyb - Gerrit Project Builder

Lesson: Don't let Monty name things

Ansible to run Puppet

Back up: Salt to run Puppet

Ansible to run Puppet

Remaining manual human tasks

Ansible Role Cloud Launcher

http://git.openstack.org/cgit/openstack/ansible-role-cloud-launcher

profiles:
  - name: admin-clouds
    flavors:
      - name: aoclcompany.xlarge
        ram: 128
        vcpus: 1
  - name: ops
    images:
      - name: ubuntu-trusty
        filename: /home/ubuntu/trusty-server-cloudimg-amd64-disk1.img
  - name: bootstrap-keypair
    keypairs:
      - name: bootstrap-key
        public_key_file: /home/ubuntu/.ssh/id_rsa.pub
clouds:
  - name: awesomecloud
    profiles:
      - admin-clouds
      - bootstrap-keypair
  - name: yaycloud-ops
    oscc_cloud: yaycloud-opsuser
    profiles:
      - bootstrap-keypair
      - ops
      

Problems depending on services

Even when the service is Open Source, it can stop being

Transifex

WAS an Open Source translations system.

Zanata!

We run Zanata ourselves now. (Thanks Lyz!)

Remaining external service dependencies

Launchpad OpenID -> openstackid

Launchpad Bugs -> storyboard

The Multi-cloud OpenStack Story