choria-mcorpc-support 2.20.5 → 2.21.1

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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mcollective.rb +1 -1
  3. data/lib/mcollective/application/facts.rb +8 -0
  4. data/lib/mcollective/application/plugin.rb +19 -7
  5. data/lib/mcollective/applications.rb +2 -1
  6. data/lib/mcollective/ddl/agentddl.rb +17 -11
  7. data/lib/mcollective/ddl/base.rb +34 -20
  8. data/lib/mcollective/ddl/dataddl.rb +5 -5
  9. data/lib/mcollective/ddl/discoveryddl.rb +2 -2
  10. data/lib/mcollective/ddl/validatorddl.rb +1 -1
  11. data/lib/mcollective/pluginpackager/agent_definition.rb +33 -19
  12. data/lib/mcollective/pluginpackager/{puppet_module_packager.rb → forge_packager.rb} +57 -50
  13. data/lib/mcollective/pluginpackager/standard_definition.rb +23 -12
  14. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/README.md.erb +1 -1
  15. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/data/defaults.yaml.erb +0 -0
  16. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/data/plugin.yaml.erb +0 -0
  17. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/hiera.yaml.erb +0 -0
  18. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/manifests/init.pp.erb +2 -0
  19. data/lib/mcollective/pluginpackager/templates/{puppet_module → forge}/metadata.json.erb +2 -2
  20. data/lib/mcollective/validator.rb +2 -2
  21. data/lib/mcollective/validator/array_validator.rb +1 -1
  22. data/lib/mcollective/validator/ipv4address_validator.rb +5 -7
  23. data/lib/mcollective/validator/ipv6address_validator.rb +5 -7
  24. data/lib/mcollective/validator/shellsafe_validator.rb +1 -1
  25. data/lib/mcollective/validator/typecheck_validator.rb +19 -15
  26. metadata +11 -25
  27. data/lib/mcollective/pluginpackager/debpackage_packager.rb +0 -237
  28. data/lib/mcollective/pluginpackager/modulepackage_packager.rb +0 -127
  29. data/lib/mcollective/pluginpackager/ospackage_packager.rb +0 -59
  30. data/lib/mcollective/pluginpackager/rpmpackage_packager.rb +0 -180
  31. data/lib/mcollective/pluginpackager/templates/debian/Makefile.erb +0 -7
  32. data/lib/mcollective/pluginpackager/templates/debian/changelog.erb +0 -5
  33. data/lib/mcollective/pluginpackager/templates/debian/compat.erb +0 -1
  34. data/lib/mcollective/pluginpackager/templates/debian/control.erb +0 -15
  35. data/lib/mcollective/pluginpackager/templates/debian/copyright.erb +0 -8
  36. data/lib/mcollective/pluginpackager/templates/debian/rules.erb +0 -6
  37. data/lib/mcollective/pluginpackager/templates/module/Modulefile.erb +0 -5
  38. data/lib/mcollective/pluginpackager/templates/module/README.md.erb +0 -37
  39. data/lib/mcollective/pluginpackager/templates/module/_manifest.pp.erb +0 -9
  40. data/lib/mcollective/pluginpackager/templates/redhat/rpm_spec.erb +0 -63
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: choria-mcorpc-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.20.5
4
+ version: 2.21.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - R.I.Pienaar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-04 00:00:00.000000000 Z
11
+ date: 2020-07-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: systemu
@@ -36,14 +36,14 @@ dependencies:
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 0.5.0
39
+ version: '0.6'
40
40
  type: :runtime
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: 0.5.0
46
+ version: '0.6'
47
47
  description: Libraries enabling Ruby support for the Choria Orchestration Server
48
48
  email: rip@devco.net
49
49
  executables:
@@ -135,28 +135,14 @@ files:
135
135
  - lib/mcollective/pluginmanager.rb
136
136
  - lib/mcollective/pluginpackager.rb
137
137
  - lib/mcollective/pluginpackager/agent_definition.rb
138
- - lib/mcollective/pluginpackager/debpackage_packager.rb
139
- - lib/mcollective/pluginpackager/modulepackage_packager.rb
140
- - lib/mcollective/pluginpackager/ospackage_packager.rb
141
- - lib/mcollective/pluginpackager/puppet_module_packager.rb
142
- - lib/mcollective/pluginpackager/rpmpackage_packager.rb
138
+ - lib/mcollective/pluginpackager/forge_packager.rb
143
139
  - lib/mcollective/pluginpackager/standard_definition.rb
