puppet-retrospec 0.7.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +17 -0
  3. data/Gemfile +4 -4
  4. data/README.md +63 -81
  5. data/VERSION +1 -1
  6. data/bin/retrospec +8 -4
  7. data/lib/retrospec.rb +40 -9
  8. data/lib/retrospec/helpers.rb +36 -2
  9. data/lib/retrospec/puppet_module.rb +3 -1
  10. data/lib/retrospec/templates/clone-hook +39 -0
  11. data/lib/retrospec/version.rb +1 -1
  12. data/puppet-retrospec.gemspec +3 -44
  13. data/spec/unit/puppet-retrospec_spec.rb +4 -65
  14. metadata +3 -100
  15. data/lib/retrospec/templates/acceptance_spec_test.erb +0 -24
  16. data/lib/retrospec/templates/module_files/.fixtures.yml +0 -8
  17. data/lib/retrospec/templates/module_files/.gitignore.erb +0 -8
  18. data/lib/retrospec/templates/module_files/.travis.yml +0 -14
  19. data/lib/retrospec/templates/module_files/Gemfile +0 -27
  20. data/lib/retrospec/templates/module_files/README.markdown +0 -75
  21. data/lib/retrospec/templates/module_files/Rakefile +0 -72
  22. data/lib/retrospec/templates/module_files/Vagrantfile +0 -95
  23. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/centos-59-x64.yml +0 -10
  24. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/centos-64-x64-pe.yml +0 -12
  25. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/centos-64-x64.yml +0 -11
  26. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/centos-66-x64.yml +0 -11
  27. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/debian-607-x64.yml +0 -11
  28. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/debian-70rc1-x64.yml +0 -11
  29. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/debian-73-i386.yml +0 -11
  30. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/debian-73-x64.yml +0 -11
  31. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/default.yml +0 -11
  32. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/fedora-18-x64.yml +0 -11
  33. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/sles-11sp1-x64.yml +0 -11
  34. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/ubuntu-server-10044-x64.yml +0 -10
  35. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/ubuntu-server-12042-x64.yml +0 -10
  36. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/ubuntu-server-1310-x64.yml +0 -11
  37. data/lib/retrospec/templates/module_files/spec/acceptance/nodesets/ubuntu-server-1404-x64.yml +0 -11
  38. data/lib/retrospec/templates/module_files/spec/shared_contexts.rb +0 -45
  39. data/lib/retrospec/templates/module_files/spec/spec_helper.rb +0 -11
  40. data/lib/retrospec/templates/module_files/spec/spec_helper_acceptance.rb +0 -33
  41. data/lib/retrospec/templates/resource_spec_file.erb +0 -45
  42. data/vendor/gems/puppet-3.7.3/COMMITTERS.md +0 -244
  43. data/vendor/gems/puppet-3.7.3/CONTRIBUTING.md +0 -91
  44. data/vendor/gems/puppet-3.7.3/README.md +0 -76
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eaace655a4e5f360e93ef3ee07ed003dfeecdf61
4
- data.tar.gz: 20f0b75846a20d22b35db36bfee6b8768503ca30
3
+ metadata.gz: 07921b5d09c92738440e643b20afbfee2aeaabbc
4
+ data.tar.gz: 9ff24e7a36e206e02cc7408cd5a21ce3e3838af3
5
5
  SHA512:
6
- metadata.gz: 46c667b57c0d670e2ccde78f388b4d3a881b423679a6e438905e2f7bbf1667b760a8a973652a73ed6803068e6a5ba7e73a73c6f7892077b9da0bfc7a7a65685f
7
- data.tar.gz: 667274f680050e06ef26e63d6804a46cc09a2ce9c5bf4831337070f8a16c2250978fa8e9573c6da634e4b28310e4036a68824561289327ac642f5fb96417468b
6
+ metadata.gz: ad162892e3d4cf46c505bcd99878ece7e9a49dd3933fc4ea5fc75dddc1d21797e69d1b36f34ca292cac92c442c8dec198ca67835c7d644da58920e91d999f961
7
+ data.tar.gz: e405d614efa59d18dc2b90408c9ade1ad30861b35e48c0754765a196fcd85742aa42ec16078cf1cfb0e65531626dbf06ba89704c879c5172be6b15a2416dbcc4
@@ -1,3 +1,20 @@
1
+ ## 0.8.0
2
+ * enable broader support for future parser
3
+ * remove hiera and facter dependencies
4
+ * added support for running pre and post hooks gh-27
5
+ * added support for running a hook to clone external templates
6
+ * externalized the templates into their own repo gh-26
7
+ * handle symlinks in the templates directory correctly gh-28
8
+
9
+ ## 0.7.3
10
+ * added hiera data helper to fill in all the auto bindable class params in shared_contexts
11
+ * updated hiera data gem to newer fork that works with puppet 3.5+
12
+ * minor fixes in templates
13
+ * added vagrantfile for easier manual integration testing
14
+
15
+ ## 0.7.2
16
+ * vendor the puppet gem
17
+
1
18
  ## 0.7.0
