From Wikitech
Jump to navigation Jump to search

Puppet CI

  • Lints
    • [done] Puppet-typos
    • [done] Puppet-validate
    • [ongoing] Misc language-specific stuff, e.g. pep8
    • Puppet-lint, someday?
      • Easy to implement, but can probably never actually block.
  • Unit Tests
  • Compile Tests
    • [ON HOLD] --noop tests within modules
      • Mostly done
      • Insecure
    • Run compiles for expressly-written test manifests
      • Probably safe to run on gallium if we use a fake node with ready-made facts
    • Enumerate node definitions, run compile test on each (?)
      • Do this later or never
      • Need way to inject/mock up facts
  • Integration Tests
    • Build VMs from short list of test node definitions
    • Can test successfull puppet runs, but not really test that the servers work
      • This might be easy once we figure out vagrant/labs integration for Compile tests.
    • Build VMs from every existing test node definition (?)
      • This will be insanely expensive, probably can't happen per patch.

Isolation requirements: - VM must not have access network - VM must have a predefined time to live

Local testing

It is possible to run some Puppet tests locally. To do that, you will need an environment setup.

Getting the source

Source code: operations/puppet

$ git clone --recursive https://gerrit.wikimedia.org/r/operations/puppet


You need to make sure that you have a ruby version installed that matches the version in production (see the .ruby-version file in the puppet repo). If your system version of ruby differs from that, you may use rbenv to build the required version for you.

Via macports:
# port install rbenv ruby-build
# port search tox
# port install py<ver>-tox
Via Homebrew:
# brew install tox rbenv
If using the ruby system package:
$ sudo apt install ruby bundler tox
If not using the ruby system package:
$ sudo apt install rbenv ruby-build tox

Application environment

  1. Either run rbenv init to hook rbenv to your shell or follow instructions from here https://github.com/rbenv/rbenv#how-rbenv-hooks-into-your-shell.
  2. Go to your local puppet repo to have rbenv install the appropriate ruby version
    $ rbenv install
  3. List versions available (including your system version):
    $ rbenv versions
  4. Install bundler (skip this if using the bundler system package):
    $ rbenv exec gem install bundler
  5. Install dependencies:
    rbenv exec bundle install
  6. If using ruby/bundler system package:
    $ bundle install --path vendor/bundle

Test that it is ok, the following will show you a list of tasks:

 $ rbenv exec bundle exec rake --tasks

Done, your env is ready!