144
- - lib/mcollective/pluginpackager/templates/debian/Makefile.erb
145
- - lib/mcollective/pluginpackager/templates/debian/changelog.erb
146
- - lib/mcollective/pluginpackager/templates/debian/compat.erb
147
- - lib/mcollective/pluginpackager/templates/debian/control.erb
148
- - lib/mcollective/pluginpackager/templates/debian/copyright.erb
149
- - lib/mcollective/pluginpackager/templates/debian/rules.erb
150
- - lib/mcollective/pluginpackager/templates/module/Modulefile.erb
151
- - lib/mcollective/pluginpackager/templates/module/README.md.erb
152
- - lib/mcollective/pluginpackager/templates/module/_manifest.pp.erb
153
- - lib/mcollective/pluginpackager/templates/puppet_module/README.md.erb
154
- - lib/mcollective/pluginpackager/templates/puppet_module/data/defaults.yaml.erb
155
- - lib/mcollective/pluginpackager/templates/puppet_module/data/plugin.yaml.erb
156
- - lib/mcollective/pluginpackager/templates/puppet_module/hiera.yaml.erb
157
- - lib/mcollective/pluginpackager/templates/puppet_module/manifests/init.pp.erb
158
- - lib/mcollective/pluginpackager/templates/puppet_module/metadata.json.erb
159
- - lib/mcollective/pluginpackager/templates/redhat/rpm_spec.erb
140
+ - lib/mcollective/pluginpackager/templates/forge/README.md.erb
141
+ - lib/mcollective/pluginpackager/templates/forge/data/defaults.yaml.erb
142
+ - lib/mcollective/pluginpackager/templates/forge/data/plugin.yaml.erb
143
+ - lib/mcollective/pluginpackager/templates/forge/hiera.yaml.erb
144
+ - lib/mcollective/pluginpackager/templates/forge/manifests/init.pp.erb
145
+ - lib/mcollective/pluginpackager/templates/forge/metadata.json.erb
160
146
  - lib/mcollective/registration/base.rb
161
147
  - lib/mcollective/rpc.rb
162
148
  - lib/mcollective/rpc/actionrunner.rb