2
19
  * gh-18 puppet 4 code syntax does not work
3
20
  * gh-10 safe file creation should use colors
data/Gemfile CHANGED
@@ -2,16 +2,16 @@ source "http://rubygems.org"
2
2
 
3
3
  # while retrospec does not use facter or hiera,
4
4
  # we vendor the puppet gem 3.7.3 which also requires facter and hiera
5
- gem 'facter', '< 3', '> 1.6'
6
- gem 'hiera', '~> 1.0'
5
+ #gem 'facter', '< 3', '> 1.6'
6
+ #gem 'hiera', '~> 1.0'
7
7
 
8
8
  gem 'trollop'
9
9
  # Include everything needed to run rake, tests, features, etc.
10
10
  group :development do
11
11
  gem "rspec", "~> 2.14"
12
12
  gem 'puppet', '3.7.3', :path => 'vendor/gems/puppet-3.7.3'
13
- gem 'facter', '< 3', '> 1.6'
14
- gem 'hiera', '~> 1.0'
13
+ #gem 'facter', '< 3', '> 1.6'
14
+ #gem 'hiera', '~> 1.0'
15
15
  gem "yard", "~> 0.7"
16
16
  gem "rdoc", "~> 3.12"
17
17
  gem "bundler", "~> 1.0"
data/README.md CHANGED
@@ -1,11 +1,13 @@
1
1
  Puppet-Retrospec
2
2
  ================
3
3
 
4
- Generates puppet rspec test code based on the classes and defines inside the manifests directory. Aims to reduce some of the boilerplate coding with default test patterns.
4
+ Generates puppet rspec test code based on the classes and defines inside the manifests directory.
5
+ Aims to reduce most of the boilerplate coding with default test patterns and module setup.
5
6
 
6
- Retrospec makes it dead simple to get started with puppet unit testing. When you run retrospec, retrospec will scan you puppet manifests
7
- and actually write some very basic rspec-puppet test code. Thus this gem will retrofit your existing puppet module
8
- with everything needed to get going with puppet unit testing.
7
+ Retrospec makes it dead simple to get started with puppet module development and puppet unit testing.
8
+ When you run retrospec, retrospec will scan you puppet manifests and actually write some very basic rspec-puppet test code.
9
+ Thus this gem will retrofit your existing puppet module with everything needed to get going with puppet unit testing.
10
+ Additionally, retrospec will outfit your module with any file you can think of. Say goodbye to repetitive module setup.
9
11
 
10
12
  The project was named retrospec because there are many times when you need to retrofit your module with spec tests.
11
13
 
