<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hello Openstack Infra Team,<br>
    <br>
    <br>
    Background<br>
    =======<br>
    <br>
    It has been 3 years that we have been developing Puppet modules to
    install OpenStack, and we know these modules are largely adopted by
    many users.<br>
    All modules are located on StackForge (1) and some of them are
    distributed on Puppet Forge.<br>
    Some statistics (2) show us the important adoption, which represent
    ~ 42% of current deployments (Source: OpenStack Foundation).<br>
    We've reached a point where we can't continue without real
    integration testing if we want to stabilize & bring more
    dev/users to our modules.<br>
    <br>
    <br>
    Current situation<br>
    ==========<br>
    <br>
    OpenStack Puppet modules support rspec & unit tests which is not
    enough since there is no functional testing.<br>
    Currently, only puppet-ceph (3) is doing integration testing (4) by
    using Vagrant, puppet-rspec-system and gerritexec (5).<br>
    A discussion has been started on the Puppet OpenStack mailing list
    (6).<br>
    As you can see, there has already been some initial proof of concept
    work done by Spencer to make beaker-rspec work with the
    puppet-openstack modules:
    <div><a href="https://review.openstack.org/#/c/102020"
        target="_blank"
        onmousedown="this.href='https://www.google.com/url?q\75https%3A%2F%2Freview.openstack.org%2F%23%2Fc%2F102020\46sa\75D\46sntz\0751\46usg\75AFQjCNHRznILGZdMIF_Y36YKQGrDgnf7xA';return
        true;"
        onclick="this.href='https://www.google.com/url?q\75https%3A%2F%2Freview.openstack.org%2F%23%2Fc%2F102020\46sa\75D\46sntz\0751\46usg\75AFQjCNHRznILGZdMIF_Y36YKQGrDgnf7xA';return
        true;">https://review.openstack.org/#<wbr>/c/102020</a>  #
      puppet-nova<br>
    </div>
    <a href="https://review.openstack.org/#/c/102071" target="_blank"
      onmousedown="this.href='https://www.google.com/url?q\75https%3A%2F%2Freview.openstack.org%2F%23%2Fc%2F102071\46sa\75D\46sntz\0751\46usg\75AFQjCNFtgihslLBBfnYQ5JX7H-5bpCgF6g';return
      true;"
      onclick="this.href='https://www.google.com/url?q\75https%3A%2F%2Freview.openstack.org%2F%23%2Fc%2F102071\46sa\75D\46sntz\0751\46usg\75AFQjCNFtgihslLBBfnYQ5JX7H-5bpCgF6g';return
      true;">https://review.openstack.org/#<wbr>/c/102071</a>  #
    openstack-infra/config (patch already in discussion with -infra
    team)<br>
    <br>
    <br>
    Design proposal<br>
    ==========<br>
    <br>
    Since puppet-rspec-system is going to be retired (8), it's suggested
    to use beaker-rspec.<br>
    A new bot would be created "Puppet OpenStack CI" which would put +1
    or -1 depending if the integration pass or not. For starting, the
    bot won't be part of voting process.<br>
    The goal would be of course to bootstrap basic tests for all modules
    and then call to contributors wanting to support most of deployments
    use-cases by using puppet classes.<br>
    <br>
    <br>
    Blockers<br>
    =====<br>
    <br>
    We need resources to handle the CI bot system. puppet-ceph only uses
    a single server + vagrant, but in the case of OpenStack modules, I'm
    not sure that would be sufficient regarding to the number of patches
    per day.<br>
    I would like to ensure that OpenStack Infra could handle vagrant on
    CI nodes.<br>
    <br>
    <br>
    Steps & goals<br>
    =========<br>
    <br>
    * First, we need to agree with -infra team at how we handle CI
    resources (vagrant ?).<br>
    * Patch Jenkins jobs (already WIP) for non-voting jobs in some
    Puppet modules (core projects to start: nova, neutron, ...).<br>
    * Push some patches in puppet-* modules with basic tests. The goal
    here is to get feedback from this design.<br>
    * Continue with more modules (non-core) and more testing scenarios.<br>
    * After stabilization, make the CI bot voting.<br>
    <br>
    <br>
    We really need to make progress on this topic if we want more
    adoption of Puppet modules in OpenStack community. I'm thinking
    about Puppet elements in TripleO (some work has already been done,
    but not yet in TripleO though) (8).<br>
    Having this CI would help people to stop forking the modules and
    improve the trust at the work done.<br>
    By the way, this topic will be one of main topics at the next
    OpenStack summit (9).<br>
    <br>
    <br>
    On behalf of Puppet OpenStack team, we are waiting for your
    insights,<br>
    Thanks.<br>
    <br>
    (1) <a class="moz-txt-link-freetext" href="https://github.com/stackforge?page=1&query=puppet">https://github.com/stackforge?page=1&query=puppet</a><br>
    (2) <a class="moz-txt-link-freetext" href="http://getcloudify.org/2014/05/19/openstack-statistics.html">http://getcloudify.org/2014/05/19/openstack-statistics.html</a><br>
    (3) <a class="moz-txt-link-freetext" href="https://github.com/stackforge/puppet-ceph">https://github.com/stackforge/puppet-ceph</a><br>
    (4)
<a class="moz-txt-link-freetext" href="https://github.com/stackforge/puppet-ceph/blob/master/README.md#integration-tests">https://github.com/stackforge/puppet-ceph/blob/master/README.md#integration-tests</a><br>
    (5) <a class="moz-txt-link-freetext" href="https://pypi.python.org/pypi/gerritexec">https://pypi.python.org/pypi/gerritexec</a><br>
    (6)
htt6s://groups.google.com/a/puppetlabs.com/forum/#!topic/puppet-openstack/Mr2wNC4HuZU<br>
    (7) <a class="moz-txt-link-freetext" href="https://github.com/puppetlabs/rspec-system-puppet#retired">https://github.com/puppetlabs/rspec-system-puppet#retired</a><br>
    (8) <a class="moz-txt-link-freetext" href="https://github.com/agroup/tripleo-puppet-elements">https://github.com/agroup/tripleo-puppet-elements</a><br>
    (9) <a class="moz-txt-link-freetext" href="https://etherpad.openstack.org/p/puppet-paris-summit-proposal">https://etherpad.openstack.org/p/puppet-paris-summit-proposal</a><br>
    <br>
    <pre class="moz-signature" cols="72">-- 
Emilien Macchi</pre>
  </body>
</html>