@@ -1,237 +0,0 @@
1
- module MCollective
2
- module PluginPackager
3
- class DebpackagePackager
4
- require 'erb'
5
-
6
- def initialize(plugin, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = nil, module_template = nil)
7
- if PluginPackager.command_available?('debuild')
8
- @plugin = plugin
9
- @verbose = verbose
10
- @libdir = pluginpath || '/usr/share/mcollective/plugins/mcollective/'
11
- @signature = signature
12
- @package_name = "#{@plugin.mcname}-#{@plugin.metadata[:name]}"
13
- @keep_artifacts = keep_artifacts
14
- else
15
- raise("Cannot build package. 'debuild' is not present on the system.")
16
- end
17
- end
18
-
19
- # Build process :
20
- # - create buildroot
21
- # - craete buildroot/debian
22
- # - create the relative directories with package contents
23
- # - create install files for each of the plugins that are going to be built
24
- # - create debian build files
25
- # - create tarball
26
- # - create pre and post install files
27
- # - run the build script
28
- # - move packages to cwd
29
- # - clean up
30
- def create_packages
31
- begin
32
- puts "Building packages for #{@package_name} plugin."
33
-
34
- @tmpdir = Dir.mktmpdir('mcollective_packager')
35
- @build_dir = File.join(@tmpdir, "#{@package_name}_#{@plugin.metadata[:version]}")
36
- Dir.mkdir(@build_dir)
37
-
38
- create_debian_dir
39
- @plugin.packagedata.each do |type, data|
40
- prepare_tmpdirs(data)
41
- create_install_file(type, data)
42
- create_pre_and_post_install(type)
43
- end
44
- create_debian_files
45
- create_tar
46
- run_build
47
- move_packages
48
-
49
- puts "Completed building all packages for #{@package_name} plugin."
50
- ensure
51
- if @keep_artifacts
52
- puts 'Keeping build artifacts.'
53
- puts "Build artifacts saved - #{@tmpdir}"
54
- else
55
- puts 'Removing build artifacts.'
56
- cleanup_tmpdirs
57
- end
58
- end
59
- end
60
-
61
- private
62
-
63
- def create_debian_files
64
- ['control', 'Makefile', 'compat', 'rules', 'copyright', 'changelog'].each do |f|
65
- create_file(f)
66
- end
67
- end
68
-
69
- def run_build
70
- FileUtils.cd(@build_dir) do
71
- PluginPackager.execute_verbosely(@verbose) do
72
- if @signature
73
- if @signature.is_a?(String)
74
- PluginPackager.safe_system("debuild --no-lintian -i -k#{@signature}")
75
- else
76
- PluginPackager.safe_system("debuild --no-lintian -i")
77
- end
78
- else
79
- PluginPackager.safe_system("debuild --no-lintian -i -us -uc")
80
- end
81
- end
82
- end
83
- end
84
-
85
- # Creates a string used by the control file to specify dependencies
86
- # Dependencies can be formatted as :
87
- # foo (>= x.x-x)
88
- # foo (>= x.x)
89
- # foo
90
- def build_dependency_string(data)
91
- dependencies = []
92
- PluginPackager.filter_dependencies('debian', data[:dependencies]).each do |dep|
93
- if dep[:version] && dep[:revision]
94
- dependencies << "#{dep[:name]} (>=#{dep[:version]}-#{dep[:revision]}) | puppet-agent"
95
- elsif dep[:version]
96
- dependencies << "#{dep[:name]} (>=#{dep[:version]}) | puppet-agent"
97
- else
98
- dependencies << "#{dep[:name]} | puppet-agent"
99
- end
100
- end
101
-
102
- if data[:plugindependency]
103
- dependencies << "#{data[:plugindependency][:name]} (= ${binary:Version})"
104
- end
105
-
106
- dependencies.join(', ')
107
- end
108
-
109
- # Creates an install file for each of the packages that are going to be created
110
- # for the plugin
111
- def create_install_file(type, data)
112
- install_file = "#{@package_name}-#{type}"
113
- begin
114
- install_file = File.join(@build_dir, 'debian', "#{install_file}.install")
115
- File.open(install_file, 'w') do |file|
116
- data[:files].each do |f|
117
- extended_filename = File.join(@libdir, File.expand_path(f).gsub(/^#{@plugin.target_path}/, ''))
118
- file.puts "#{extended_filename} #{File.dirname(extended_filename)}"
119
- end
120
- end
121
- rescue Errno::EACCES => e
122
- puts "Could not create install file '#{install_file}'. Permission denied"
123
- raise e
124
- rescue => e
125
- puts "Could not create install file '#{install_file}'."
126
- raise e
127
- end
128
- end
129
-
130
- # Move source package and debs to cwd
131
- def move_packages
132
- begin
133
- files_to_copy = Dir.glob(File.join(@tmpdir, '*.{deb,dsc,diff.gz,orig.tar.gz,changes}'))
134
- FileUtils.cp(files_to_copy, '.')
135
- rescue => e
136
- puts 'Could not copy packages to working directory.'
137
- raise e
138
- end
139
- end
140
-
141
- # Create pre and post install files in $buildroot/debian
142
- # from supplied scripts.
143
- # Note that all packages built for the plugin will invoke
144
- # the same pre and post install scripts.
145
- def create_pre_and_post_install(type)
146
- if @plugin.preinstall
147
- if !File.exists?(@plugin.preinstall)
148
- puts "pre-install script '#{@plugin.preinstall}' not found."
149
- raise(Errno::ENOENT, @plugin.preinstall)
150
- else
151
- FileUtils.cp(@plugin.preinstall, File.join(@build_dir, 'debian', "#{@package_name}-#{type}.preinst"))
152
- end
153
- end
154
-
155
- if @plugin.postinstall
156
- if !File.exists?(@plugin.postinstall)
157
- puts "post-install script '#{@plugin.postinstall}' not found."
158
- raise(Errno::ENOENT, @plugin.postinstall)
159
- else
160
- FileUtils.cp(@plugin.postinstall, File.join(@build_dir, 'debian', "#{@package_name}-#{type}.postinst"))
161
- end
162
- end
163
- end
164
-
165
- # Tar up source
166
- # Expects directory : $mcollective-$agent_$version
167
- # Creates file : $buildroot/$mcollective-$agent_$version.orig.tar.gz
168
- def create_tar
169
- name_and_version = "#{@package_name}_#{@plugin.metadata[:version]}"
170
- tarfile = "#{name_and_version}.orig.tar.gz"
171
- begin
172
- PluginPackager.execute_verbosely(@verbose) do
173
- Dir.chdir(@tmpdir) do
174
- PluginPackager.safe_system("tar -Pcvzf #{File.join(@tmpdir, tarfile)} #{name_and_version}")
175
- end
176
- end
177
- rescue Exception => e
178
- puts "Could not create tarball - #{tarfile}"
179
- raise e
180
- end
181
- end
182
-
183
- def create_file(filename)
184
- begin
185
- file = ERB.new(File.read(File.join(File.dirname(__FILE__), 'templates', 'debian', "#{filename}.erb")), nil, '-')
186
- File.open(File.join(@build_dir, 'debian', filename), 'w') do |f|
187
- f.puts file.result(binding)
188
- end
189
- rescue => e
190
- puts "Could not create file - '#{filename}'"
191
- raise e
192
- end
193
- end
194
-
195
- # Move files contained in the plugin to the correct directory
196
- # relative to the build root.
197
- def prepare_tmpdirs(data)
198
- data[:files].each do |file|
199
- begin
200
- targetdir = File.join(@build_dir, @libdir, File.dirname(File.expand_path(file)).gsub(/^#{@plugin.target_path}/, ""))
201
- FileUtils.mkdir_p(targetdir) unless File.directory?(targetdir)
202
- FileUtils.cp_r(file, targetdir)
203
- rescue Errno::EACCES => e
204
- puts "Could not create directory '#{targetdir}'. Permission denied"
205
- raise e
206
- rescue Errno::ENOENT => e
207
- puts "Could not copy file '#{file}' to '#{targetdir}'. File does not exist"
208
- raise e
209
- rescue => e
210
- puts 'Could not prepare build directory'
211
- raise e
212
- end
213
- end
214
- end
215
-
216
- # Create the $buildroot/debian directory
217
- def create_debian_dir
218
- deb_dir = File.join(@build_dir, 'debian')
219
- begin
220
- FileUtils.mkdir_p(deb_dir)
221
- rescue => e
222
- puts "Could not create directory '#{deb_dir}'"
223
- raise e
224
- end
225
- end
226
-
227
- def cleanup_tmpdirs
228
- begin
229
- FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir)
230
- rescue => e
231
- puts "Could not remove temporary build directory - '#{@tmpdir}'"
232
- raise e
233
- end
234
- end
235
- end
236
- end
237
- end
@@ -1,127 +0,0 @@
1
- module MCollective
2
- module PluginPackager
3
- class ModulepackagePackager
4
- require 'erb'
5
-
6
- def initialize(plugin, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = nil, module_template = nil)
7
- assert_new_enough_puppet
8
- @plugin = plugin
9
- @package_name = "#{@plugin.mcname}_#{@plugin.metadata[:name]}".gsub(/-/, '_')
10
- @verbose = verbose
11
- @keep_artifacts = keep_artifacts
12
- @module_template = module_template || File.join(File.dirname(__FILE__), 'templates', 'module')
13
- end
14
-
15
- # Build Process :
16
- # - create module directory
17
- # - run 'puppet module build'
18
- # - move generated package back to cwd
19
- def create_packages
20
- begin
21
- puts "Building module for #{@package_name} plugin."
22
-
23
- @tmpdir = Dir.mktmpdir('mcollective_packager')
24
- make_module
25
- run_build
26
- move_package
27
-
28
- puts "Completed building module for #{@package_name} plugin."
29
- ensure
30
- if @keep_artifacts
31
- puts 'Keeping build artifacts'
32
- puts "Build artifacts saved - #{@tmpdir}"
33
- else
34
- cleanup_tmpdirs
35
- end
36
- end
37
- end
38
-
39
- private
40
-
41
- def assert_new_enough_puppet
42
- unless PluginPackager.command_available?('puppet')
43
- raise("Cannot build package. 'puppet' is not present on the system.")
44
- end
45
-
46
- s = Shell.new('puppet --version')
47
- s.runcommand
48
- actual_version = s.stdout.chomp
49
-
50
- required_version = '3.3.0'
51
- if Util.versioncmp(actual_version, required_version) < 0
52
- raise("Cannot build package. puppet #{required_version} or greater required. We have #{actual_version}.")
53
- end
54
- end
55
-
56
- def make_module
57
- targetdir = File.join(@tmpdir, 'manifests')
58
- FileUtils.mkdir_p(targetdir) unless File.directory?(targetdir)
59
-
60
- # for each subpackage make a subclass
61
- @plugin.packagedata.each do |klass,data|
62
- data[:files].each do |file|
63
- relative_path = File.expand_path(file).gsub(/#{@plugin.target_path}|^\.\//, '')
64
- targetdir = File.join(@tmpdir, 'files', klass.to_s, 'mcollective', File.dirname(relative_path))
65
- FileUtils.mkdir_p(targetdir) unless File.directory?(targetdir)
66
- FileUtils.cp_r(file, targetdir)
67
- end
68
-
69
- @klass = klass.to_s
70
- render_template('_manifest.pp.erb', File.join(@tmpdir, 'manifests', "#{klass}.pp"))
71
- end
72
-
73
- # render all the templates we have
74
- Dir.glob(File.join(@module_template, '*.erb')).each do |template|
75
- filename = File.basename(template, '.erb')
76
- next if filename =~ /^_/ # starting with underscore makes it private
77
- render_template("#{filename}.erb", File.join(@tmpdir, filename))
78
- end
79
- end
80
-
81
- def render_template(template, path)
82
- begin
83
- erb = ERB.new(File.read(File.join(@module_template, template)), nil, '-')
84
- File.open(path, 'w') do |f|
85
- f.puts erb.result(binding)
86
- end
87
- rescue => e
88
- puts "Could not render template to path - '#{path}'"
89
- raise e
90
- end
91
- end
92
-
93
- def run_build
94
- begin
95
- PluginPackager.execute_verbosely(@verbose) do
96
- Dir.chdir(@tmpdir) do
97
- PluginPackager.safe_system('puppet module build')
98
- end
99
- end
100
- rescue => e
101
- puts 'Build process has failed'
102
- raise e
103
- end
104
- end
105
-
106
- # Move built package to cwd
107
- def move_package
108
- begin
109
- package_file = File.join(@tmpdir, 'pkg', "#{@plugin.vendor}-#{@package_name}-#{@plugin.metadata[:version]}.tar.gz")
110
- FileUtils.cp(package_file, '.')
111
- rescue => e
112
- puts 'Could not copy package to working directory'
113
- raise e
114
- end
115
- end
116
-
117
- def cleanup_tmpdirs
118
- begin
119
- FileUtils.rm_r(@tmpdir) if File.directory?(@tmpdir)
120
- rescue => e
121
- puts "Could not remove temporary build directory - '#{@tmpdir}'"
122
- raise e
123
- end
124
- end
125
- end
126
- end
127
- end
@@ -1,59 +0,0 @@
1
- module MCollective
2
- module PluginPackager
3
- # MCollective plugin packager general OS implementation.
4
- class OspackagePackager
5
-
6
- attr_accessor :package, :verbose, :packager, :package_type
7
-
8
- # Create packager object with package parameter containing list of files,
9
- # dependencies and package metadata.
10
- def initialize(package, pluginpath = nil, signature = nil, verbose = false, keep_artifacts = false, module_template = nil)
11
-
12
- if File.exists?("/etc/redhat-release")
13
- @packager = PluginPackager["RpmpackagePackager"].new(package, pluginpath, signature, verbose, keep_artifacts, module_template)
14
- @package_type = "RPM"
15
- elsif File.exists?("/etc/debian_version")
16
- @packager = PluginPackager["DebpackagePackager"].new(package, pluginpath, signature, verbose, keep_artifacts, module_template)
17
- @package_type = "Deb"
18
- else
19
- raise "cannot identify operating system."
20
- end
21
-
22
- @package = package
23
- @verbose = verbose
24
- end
25
-
26
- # Hands over package creation to the detected packager implementation
27
- # based on operating system.
28
- def create_packages
29
- @packager.create_packages
30
- end
31
-
32
- # Displays the package metadata and detected files
33
- def package_information
34
- puts
35
- puts "%30s%s" % ["Plugin information : ", @package.metadata[:name]]
36
- puts "%30s%s" % ["-" * 22, "-" * 22]
37
- puts "%30s%s" % ["Plugin Type : ", @package.plugintype.capitalize]
38
- puts "%30s%s" % ["Package Output Format : ", @package_type]
39
- puts "%30s%s" % ["Version : ", @package.metadata[:version]]
40
- puts "%30s%s" % ["Revision : ", @package.revision]
41
- puts "%30s%s" % ["Vendor : ", @package.vendor]
42
- puts "%30s%s" % ["Post Install Script : ", @package.postinstall] if @package.postinstall
43
- puts "%30s%s" % ["Author : ", @package.metadata[:author]]
44
- puts "%30s%s" % ["License : ", @package.metadata[:license]]
45
- puts "%30s%s" % ["URL : ", @package.metadata[:url]]
46
-
47
- if @package.packagedata.size > 0
48
- @package.packagedata.each_with_index do |values, i|
49
- if i == 0
50
- puts "%30s%s" % ["Identified Packages : ", values[0]]
51
- else
52
- puts "%30s%s" % [" ", values[0]]
53
- end
54
- end
55
- end
56
- end
57
- end
58
- end
59
- end