@@ -29,7 +31,7 @@ Table of Contents
29
31
  * [Future Parser Support](#future-parser-support)
30
32
  * [Support](#support)
31
33
 
32
- Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)
34
+ TOC Created by [gh-md-toc](https://github.com/ekalinin/github-markdown-toc)
33
35
 
34
36
  Build Status
35
37
  ============
@@ -38,9 +40,8 @@ Build Status
38
40
 
39
41
  Dependency
40
42
  ============
41
- Retrospec relies heavily on the puppet 3.7.x codebase. Because of this hard dependency the puppet gem is vendored into the library so there should
42
- not be conflicts with your existing puppet gem. We also require facter and hiera as a result of some indirect puppet dependencies. If there are issues around
43
- loading facter or hiera then we may need to also vendor the facter and hiera gems as well.
43
+ Retrospec relies heavily on the puppet 3.7.x codebase. Because of this hard dependency the puppet gem is vendored into
44
+ the library so there should not be conflicts with your existing puppet gem.
44
45
 
45
46
  Install
46
47
  =============
@@ -52,12 +53,16 @@ How to use
52
53
  Run from the command line
53
54
  ```
54
55
  $ retrospec -h
55
- Options:
56
- --module-path, -m <s>: The path (relative or absolute) to the module directory
57
- --template-dir, -t <s>: Path to templates directory (only for overriding Retrospec templates)
58
- --enable-user-templates, -e: Use Retrospec templates from ~/.puppet_retrospec_templates
59
- --enable-beaker-tests, -n: Enable the creation of beaker tests
60
- --help, -h: Show this message
56
+ Generates puppet rspec test code based on the classes and defines inside the manifests directory.
57
+ -m, --module-path=<s> The path (relative or absolute) to the module directory (Defaults to current directory)
58
+ -t, --template-dir=<s> Path to templates directory (only for overriding Retrospec templates) (default: /Users/user1/.retrospec_templates)
59
+ -s, --scm-url=<s> SCM url for retrospec templates
60
+ -b, --branch=<s> Branch you want to use for the retrospec template repo
61
+ -e, --enable-beaker-tests Enable the creation of beaker tests
62
+ -n, --enable-future-parser Enables the future parser only during validation
63
+ -v, --version Print version and exit
64
+ -h, --help Show this message
65
+
61
66
 
62
67
  retrospec -m ~/projects/puppet_modules/apache
63
68
  ```
@@ -68,7 +73,8 @@ Example
68
73
  Below you can see that it creates files for every resource in the tomcat module in addition to other files
69
74
  that you need for unit testing puppet code. Rspec-puppet best practices says to put definitions in a defines folder
70
75
  and classes in a classes folder since it infers what kind of resource it is based on this convention. Retrospec sets up
71
- this scaffolding for you.
76
+ this scaffolding for you. Don't like the files that came with your module? Simply delete the files and re-generate them
77
+ with retrospec.
72
78
 
73
79
  ```shell
74
80
  $ pwd
@@ -85,21 +91,6 @@ $ retrospec
85
91
  + /Users/cosman/github/puppetlabs-apache/spec/classes/
86
92
  + /Users/cosman/github/puppetlabs-apache/spec/classes/default_mods_spec.rb
87
93
  + /Users/cosman/github/puppetlabs-apache/spec/classes/dev_spec.rb
88
- + /Users/cosman/github/puppetlabs-apache/spec/classes/apache_spec.rb
89
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/
90
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/alias_spec.rb
91
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/auth_basic_spec.rb
92
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/auth_kerb_spec.rb
93
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/autoindex_spec.rb
94
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/cache_spec.rb
95
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/cgi_spec.rb
96
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/cgid_spec.rb
97
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/dav_spec.rb
98
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/dav_fs_spec.rb
99
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/dav_svn_spec.rb
100
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/deflate_spec.rb
101
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/dev_spec.rb
102
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/dir_spec.rb
103
94
  + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/disk_cache_spec.rb
104
95
  + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/fcgid_spec.rb
105
96
  + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/headers_spec.rb
@@ -107,30 +98,6 @@ $ retrospec
107
98
  + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/itk_spec.rb
108
99
  + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/ldap_spec.rb
109
100
  + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/mime_spec.rb
110
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/mime_magic_spec.rb
111
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/mpm_event_spec.rb
112
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/negotiation_spec.rb
113
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/passenger_spec.rb
114
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/perl_spec.rb
115
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/php_spec.rb
116
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/prefork_spec.rb
117
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/proxy_spec.rb
118
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/proxy_balancer_spec.rb
119
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/proxy_html_spec.rb
120
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/proxy_http_spec.rb
121
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/python_spec.rb
122
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/reqtimeout_spec.rb
123
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/rewrite_spec.rb
124
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/setenvif_spec.rb
125
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/ssl_spec.rb
126
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/status_spec.rb
127
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/suphp_spec.rb
128
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/userdir_spec.rb
129
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/vhost_alias_spec.rb
130
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/worker_spec.rb
131
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/wsgi_spec.rb
132
- + /Users/cosman/github/puppetlabs-apache/spec/classes/mod/xsendfile_spec.rb
133
- + /Users/cosman/github/puppetlabs-apache/spec/classes/params_spec.rb
134
101
  + /Users/cosman/github/puppetlabs-apache/spec/classes/php_spec.rb
135
102
  + /Users/cosman/github/puppetlabs-apache/spec/classes/proxy_spec.rb
136
103
  + /Users/cosman/github/puppetlabs-apache/spec/classes/python_spec.rb
@@ -148,11 +115,12 @@ $ retrospec
148
115
 
149
116
  ```
150
117
 
151
- Looking at the file we can see that it did a lot of work for us. Retrospec generate many tests automatically.
118
+ Looking at the file we can see that it did a lot of work for us. Retrospec generated many tests automatically.
152
119
  However the variable resolution isn't perfect so you will need to manually resolve some variables. This doesn't produce
153
120
  100% coverage but all you did was pressed enter to produce all this anyways.
154
121
  Below is the classes/apache_spec.rb file. Notice that while Retrospec created all these files, you still need to do more work.
155
122
  Retrospec is only here to setup your module for testing, which might save you several hours each time you create a module.
123
+ Below I'll go through the different parts of automation that you can use in your testing.
156
124
 
157
125
 
158
126
  ```ruby
@@ -356,34 +324,37 @@ For now you will probably want to read up on the following documentation:
356
324
  How Does it do this
357
325
  =======================
358
326
  Basically Retrospec uses the puppet lexer and parser to scan your code in order to fill out some basic templates that will retrofit
359
- your puppet module with unit tests. Currently I rely on the old AST parser to generate all this. This is why
327
+ your puppet module with unit tests. Currently I rely on the old AST parser to generate all this. This is why puppet 3.7
328
+ is vendored into the gem.
360
329
 
361
- Overriding the templates
330
+ Overriding the Templates
362
331
  =======================
363
332
  There may be a time when you want to override the default templates used to generate the rspec related files.
364
- To override these templates just set **one** of the following cli options.
333
+ By default retrospec will clone these [templates](https://github.com/nwops/retrospec-templates)
334
+ and place inside the default or specified template directory. Previously the templates were kept inside the gem
335
+ and cloning was not required. However, after using retrospec for a few months it makes more sense to keep these templates
336
+ versioned controlled in their own repo and update them before each retrospec use. This also makes it easy for team
337
+ contributions to be spread to other team members quickly.
365
338
 
366
339
  ```shell
367
- --template-dir, -t <s>: Path to templates directory (only for overriding Retrospec templates)
368
- --enable-user-templates, -e: Use Retrospec templates from ~/.puppet_retrospec_templates
340
+ -t, --template-dir=<s> Path to templates directory (only for overriding Retrospec templates) (default: /Users/user1/.retrospec_templates)
341
+ -s, --scm-url=<s> SCM url for retrospec templates
342
+ -b, --branch=<s> Branch you want to use for the retrospec template repo
369
343
 
370
344
  ```
371
345
 
372
- Once one of the options is set, retrospec will copy over all the templates from the default gem location to the default
373
- or specified templates path.
374
- If you have already created the erb file in the templates location, then puppet-retrospec will not overwrite the file.
375
- You can set multiple template paths if you use them for different projects so just be sure the set the correct
376
- template option when running retrospec.
377
-
378
- Setting the `--enable-user-templates` option will tell retrospec to use the default user template location and will
379
- copy over all the default templates that came with the gem.
346
+ ### Environment variables to set template defaults
380
347
 
381
- The default user location for the templates when using this variable is ~/.puppet_retrospec_templates
348
+ RETROSPEC_SCM_URL # set this to auto set your scm url to the templates
349
+ RETROSPEC_SCM_BRANCH # set this to auto checkout a particular branch (only works upon initial checkout)
382
350
 
383
- If you wish to override ~/.puppet_retrospec_templates location you can use the following option
384
- `--template-dir`
351
+ After running retrospec, retrospec will clone the templates from the default template url or from whatever you set to the templates path.
352
+ If you have already created the erb file in the templates location, then retrospec will not overwrite the file as there will
353
+ be a SCM conflict.
354
+ You can use multiple template paths if you use them for different projects so just be sure the set the correct
355
+ template option when running retrospec. `retrospec -t`
385
356
 
386
- If you set the `--template-dir` option you are not required to set the set `--enable-user-templates` option
357
+ The default user location for the templates when not using `retrospec -t` variable is ~/.retrospec_templates
387
358
 
388
359
  Example:
389
360
  `--template-dir=~/my_templates`
@@ -417,9 +388,10 @@ Adding New Templates
417
388
  Should you ever need to add new templates or normal files of any kind retrospec will automatically render and copy the template file
418
389
  to the module path if you place a file inside the `template_path/module_files` directory. The cool thing about this feature
419
390
  is that retrospec will recursively create the same directory structure you make inside the `module_files` directory inside your
420
- module. Files do not need to end in .erb will still be rendered as a erb template.
391
+ module. Files do not need to end in .erb will still be rendered as a erb template. Symlinks will be preserved and not
392
+ dereferenced.
421
393
 
422
- This follow the convention over configuration pattern so no directory name or filename is required when running retrospec.
394
+ This follows the convention over configuration pattern so no directory name or filename is required when running retrospec.
423
395
  Just put the template file in the directory where you want it (under module_files) and name it exactly how you want it to appear in the module and retrospec
424
396
  will take care of the rest. Please note that any file ending in .erb will have this extension automatically removed.
425
397
 
@@ -427,10 +399,10 @@ Example:
427
399
  So lets say you want to add a .gitlab-ci.yaml file to all of your modules in your modules directory.
428
400
 
429
401
  ```shell
430
- touch ~/.puppet_retrospec_templates/module_files/.gitlab-ci.yaml
402
+ touch ~/.retrospec_templates/module_files/.gitlab-ci.yaml
431
403
 
432
- tree ~/.puppet_retrospec_templates -a
433
- ./.puppet_retrospec_templates
404
+ tree ~/.retrospec_templates -a
405
+ ./.retrospec_templates
434
406
  ├── acceptance_spec_test.erb
435
407
  ├── module_files
436
408
  │   ├── .fixtures.yml
@@ -489,7 +461,7 @@ See [fixtures doc](https://github.com/puppetlabs/puppetlabs_spec_helper#using-fi
489
461
  ```
490
462
 
491
463
  If you see something like the following, this means your current module is using a much older version of Rspec. Retrospec
492
- using Rspec 3 syntax so you need to update your rspec version. If you have tests that using older rspec syntax, take a look
464
+ uses Rspec 3 syntax so you need to update your rspec version. If you have tests that using older rspec syntax, take a look
493
465
  at [transpec](https://github.com/yujinakayama/transpec)
494
466
 
495
467
  ```shell
@@ -500,7 +472,12 @@ at [transpec](https://github.com/yujinakayama/transpec)
500
472
  # ./spec/defines/vhost_spec.rb:103:in `block (2 levels) in <top (required)>'
501
473
 
502
474
  ```
503
- Running Tests
475
+
476
+ If your tests will not run after running retrospec. Your spec_helper, Rakefile and Gemfile may not be compatible
477
+ with the pre-defined templates. Just delete these files and re-run retrospec to recreate them. Add back any modifications
478
+ you might have had.
479
+
480
+ Running Retrospec Tests
504
481
  =============
505
482
  Puppet-retrospec tests its code against real modules downloaded directly from puppet forge.
506
483
  We also do a little mocking as well but for the majority of the tests we download are 'fixtures'.
@@ -531,7 +508,7 @@ Future Parser Support
531
508
  ==============
532
509
  Currently Retrospec uses the old/current AST parser for code parsing. If your code contains future parser syntax
533
510
  the current parser will fail to render some resource definitions but will still render the spec file template without parameters
534
- and resource tests that are contained in your manifest.
511
+ and resource tests that are contained in your manifest. Retrospec is still extremely useful with Puppet 4.
535
512
  Since Puppet 4 introduces many new things and breaks many other things I am not sure
536
513
  which side of the grass is greener at this time. What I do know is that most people are using Puppet 3 and it may take
537
514
  time to move to Puppet 4. I would suspect Retrospec would be more valuable for those moving to Puppet 4
@@ -553,6 +530,11 @@ Todo
553
530
  - Auto add dependencies to fixtures file
554
531
  - Show a diff of the test file when retrospec is run multiple times and the test file is already created.
555
532
 
556
- Support
533
+ Ruby Support
557
534
  ============
558
535
  Currently this library only supports ruby >= 1.9.3. It might work on 1.8.7 but I won't support if it fails.
536
+
537
+ Paid Support
538
+ ============
539
+ Want to see new features developed much faster? Contact me about a support contract so I can develop this tool during
540
+ the day instead of after work. contact: sales@logicminds.biz
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.3
1
+ 0.8.0
@@ -4,7 +4,7 @@ require 'trollop'
4
4
  require 'retrospec'
5
5
 
6
6
  opts = Trollop::options do
7
- version "0.7.3 (c) Corey Osman"
7
+ version "0.8.0 (c) Corey Osman"
8
8
  banner <<-EOS
9
9
  Generates puppet rspec test code based on the classes and defines inside the manifests directory.
10
10
 
@@ -13,13 +13,17 @@ Generates puppet rspec test code based on the classes and defines inside the man
13
13
  opt :module_path, "The path (relative or absolute) to the module directory (Defaults to current directory) " ,
14
14
  :type => :string, :required => false, :default => nil
15
15
  opt :template_dir, "Path to templates directory (only for overriding Retrospec templates)", :type => :string,
16
- :required => false, :default => nil
17
- opt :enable_user_templates, "Use Retrospec templates from #{File.expand_path('~/.puppet_retrospec_templates')}",
18
- :require => false, :type => :boolean
16
+ :required => false, :default => File.expand_path('~/.retrospec_templates')
17
+ opt :scm_url, "SCM url for retrospec templates", :type => :string, :required => false,
18
+ :default => ENV['RETROSPEC_SCM_URL']
19
+ opt :branch, "Branch you want to use for the retrospec template repo", :type => :string, :required => false,
20
+ :default => ENV['RETROSPEC_SCM_BRANCH']
19
21
  opt :enable_beaker_tests, "Enable the creation of beaker tests", :require => false, :type => :boolean
20
22
  opt :enable_future_parser, "Enables the future parser only during validation", :require => false, :type => :boolean
21
23
  end
22
24
  include Puppet_Retrospec
23
25
 
24
26
  retro = Retrospec.new(opts[:module_path], opts)
27
+ retro.run_pre_hook
25
28
  retro.create_files
29
+ retro.run_post_hook
@@ -10,6 +10,7 @@ require 'retrospec/puppet_module'
10
10
  require 'retrospec/spec_object'
11
11
  require 'retrospec/exceptions'
12
12
  require 'retrospec/version'
13
+ require 'find'
13
14
 
14
15
  class Retrospec
15
16
 
@@ -25,12 +26,7 @@ class Retrospec
25
26
  def initialize(supplied_module_path=nil,opts={})
26
27
  Utilities::PuppetModule.instance.future_parser = opts[:enable_future_parser]
27
28
  # user supplied a template path or user wants to use local templates
28
- if opts[:template_dir] or opts[:enable_user_templates]
29
- @template_dir = Helpers.setup_user_template_dir(opts[:template_dir])
30
- else
31
- # if user doesn't supply template directory we assume we should use the templates in this gem
32
- @template_dir = Helpers.gem_template_dir
33
- end
29
+ @template_dir = Helpers.setup_user_template_dir(opts[:template_dir], opts[:scm_url], opts[:branch])
34
30
  begin
35
31
  Utilities::PuppetModule.instance.module_path = supplied_module_path
36
32
  Utilities::PuppetModule.create_tmp_module_path # this is required to finish initialization
@@ -40,6 +36,37 @@ class Retrospec
40
36
  end
41
37
  end
42
38
 
39
+ # runs a user defined hook called pre-hook
40
+ def run_pre_hook
41
+ hook_file = File.join(template_dir,'pre-hook')
42
+ if File.exists?(hook_file)
43
+ output = `#{hook_file} #{module_path}`
44
+ if $?.success?
45
+ puts "Successfully ran hook: #{hook_file}".info
46
+ puts output.info
47
+ else
48
+ puts "Error running hook: #{hook_file}".fatal
49
+ puts output.fatal
50
+ end
51
+ end
52
+ end
53
+
54
+ # runs a user defined hook called post-hook
55
+ def run_post_hook
56
+ hook_file = File.join(template_dir,'post-hook')
57
+ if File.exists?(hook_file)
58
+ output = `#{hook_file} #{module_path}`
59
+ if $?.success?
60
+ puts "Successfully ran hook: #{hook_file}".info
61
+ puts output.info
62
+ else
63
+ puts "Error running hook: #{hook_file}".fatal
64
+ puts output.fatal
65
+ end
66
+ end
67
+ end
68
+
69
+ # this is the method that performs all the magic and creates all the files
43
70
  def create_files
44
71
  types = spec_object.types
45
72
  safe_create_module_files
@@ -57,19 +84,23 @@ class Retrospec
57
84
  end
58
85
 
59
86
  # creates any file that is contained in the templates/modules_files directory structure
60
- # loops through the directory looking for erb files, all other files are ignored.
87
+ # loops through the directory looking for erb files or other files.
61
88
  # strips the erb extension and renders the template to the current module path
62
89
  # filenames must named how they would appear in the normal module path. The directory
63
90
  # structure where the file is contained
64
91
  def safe_create_module_files
65
- templates = Dir.glob(File.join(template_dir,'module_files', '**', '{*,.*}')).find_all {|t| File.file?(t)}
92
+ templates = Find.find(File.join(template_dir,'module_files')).find_all {|f| !File.directory?(f)}.sort
66
93
  templates.each do |template|
67
94
  # need to remove the erb extension and rework the destination path
68
95
  if template =~ /nodesets|spec_helper_acceptance/ and !spec_object.enable_beaker_tests?
69
96
  next
70
97
  else
71
98
  dest = template.gsub(File.join(template_dir,'module_files'), module_path).gsub('.erb', '')
72
- safe_create_template_file(dest, template)
99
+ if File.symlink?(template)
100
+ Helpers.safe_create_symlink(template, dest)
101
+ else
102
+ safe_create_template_file(dest, template)
103
+ end
73
104
  end
74
105
  end
75
106
  end
@@ -65,11 +65,36 @@ class Helpers
65
65
 
66
66
  # creates and syncs the specifed user template diretory
67
67
  # returns: user_template_dir
68
- def self.setup_user_template_dir(user_template_directory=nil)
68
+ def self.setup_user_template_dir(user_template_directory=nil, git_url=nil, branch=nil)
69
69
  if user_template_directory.nil?
70
70
  user_template_directory = default_user_template_dir
71
71
  end
72
- sync_user_template_dir(create_user_template_dir(user_template_directory))
72
+ template_dir = create_user_template_dir(user_template_directory)
73
+ run_clone_hook(user_template_directory, git_url, branch)
74
+ template_dir
75
+ end
76
+
77
+ # runs the clone hook file
78
+ # the intention of this method and hook is to download the templates
79
+ # from an external repo. Because templates are updated frequently
80
+ # and users will sometimes have client specific templates I wanted to
81
+ # externalize them for easier management.
82
+ def self.run_clone_hook(template_dir, git_url=nil, branch=nil)
83
+ if File.exists?(File.join(template_dir,'clone-hook'))
84
+ hook_file = File.join(template_dir,'clone-hook')
85
+ else
86
+ hook_file = File.join(gem_template_dir, 'clone-hook')
87
+ end
88
+ if File.exists?(hook_file)
89
+ output = `#{hook_file} #{template_dir} #{git_url} #{branch}`
90
+ if $?.success?
91
+ puts "Successfully ran hook: #{hook_file}".info
92
+ puts output.info
93
+ else
94
+ puts "Error running hook: #{hook_file}".fatal
95
+ puts output.fatal
96
+ end
97
+ end
73
98
  end
74
99
 
75
100
  def self.default_user_template_dir
@@ -80,6 +105,15 @@ class Helpers
80
105
  File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
81
106
  end
82
107
 
108
+ def self.safe_create_symlink(src,dest)
109
+ if File.exists? dest
110
+ $stderr.puts "!! #{dest} already exists and differs from template".warning
111
+ else
112
+ FileUtils.copy_entry(src,dest)
113
+ puts " + #{dest}".info
114
+ end
115
+ end
116
+
83
117
  def self.safe_copy_file(src, dest)
84
118
  if File.exists?(dest) and not File.zero?(dest)
85
119
  $stderr.puts "!! #{dest} already exists".warning