pdk 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +53 -0
- data/README.md +7 -29
- data/lib/pdk/cli.rb +6 -0
- data/lib/pdk/cli/bundle.rb +11 -5
- data/lib/pdk/cli/exec.rb +37 -26
- data/lib/pdk/cli/test/unit.rb +11 -1
- data/lib/pdk/cli/util.rb +107 -10
- data/lib/pdk/cli/validate.rb +9 -2
- data/lib/pdk/generate/module.rb +1 -1
- data/lib/pdk/generate/provider.rb +11 -9
- data/lib/pdk/generate/puppet_object.rb +12 -4
- data/lib/pdk/module/convert.rb +20 -11
- data/lib/pdk/module/metadata.rb +19 -0
- data/lib/pdk/module/templatedir.rb +66 -42
- data/lib/pdk/module/update.rb +7 -7
- data/lib/pdk/tests/unit.rb +3 -4
- data/lib/pdk/util.rb +37 -2
- data/lib/pdk/util/bundler.rb +149 -52
- data/lib/pdk/util/git.rb +20 -3
- data/lib/pdk/util/puppet_version.rb +182 -0
- data/lib/pdk/util/ruby_version.rb +136 -0
- data/lib/pdk/util/vendored_file.rb +87 -0
- data/lib/pdk/util/version.rb +2 -0
- data/lib/pdk/validate/base_validator.rb +1 -1
- data/lib/pdk/validate/metadata/task_metadata_lint.rb +3 -28
- data/lib/pdk/version.rb +1 -1
- data/locales/pdk.pot +225 -133
- metadata +8 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93cc8f9f706dd2ce506fe5cba80f8dc1b850be29
|
4
|
+
data.tar.gz: f8132274481cb6f6cdcb60241829d32de7e33118
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ae5eeee330f86efe4d4fcc728aea7260fa0a066da55e21f120e0cf983750d5f12bc1c72422b58e435e1d46be94de9e07dfd071f37eebcf0482705186a879ba9f
|
7
|
+
data.tar.gz: 11a7de86e1765630c50d0adff32af9131262eaa4fb6e17a0ad86cd6f2218834f04e79f75a549f38ecfd8db95444a8d8a8d8201f20c8d4aa20cb2b22e7a929d80
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,58 @@ All changes to this repo will be documented in this file.
|
|
4
4
|
See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) for a high-level summary.
|
5
5
|
|
6
6
|
|
7
|
+
## [v1.5.0](https://github.com/puppetlabs/pdk/tree/v1.5.0) (2018-04-30)
|
8
|
+
[Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.4.1...v1.5.0)
|
9
|
+
|
10
|
+
**Implemented enhancements:**
|
11
|
+
|
12
|
+
- \(PDK-904\) Warns users of pdk version compatibility [\#482](https://github.com/puppetlabs/pdk/pull/482) ([bmjen](https://github.com/bmjen))
|
13
|
+
- \(maint\) Allow `pdk bundle` to work without `--` [\#466](https://github.com/puppetlabs/pdk/pull/466) ([DavidS](https://github.com/DavidS))
|
14
|
+
- \(PDK-877\) Make PDK compatible with Ruby 2.5 [\#459](https://github.com/puppetlabs/pdk/pull/459) ([scotje](https://github.com/scotje))
|
15
|
+
- Ruby 2.4.3 transition [\#453](https://github.com/puppetlabs/pdk/pull/453) ([bmjen](https://github.com/bmjen))
|
16
|
+
- \(PDK-846\) add Resource API type unit test template [\#451](https://github.com/puppetlabs/pdk/pull/451) ([tphoney](https://github.com/tphoney))
|
17
|
+
- \(PDK-785\) Add --puppet-version and --pe-version CLI options [\#448](https://github.com/puppetlabs/pdk/pull/448) ([rodjek](https://github.com/rodjek))
|
18
|
+
|
19
|
+
**Fixed bugs:**
|
20
|
+
|
21
|
+
- \(PDK-877\) `make\_tmpdir\_name': undefined method `make\_tmpname' for Dir::Tmpname:Module [\#455](https://github.com/puppetlabs/pdk/issues/455)
|
22
|
+
- pdk validate fails if host puppet.conf contains deprecated settings [\#304](https://github.com/puppetlabs/pdk/issues/304)
|
23
|
+
- \(maint\) Allow module name to contain underscores when verifying [\#491](https://github.com/puppetlabs/pdk/pull/491) ([rodjek](https://github.com/rodjek))
|
24
|
+
- \(MAINT\) Make Bundler update\_lock! helper more resilient [\#489](https://github.com/puppetlabs/pdk/pull/489) ([scotje](https://github.com/scotje))
|
25
|
+
- \(maint\) Unhide parallel flag in test unit. [\#486](https://github.com/puppetlabs/pdk/pull/486) ([bmjen](https://github.com/bmjen))
|
26
|
+
- \(PDK-831, PDK-832\) Fix ability to unmanage/delete files via .sync.yml [\#479](https://github.com/puppetlabs/pdk/pull/479) ([bmjen](https://github.com/bmjen))
|
27
|
+
- \(MAINT\) Use `bundle lock --update` to pin json to built-in versions [\#460](https://github.com/puppetlabs/pdk/pull/460) ([scotje](https://github.com/scotje))
|
28
|
+
|
29
|
+
**Closed issues:**
|
30
|
+
|
31
|
+
- PDK should default to mock\_with :rspec and resolve deprecation message [\#477](https://github.com/puppetlabs/pdk/issues/477)
|
32
|
+
- Support for template URL with a branch [\#447](https://github.com/puppetlabs/pdk/issues/447)
|
33
|
+
- Any interest in adding a `--parallel` option to `pdk test unit`? [\#446](https://github.com/puppetlabs/pdk/issues/446)
|
34
|
+
- Installing PDK from .deb causes unmet dependencies on Ubuntu 17.10 Artful [\#370](https://github.com/puppetlabs/pdk/issues/370)
|
35
|
+
- Repo Configs Contain Invalid URLs [\#319](https://github.com/puppetlabs/pdk/issues/319)
|
36
|
+
- Gems not found in pre-release [\#254](https://github.com/puppetlabs/pdk/issues/254)
|
37
|
+
|
38
|
+
**Merged pull requests:**
|
39
|
+
|
40
|
+
- \(FIXUP\) Fix issue where PDK was invoking wrong Ruby on Windows [\#492](https://github.com/puppetlabs/pdk/pull/492) ([scotje](https://github.com/scotje))
|
41
|
+
- \(maint\) Update package testing for ruby 2.4.4. [\#488](https://github.com/puppetlabs/pdk/pull/488) ([bmjen](https://github.com/bmjen))
|
42
|
+
- \(MAINT\) Fix package tests for version selection and airgapped usage [\#485](https://github.com/puppetlabs/pdk/pull/485) ([scotje](https://github.com/scotje))
|
43
|
+
- \(maint\) Some minor corrections to CLI strings. [\#484](https://github.com/puppetlabs/pdk/pull/484) ([bmjen](https://github.com/bmjen))
|
44
|
+
- \(maint\) Remove static PE version map from PDK::Util::PuppetVersion [\#483](https://github.com/puppetlabs/pdk/pull/483) ([rodjek](https://github.com/rodjek))
|
45
|
+
- \(PDK-842\) Wire puppet-version and pe-version options into subcommands [\#480](https://github.com/puppetlabs/pdk/pull/480) ([scotje](https://github.com/scotje))
|
46
|
+
- \(FIXUP\) Revert incorrect path change in PDK::CLI::Exec.bundle\_bin [\#478](https://github.com/puppetlabs/pdk/pull/478) ([scotje](https://github.com/scotje))
|
47
|
+
- \(maint\) Allow users to major or major.minor versions [\#475](https://github.com/puppetlabs/pdk/pull/475) ([rodjek](https://github.com/rodjek))
|
48
|
+
- \(PDK-923\) Honour PDK::Util::RubyVersion.active\_ruby\_version when executing commands [\#474](https://github.com/puppetlabs/pdk/pull/474) ([rodjek](https://github.com/rodjek))
|
49
|
+
- \(MAINT\) Fix argument bug with BundleHelper\#update\_lock! [\#473](https://github.com/puppetlabs/pdk/pull/473) ([scotje](https://github.com/scotje))
|
50
|
+
- \(PDK-921\) Update PDK::Util::Bundler helpers to support gem switching [\#472](https://github.com/puppetlabs/pdk/pull/472) ([scotje](https://github.com/scotje))
|
51
|
+
- Link to PDK template repo [\#470](https://github.com/puppetlabs/pdk/pull/470) ([turbodog](https://github.com/turbodog))
|
52
|
+
- \(maint\) Update bundler before build because Ruby 2.5 [\#465](https://github.com/puppetlabs/pdk/pull/465) ([DavidS](https://github.com/DavidS))
|
53
|
+
- \(MAINT\) Refactor templatedir path\_or\_url calculation [\#462](https://github.com/puppetlabs/pdk/pull/462) ([scotje](https://github.com/scotje))
|
54
|
+
- \(PDK-840\) Add PDK::Util::PuppetVersion.from\_module\_metadata [\#461](https://github.com/puppetlabs/pdk/pull/461) ([rodjek](https://github.com/rodjek))
|
55
|
+
- \(maint\) bump dev version [\#458](https://github.com/puppetlabs/pdk/pull/458) ([bmjen](https://github.com/bmjen))
|
56
|
+
- \(MAINT\) Add Ruby 2.5 to Travis and Appveyor config [\#457](https://github.com/puppetlabs/pdk/pull/457) ([scotje](https://github.com/scotje))
|
57
|
+
- \(maint\) Fixup remaining ruby 2.4.3 issues [\#454](https://github.com/puppetlabs/pdk/pull/454) ([bmjen](https://github.com/bmjen))
|
58
|
+
|
7
59
|
## [v1.4.1](https://github.com/puppetlabs/pdk/tree/v1.4.1) (2018-02-26)
|
8
60
|
[Full Changelog](https://github.com/puppetlabs/pdk/compare/v1.4.0...v1.4.1)
|
9
61
|
|
@@ -13,6 +65,7 @@ See the [release notes](https://puppet.com/docs/pdk/latest/release_notes.html) f
|
|
13
65
|
|
14
66
|
**Merged pull requests:**
|
15
67
|
|
68
|
+
- Release 1.4.1 amend [\#443](https://github.com/puppetlabs/pdk/pull/443) ([bmjen](https://github.com/bmjen))
|
16
69
|
- Updates msg in pdk update on unconverted module [\#442](https://github.com/puppetlabs/pdk/pull/442) ([bmjen](https://github.com/bmjen))
|
17
70
|
- Release 1.4.1 amend [\#441](https://github.com/puppetlabs/pdk/pull/441) ([bmjen](https://github.com/bmjen))
|
18
71
|
- \(maint\) pdk update checks if module is pdk compat [\#440](https://github.com/puppetlabs/pdk/pull/440) ([bmjen](https://github.com/bmjen))
|
data/README.md
CHANGED
@@ -50,29 +50,29 @@ This command asks a series of metadata questions and then generates the basic co
|
|
50
50
|
|
51
51
|
To generate a class in your module, use the `pdk new class` command, specifying the name of your new class. To generate the main class of the module, which is defined in an `init.pp` file, give the class the same name as the module.
|
52
52
|
|
53
|
-
1. From the command line, in your module's directory, run:
|
53
|
+
1. From the command line, in your module's directory, run:
|
54
54
|
```
|
55
|
-
pdk new class class_name
|
55
|
+
pdk new class class_name
|
56
56
|
```
|
57
57
|
|
58
|
-
PDK creates the new class manifest and a test file (as `class_name_spec.rb`) in your module's `/spec/classes` directory.
|
58
|
+
PDK creates the new class manifest and a test file (as `class_name_spec.rb`) in your module's `/spec/classes` directory.
|
59
59
|
|
60
60
|
### Generate a defined type
|
61
61
|
|
62
62
|
To generate a defined type in your module, use the `pdk new defined_type` command, specifying the name of your new defined type.
|
63
63
|
|
64
|
-
1. From the command line, in your module's directory, run:
|
64
|
+
1. From the command line, in your module's directory, run:
|
65
65
|
```
|
66
66
|
pdk new defined_type defined_type_name
|
67
67
|
```
|
68
68
|
|
69
|
-
PDK creates the new defined\_type manifest and a test file (as `defined_type_name_spec.rb`) in your module's `/spec/defines` directory.
|
69
|
+
PDK creates the new defined\_type manifest and a test file (as `defined_type_name_spec.rb`) in your module's `/spec/defines` directory.
|
70
70
|
|
71
71
|
### Generate a task
|
72
72
|
|
73
73
|
To generate a task in your module, use the `pdk new task` command, specifying the name of your new task.
|
74
74
|
|
75
|
-
1. From the command line, in your module's directory, run:
|
75
|
+
1. From the command line, in your module's directory, run:
|
76
76
|
```
|
77
77
|
pdk new task task_name
|
78
78
|
```
|
@@ -93,7 +93,7 @@ This command validates the metadata, Puppet code syntax and style, and Ruby synt
|
|
93
93
|
|
94
94
|
### Run unit tests
|
95
95
|
|
96
|
-
PDK's default template sets up [rspec](http://rspec.info/) for Ruby-level unit testing, and [rspec-puppet](https://github.com/rodjek/rspec-puppet/) for catalog-level unit testing.
|
96
|
+
PDK's [default template](https://github.com/puppetlabs/pdk-templates) sets up [rspec](http://rspec.info/) for Ruby-level unit testing, and [rspec-puppet](https://github.com/rodjek/rspec-puppet/) for catalog-level unit testing.
|
97
97
|
|
98
98
|
In the module's directory, run unit tests with:
|
99
99
|
|
@@ -111,28 +111,6 @@ This command executes arbitrary commands in a bundler context within the module
|
|
111
111
|
|
112
112
|
Note that for most uses, you must use the `--` to separate bundler options from pdk options. Compare the following two commands:
|
113
113
|
|
114
|
-
```
|
115
|
-
$ pdk bundle exec rake -T
|
116
|
-
bundle: illegal option -- T
|
117
|
-
|
118
|
-
```
|
119
|
-
|
120
|
-
and
|
121
|
-
|
122
|
-
```
|
123
|
-
$ pdk bundle -- exec rake -T
|
124
|
-
rake beaker # Run beaker acceptance tests
|
125
|
-
rake beaker:sets # List available beaker nodesets
|
126
|
-
rake beaker:ssh[set,node] # Try to use vagrant to login to the Beaker node
|
127
|
-
rake build # Build puppet module package
|
128
|
-
[...]
|
129
|
-
```
|
130
|
-
|
131
|
-
#### Known issues
|
132
|
-
|
133
|
-
|
134
|
-
Note that for PowerShell the `--` must be escaped using a backtick ( <code>`-- </code> ) or the shell parses it and strips it out of the command. See [PDK-408](https://tickets.puppet.com/browse/PDK-408) for details.
|
135
|
-
|
136
114
|
## Module Compatibility
|
137
115
|
|
138
116
|
**PDK Version Compatibility:** Modules created with PDK version validate against and run on all Puppet and Ruby version combinations currently under maintenance (see https://docs.puppet.com/puppet/latest/about_agent.html and https://puppet.com/misc/puppet-enterprise-lifecycle)
|
data/lib/pdk/cli.rb
CHANGED
@@ -11,6 +11,7 @@ require 'pdk/i18n'
|
|
11
11
|
require 'pdk/logger'
|
12
12
|
require 'pdk/report'
|
13
13
|
require 'pdk/util/version'
|
14
|
+
require 'pdk/util/puppet_version'
|
14
15
|
|
15
16
|
module PDK::CLI
|
16
17
|
def self.run(args)
|
@@ -49,6 +50,11 @@ module PDK::CLI
|
|
49
50
|
dsl.option nil, 'full-interview', _('When specified, interactive querying of metadata will include all optional questions.')
|
50
51
|
end
|
51
52
|
|
53
|
+
def self.puppet_version_options(dsl)
|
54
|
+
dsl.option nil, 'puppet-version', _('Puppet version to run tests or validations against.'), argument: :required
|
55
|
+
dsl.option nil, 'pe-version', _('Puppet Enterprise version to run tests or validations against.'), argument: :required
|
56
|
+
end
|
57
|
+
|
52
58
|
@base_cmd = Cri::Command.define do
|
53
59
|
name 'pdk'
|
54
60
|
usage _('pdk command [options]')
|
data/lib/pdk/cli/bundle.rb
CHANGED
@@ -2,11 +2,7 @@
|
|
2
2
|
module PDK::CLI
|
3
3
|
@bundle_cmd = @base_cmd.define_command do
|
4
4
|
name 'bundle'
|
5
|
-
|
6
|
-
usage _('bundle `-- [bundler_options]')
|
7
|
-
else
|
8
|
-
usage _('bundle -- [bundler_options]')
|
9
|
-
end
|
5
|
+
usage _('bundle [bundler_options]')
|
10
6
|
summary _('(Experimental) Command pass-through to bundler')
|
11
7
|
description _(<<-EOF
|
12
8
|
[experimental] For advanced users, pdk bundle runs arbitrary commands in the bundler environment that pdk manages.
|
@@ -15,14 +11,24 @@ Careless use of this command can lead to errors that pdk can't help recover from
|
|
15
11
|
Note that for PowerShell the '--' needs to be escaped using a backtick: '`--' to avoid it being parsed by the shell.
|
16
12
|
EOF
|
17
13
|
)
|
14
|
+
skip_option_parsing
|
18
15
|
|
19
16
|
run do |_opts, args, _cmd|
|
20
17
|
PDK::CLI::Util.ensure_in_module!(
|
21
18
|
message: _('`pdk bundle` can only be run from inside a valid module directory.'),
|
22
19
|
)
|
23
20
|
|
21
|
+
PDK::CLI::Util.validate_puppet_version_opts({})
|
22
|
+
|
23
|
+
# Ensure that the correct Ruby is activated before running commend.
|
24
|
+
puppet_env = PDK::CLI::Util.puppet_from_opts_or_env({})
|
25
|
+
PDK::Util::RubyVersion.use(puppet_env[:ruby_version])
|
26
|
+
|
27
|
+
gemfile_env = PDK::Util::Bundler::BundleHelper.gemfile_env(puppet_env[:gemset])
|
28
|
+
|
24
29
|
command = PDK::CLI::Exec::Command.new(PDK::CLI::Exec.bundle_bin, *args).tap do |c|
|
25
30
|
c.context = :module
|
31
|
+
c.update_environment(gemfile_env)
|
26
32
|
end
|
27
33
|
|
28
34
|
result = command.execute!
|
data/lib/pdk/cli/exec.rb
CHANGED
@@ -6,6 +6,7 @@ require 'tty-which'
|
|
6
6
|
|
7
7
|
require 'pdk/util'
|
8
8
|
require 'pdk/util/git'
|
9
|
+
require 'pdk/util/ruby_version'
|
9
10
|
|
10
11
|
module PDK
|
11
12
|
module CLI
|
@@ -14,6 +15,10 @@ module PDK
|
|
14
15
|
Command.new(*cmd).execute!
|
15
16
|
end
|
16
17
|
|
18
|
+
def self.execute_with_env(env, *cmd)
|
19
|
+
Command.new(*cmd).tap { |c| c.environment = env }.execute!
|
20
|
+
end
|
21
|
+
|
17
22
|
def self.ensure_bin_present!(bin_path, bin_name)
|
18
23
|
message = _('Unable to find `%{name}`. Check that it is installed and try again.') % {
|
19
24
|
name: bin_name,
|
@@ -30,24 +35,31 @@ module PDK
|
|
30
35
|
|
31
36
|
def self.bundle_bin
|
32
37
|
bundle_bin = Gem.win_platform? ? 'bundle.bat' : 'bundle'
|
33
|
-
vendored_bin_path = File.join('private', 'ruby',
|
38
|
+
vendored_bin_path = File.join('private', 'ruby', PDK::Util::RubyVersion.active_ruby_version, 'bin', bundle_bin)
|
34
39
|
|
35
40
|
try_vendored_bin(vendored_bin_path, bundle_bin)
|
36
41
|
end
|
37
42
|
|
38
43
|
def self.try_vendored_bin(vendored_bin_path, fallback)
|
39
44
|
unless PDK::Util.package_install?
|
40
|
-
PDK.logger.debug(_("PDK package installation not found. Trying '%{fallback}' from the system PATH instead.") % {
|
45
|
+
PDK.logger.debug(_("PDK package installation not found. Trying '%{fallback}' from the system PATH instead.") % {
|
46
|
+
fallback: fallback,
|
47
|
+
})
|
41
48
|
return fallback
|
42
49
|
end
|
43
50
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
51
|
+
vendored_bin_full_path = File.join(PDK::Util.pdk_package_basedir, vendored_bin_path)
|
52
|
+
|
53
|
+
unless File.exist?(vendored_bin_full_path)
|
54
|
+
PDK.logger.debug(_("Could not find '%{vendored_bin}' in PDK package. Trying '%{fallback}' from the system PATH instead.") % {
|
55
|
+
fallback: fallback,
|
56
|
+
vendored_bin: vendored_bin_full_path,
|
57
|
+
})
|
58
|
+
return fallback
|
50
59
|
end
|
60
|
+
|
61
|
+
PDK.logger.debug(_("Using '%{vendored_bin}' from PDK package.") % { vendored_bin: vendored_bin_full_path })
|
62
|
+
vendored_bin_full_path
|
51
63
|
end
|
52
64
|
|
53
65
|
# TODO: decide how/when to connect stdin to child process for things like pry
|
@@ -105,6 +117,10 @@ module PDK
|
|
105
117
|
@spinner = TTY::Spinner.new("[:spinner] #{message}", opts.merge(PDK::CLI::Util.spinner_opts_for_platform))
|
106
118
|
end
|
107
119
|
|
120
|
+
def update_environment(additional_env)
|
121
|
+
@environment.merge!(additional_env)
|
122
|
+
end
|
123
|
+
|
108
124
|
def execute!
|
109
125
|
# Start spinning if configured.
|
110
126
|
@spinner.auto_spin if @spinner
|
@@ -115,26 +131,13 @@ module PDK
|
|
115
131
|
end
|
116
132
|
|
117
133
|
if context == :module
|
118
|
-
|
119
|
-
|
120
|
-
# To still use the pre-installed packages, but allow folks to install additional gems
|
121
|
-
# we set GEM_HOME to the user's cachedir, and put all other cache locations onto GEM_PATH
|
122
|
-
# See https://stackoverflow.com/a/11277228 for background
|
123
|
-
@process.environment['GEM_HOME'] = File.join(PDK::Util.cachedir, 'ruby', RbConfig::CONFIG['ruby_version'])
|
124
|
-
|
125
|
-
if PDK::Util.package_install?
|
126
|
-
# Subprocesses use their own set of gems which are managed by pdk or installed with the package.
|
127
|
-
@process.environment['GEM_PATH'] = File.join(PDK::Util.package_cachedir, 'ruby', RbConfig::CONFIG['ruby_version'])
|
128
|
-
else
|
129
|
-
# This allows the subprocess to find the 'bundler' gem, which isn't in the cachedir above for gem installs.
|
130
|
-
bundler_gem_path = File.absolute_path(File.join(`gem which bundler`, '..', '..', '..', '..'))
|
131
|
-
@process.environment['GEM_PATH'] = bundler_gem_path
|
132
|
-
end
|
134
|
+
@process.environment['GEM_HOME'] = PDK::Util::RubyVersion.gem_home
|
135
|
+
@process.environment['GEM_PATH'] = PDK::Util::RubyVersion.gem_path
|
133
136
|
|
134
137
|
# Make sure invocation of Ruby prefers our private installation.
|
135
138
|
package_binpath = PDK::Util.package_install? ? File.join(PDK::Util.pdk_package_basedir, 'bin') : nil
|
136
139
|
@process.environment['PATH'] = [
|
137
|
-
|
140
|
+
PDK::Util::RubyVersion.bin_path,
|
138
141
|
File.join(@process.environment['GEM_HOME'], 'bin'),
|
139
142
|
File.join(@process.environment['GEM_PATH'], 'bin'),
|
140
143
|
package_binpath,
|
@@ -201,12 +204,18 @@ module PDK
|
|
201
204
|
|
202
205
|
def run_process!
|
203
206
|
command_string = argv.join(' ')
|
207
|
+
|
204
208
|
PDK.logger.debug(_("Executing '%{command}'") % { command: command_string })
|
209
|
+
|
205
210
|
if context == :module
|
206
|
-
PDK.logger.debug(_(
|
207
|
-
|
211
|
+
PDK.logger.debug(_('Command environment:'))
|
212
|
+
@process.environment.each do |var, val|
|
213
|
+
PDK.logger.debug(" #{var}: #{val}")
|
214
|
+
end
|
208
215
|
end
|
216
|
+
|
209
217
|
start_time = Time.now
|
218
|
+
|
210
219
|
begin
|
211
220
|
@process.start
|
212
221
|
rescue ChildProcess::LaunchError => e
|
@@ -223,7 +232,9 @@ module PDK
|
|
223
232
|
# Wait indfinitely if no timeout set.
|
224
233
|
@process.wait
|
225
234
|
end
|
235
|
+
|
226
236
|
@duration = Time.now - start_time
|
237
|
+
|
227
238
|
PDK.logger.debug(_("Execution of '%{command}' complete (duration: %{duration_in_seconds}s; exit code: %{exit_code})") %
|
228
239
|
{ command: command_string, duration_in_seconds: @duration, exit_code: @process.exit_code })
|
229
240
|
end
|
data/lib/pdk/cli/test/unit.rb
CHANGED
@@ -7,8 +7,9 @@ module PDK::CLI
|
|
7
7
|
usage _('unit [options]')
|
8
8
|
summary _('Run unit tests.')
|
9
9
|
|
10
|
+
PDK::CLI.puppet_version_options(self)
|
10
11
|
flag nil, :list, _('List all available unit test files.')
|
11
|
-
flag nil, :parallel, _('Run unit tests in parallel.')
|
12
|
+
flag nil, :parallel, _('Run unit tests in parallel.')
|
12
13
|
flag :v, :verbose, _('More verbose output. Displays examples in each unit test file.')
|
13
14
|
|
14
15
|
option nil, :tests, _('Specify a comma-separated list of unit test files to run.'), argument: :required, default: '' do |values|
|
@@ -21,11 +22,15 @@ module PDK::CLI
|
|
21
22
|
run do |opts, _args, _cmd|
|
22
23
|
require 'pdk/tests/unit'
|
23
24
|
|
25
|
+
PDK::CLI::Util.validate_puppet_version_opts(opts)
|
26
|
+
|
24
27
|
PDK::CLI::Util.ensure_in_module!(
|
25
28
|
message: _('Unit tests can only be run from inside a valid module directory.'),
|
26
29
|
log_level: :info,
|
27
30
|
)
|
28
31
|
|
32
|
+
PDK::CLI::Util.module_version_check
|
33
|
+
|
29
34
|
report = nil
|
30
35
|
|
31
36
|
if opts[:list]
|
@@ -57,6 +62,11 @@ module PDK::CLI
|
|
57
62
|
}]
|
58
63
|
end
|
59
64
|
|
65
|
+
# Ensure that the bundled gems are up to date and correct Ruby is activated before running tests.
|
66
|
+
puppet_env = PDK::CLI::Util.puppet_from_opts_or_env(opts)
|
67
|
+
PDK::Util::RubyVersion.use(puppet_env[:ruby_version])
|
68
|
+
PDK::Util::Bundler.ensure_bundle!(puppet_env[:gemset])
|
69
|
+
|
60
70
|
exit_code = PDK::Test::Unit.invoke(report, opts)
|
61
71
|
|
62
72
|
report_formats.each do |format|
|
data/lib/pdk/cli/util.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
module PDK
|
2
2
|
module CLI
|
3
3
|
module Util
|
4
|
-
MODULE_FOLDERS = %w[
|
5
|
-
manifests
|
6
|
-
lib
|
7
|
-
tasks
|
8
|
-
facts.d
|
9
|
-
functions
|
10
|
-
types
|
11
|
-
].freeze
|
12
|
-
|
13
4
|
# Ensures the calling code is being run from inside a module directory.
|
14
5
|
#
|
15
6
|
# @param opts [Hash] options to change the behavior of the check logic.
|
@@ -21,7 +12,7 @@ module PDK
|
|
21
12
|
# contain a Puppet module.
|
22
13
|
def ensure_in_module!(opts = {})
|
23
14
|
return unless PDK::Util.module_root.nil?
|
24
|
-
return if opts[:check_module_layout] && PDK::
|
15
|
+
return if opts[:check_module_layout] && PDK::Util.in_module_root?
|
25
16
|
|
26
17
|
message = opts.fetch(:message, _('This command must be run from inside a valid module (no metadata.json found).'))
|
27
18
|
raise PDK::CLI::ExitWithError.new(message, opts)
|
@@ -65,6 +56,112 @@ module PDK
|
|
65
56
|
true
|
66
57
|
end
|
67
58
|
module_function :interactive?
|
59
|
+
|
60
|
+
def module_version_check
|
61
|
+
module_pdk_ver = PDK::Util.module_pdk_version
|
62
|
+
|
63
|
+
# This means the module does not have a pdk-version tag in the metadata.json
|
64
|
+
# and will require a pdk convert.
|
65
|
+
if module_pdk_ver.nil?
|
66
|
+
PDK.logger.warn _('This module is not PDK compatible. Run `pdk convert` to make it compatible with your version of PDK.')
|
67
|
+
# This checks that the version of pdk in the module's metadata is older
|
68
|
+
# than 1.3.1, which means the module will need to run pdk convert to the
|
69
|
+
# new templates.
|
70
|
+
elsif Gem::Version.new(module_pdk_ver) < Gem::Version.new('1.3.1')
|
71
|
+
PDK.logger.warn _('This module template is out of date. Run `pdk convert` to make it compatible with your version of PDK.')
|
72
|
+
# This checks if the version of the installed PDK is older than the
|
73
|
+
# version in the module's metadata, and advises the user to upgrade to
|
74
|
+
# their install of PDK.
|
75
|
+
elsif Gem::Version.new(PDK::VERSION) < Gem::Version.new(module_pdk_ver)
|
76
|
+
PDK.logger.warn _('This module is compatible with a newer version of PDK. Upgrade your version of PDK to ensure compatibility.')
|
77
|
+
# This checks if the version listed in the module's metadata is older
|
78
|
+
# than the installed PDK, and advises the user to run pdk update.
|
79
|
+
elsif Gem::Version.new(PDK::VERSION) > Gem::Version.new(module_pdk_ver)
|
80
|
+
PDK.logger.warn _('This module is compatible with an older version of PDK. Run `pdk update` to update it to your version of PDK.')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
module_function :module_version_check
|
84
|
+
|
85
|
+
def puppet_from_opts_or_env(opts)
|
86
|
+
desired_puppet_version = (opts || {})[:'puppet-version'] || ENV['PDK_PUPPET_VERSION']
|
87
|
+
desired_pe_version = (opts || {})[:'pe-version'] || ENV['PDK_PE_VERSION']
|
88
|
+
|
89
|
+
begin
|
90
|
+
puppet_env =
|
91
|
+
if desired_puppet_version
|
92
|
+
PDK::Util::PuppetVersion.find_gem_for(desired_puppet_version)
|
93
|
+
elsif desired_pe_version
|
94
|
+
PDK::Util::PuppetVersion.from_pe_version(desired_pe_version)
|
95
|
+
else
|
96
|
+
PDK::Util::PuppetVersion.from_module_metadata || PDK::Util::PuppetVersion.latest_available
|
97
|
+
end
|
98
|
+
rescue ArgumentError => e
|
99
|
+
raise PDK::CLI::ExitWithError, e.message
|
100
|
+
end
|
101
|
+
|
102
|
+
# Notify user of what Ruby version will be used.
|
103
|
+
PDK.logger.info(_('Using Ruby %{version}') % {
|
104
|
+
version: puppet_env[:ruby_version],
|
105
|
+
})
|
106
|
+
|
107
|
+
gemset = { puppet: puppet_env[:gem_version].to_s }
|
108
|
+
|
109
|
+
# Notify user of what gems are being activated.
|
110
|
+
gemset.each do |gem, version|
|
111
|
+
next if version.nil?
|
112
|
+
|
113
|
+
PDK.logger.info(_('Using %{gem} %{version}') % {
|
114
|
+
gem: gem.to_s.capitalize,
|
115
|
+
version: version,
|
116
|
+
})
|
117
|
+
end
|
118
|
+
|
119
|
+
{
|
120
|
+
gemset: gemset,
|
121
|
+
ruby_version: puppet_env[:ruby_version],
|
122
|
+
}
|
123
|
+
end
|
124
|
+
module_function :puppet_from_opts_or_env
|
125
|
+
|
126
|
+
def validate_puppet_version_opts(opts)
|
127
|
+
puppet_ver_specs = []
|
128
|
+
puppet_ver_specs << '--puppet-version option' if opts[:'puppet-version']
|
129
|
+
puppet_ver_specs << 'PDK_PUPPET_VERSION environment variable' if ENV['PDK_PUPPET_VERSION'] && !ENV['PDK_PUPPET_VERSION'].empty?
|
130
|
+
|
131
|
+
pe_ver_specs = []
|
132
|
+
pe_ver_specs << '--pe-version option' if opts[:'pe-version']
|
133
|
+
pe_ver_specs << 'PDK_PE_VERSION environment variable' if ENV['PDK_PE_VERSION'] && !ENV['PDK_PE_VERSION'].empty?
|
134
|
+
|
135
|
+
puppet_ver_specs.each do |pup_ver_spec|
|
136
|
+
next if pe_ver_specs.empty?
|
137
|
+
|
138
|
+
offending = [pup_ver_spec, pe_ver_specs[0]].sort
|
139
|
+
|
140
|
+
raise PDK::CLI::ExitWithError, _('You cannot specify a %{first} and %{second} at the same time.') % {
|
141
|
+
first: offending[0],
|
142
|
+
second: offending[1],
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
if puppet_ver_specs.size == 2
|
147
|
+
warning_str = 'Puppet version option from command line: "--puppet-version=%{pup_ver_opt}" '
|
148
|
+
warning_str += 'overrides value from environment: "PDK_PUPPET_VERSION=%{pup_ver_env}". You should not specify both.'
|
149
|
+
|
150
|
+
PDK.logger.warn(_(warning_str) % {
|
151
|
+
pup_ver_opt: opts[:'puppet-version'],
|
152
|
+
pup_ver_env: ENV['PDK_PUPPET_VERSION'],
|
153
|
+
})
|
154
|
+
elsif pe_ver_specs.size == 2
|
155
|
+
warning_str = 'Puppet Enterprise version option from command line: "--pe-version=%{pe_ver_opt}" '
|
156
|
+
warning_str += 'overrides value from environment: "PDK_PE_VERSION=%{pe_ver_env}". You should not specify both.'
|
157
|
+
|
158
|
+
PDK.logger.warn(_(warning_str) % {
|
159
|
+
pup_ver_opt: opts[:'pe-version'],
|
160
|
+
pup_ver_env: ENV['PDK_PE_VERSION'],
|
161
|
+
})
|
162
|
+
end
|
163
|
+
end
|
164
|
+
module_function :validate_puppet_version_opts
|
68
165
|
end
|
69
166
|
end
|
70
167
|
end
|