James,

As you have discovered, the setup you want is not quite documented the way
or in the locations you would expect, but it is documented in many places,
such as https://puppet.com/blog/unit-testing-rspec-puppet-for-beginners and
https://puppet.com/blog/use-onceover-start-testing-rspec-puppet.

IMO, what you really want to do is integrate tests with your
version-controlled code, in-place, rather than replicating it somewhere
else. You can do this by using ruby's bundler and a Gemfile to get started,
then add a spec/spec_helper.rb and spec/classes/*_spec.rb files for unit
tests and so on and so forth. But, you don't actually need puppet
installed, as that can come from a gem in the bundler setup. There's a lot
to do and many ways to do it, so there's no single solution to choose.

I've written a lot about my explorations with rspec on my blog (
https://rnelson0.com/?s=rspec) but here's how I would start. Use
puppet-module-skeleton (https://github.com/garethr/puppet-module-skeleton)
which creates a new module with rspec tests. It is designed for a module
rather than a controlrepo, so will take a little re-working to align it
properly for that (
https://rnelson0.com/2015/11/24/modern-rspec-puppet-practices/ and
optionally
https://rnelson0.com/2016/11/06/puppet-tech-debt-moving-rspec-tests/), but
is pretty good for both. Once you get it all working, you commit the
changes to your module/controlrepo and then it's bundled with your puppet
code, and thus always available for testing. It does mean the tests are
deployed on your master, but aside from a little extra disk space, it will
have no impact on agents connecting and should not be a concern. It's also
portable for when you get a vagrant or docker setup going.

With the bundler/rspec framework in place, your workflow becomes:
* Clone your controlrepo
* Checkout a feature branch for changes
* Run `bundle install` with appropriate args (I use `bundle install --path
vendor --without system_tests development` most of the time)
* Run `bundle exec rake test` to run all the tests (the target `spec`, or
the pair `spec_prep` and `spec_clean` will JUST run your unit tests),
everything should pass
* Make all the edits you need
* Run `bundle exec rake test` and ensure the tests continue to pass. If
not, repeat the previous step until tests do pass.
* Commit your code, push to upstream

There are plenty of examples of control repos out there but not all have a
working test setup included. Check out these two that show the example:
* https://github.com/example42/psick
* https://github.com/puppetinabox/controlrepo

I hope this helps!


Rob Nelson
rnels...@gmail.com

On Tue, Jul 18, 2017 at 7:51 PM, James Perry <jjperr...@gmail.com> wrote:

> Years ago there were a lot of docs about how to setup Puppet to allow
> someone to build modules outside having to have a master/client setup using
> puppet apply.
>
> I am trying to figure out the very cryptic world of spec/rspec, as it
> seems to not be documented very well anywhere for anyone other than someone
> that already knows it, In doing so I don't want to be able to develop in my
> home directory in a server versus having to develop modules and test with
> rspec against a full puppet server configuration.
>
> So far I have found little bits and pieces around, but nothing definitive
> or documented well for building something of this nature. The best I found
> so far were pre-built Ubuntu Docker containers or Vagrant builds. I don't
> have access to either presently or the time to build out a server to handle
> hosting either.
>
> Does anyone have a guide to setting up a stand-alone puppet client for
> development.  There used to be a rspec-puppet.com/setup page and that is
> what is linked from inside the documentation, but the page is gone.
>
> What I have so far is:
>
> 1. .Install puppet-agent to the host as root.
> 2. Setup paths to use the Ruby configuration from the puppet-agent so that
> the any gem add-ons are compatible with the version of the puppet-agent
> RPM.
> 3. Install puppetlabs-stdlib, rspec-puppet and any dependencies they
> require.
>
> When I have done a puppet module generate <name> and a rspec-puppet-init,
> I create a basic test to ensure the module compiles, as noted on the
> rspec-puppet Github page https://github.com/rodjek/rspec-puppet, That
> fails saying it can find compile.
>
> describe 'mymodule' do
>    it { is_expected.to compile }
> end
>
> Any other tests that "should" work don't. either.
>
> So in modules/test/manifests/init.pp I have:
> class test {
>    package { 'somepackage':
>         ensure => present,
>   }
> }
>
> And my modules/test/spec/class/init_spec.rb has
>
> require 'spec_helper'
>
> describe 'test' do
>     it { is_expected.to contain('somepackage').with_ensure('present')
> end
>
> So since this seems to be non-functional in my puppet development
> environment, which is a copy of my prod, I want to set it up fresh. When I
> tried in my home directory all i got were errors.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Developers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to puppet-dev+unsubscr...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/
> msgid/puppet-dev/23805142-d49e-4612-9590-472ab581dade%40googlegroups.com
> <https://groups.google.com/d/msgid/puppet-dev/23805142-d49e-4612-9590-472ab581dade%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-dev/CAC76iT_HvrpB_H%3DYB-4_nbzLQw4deZ3Sw%2BtS%3DSHjOx9t1jPBQw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to